angular - Angular 11 - 找不到手动创建的语言环境文件
问题描述
我有一个 Angular 11 应用程序,我们支持 14 种语言,包括萨摩亚语和他加禄语,语言环境分别为 sm 和 tl。Angular 没有这些的语言环境文件。我已经创建并部分翻译了我自己的文件。但是在构建过程中,我收到以下错误消息:
Locale data for 'sm' cannot be found. No locale data will be included for this locale.
Locale data for 'tl' cannot be found. No locale data will be included for this locale.
angular.json 文件包含:
...
"i18n": {
"sourceLocale": {
"code": "en",
"baseHref": "myApp/en/"
},
"locales": {
"de": {
"translation": "src/i18n/messages.de.xlf",
"baseHref": "myApp/de/"
},
"sm": {
"translation": "src/i18n/messages.sm.xlf",
"baseHref": "myApp/sm/"
},
"tl": {
"translation": "src/i18n/messages.tl.xlf",
"baseHref": "myApp/tl/"
},
...
为了将 Angular 指向语言环境文件,我在 app.module.ts 文件的顶部附近添加了以下几行。我的个性化语言环境文件位于我的应用程序中显示的路径(在应用程序文件夹内)。
import { registerLocaleData } from '@angular/common';
import localeSm from './pb-locales/sm';
import localeTl from './pb-locales/tl';
registerLocaleData(localeSm, 'sm');
registerLocaleData(localeTl, 'tl');
我在网上找不到关于此的单一参考。
更新:我将只使用菲律宾语(菲律宾语),又名“fil”作为他加禄语的替代品,因为 Angular 支持菲律宾语。
sm.js 文件是 en.js 文件的副本,有一些更改。角找不到它:
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(null, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define("@angular/common/locales/sm", ["require", "exports"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// THIS CODE IS GENERATED - DO NOT MODIFY
// See angular/tools/gulp-tasks/cldr/extract.js
var u = undefined;
function plural(n) {
var i = Math.floor(Math.abs(n)), v = n.toString().replace(/^[^.]*\.?/, '').length, f = parseInt(n.toString().replace(/^[^.]*\.?/, ''), 10) || 0;
if (v === 0 && (i === 1 || i === 2 || i === 3) ||
v === 0 && !(i % 10 === 4 || i % 10 === 6 || i % 10 === 9) ||
!(v === 0) && !(f % 10 === 4 || f % 10 === 6 || f % 10 === 9))
return 1;
return 5;
}
exports.default = [
'sm',
[['a', 'p'], ['AM', 'PM'], u],
[['AM', 'PM'], u, u],
[
['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
['Aso Sa', 'Aso Gafua', 'Aso Lua', 'Aso Lulu', 'Aso Tofi', 'Aso Faralie', 'Aso Tonaʻi'],
['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']
],
u,
[
['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
[
'Ianuari', 'Fepuari', 'Mati', 'Aperila', 'Me', 'Iuni', 'Iulai', 'Auguso', 'Setema',
'Oketopa', 'Novema', 'Tesema'
]
],
[
['E', 'P', 'M', 'A', 'M', 'Hun', 'Hul', 'Ago', 'Set', 'Okt', 'Nob', 'Dis'],
['Ene', 'Peb', 'Mar', 'Abr', 'May', 'Hun', 'Hul', 'Ago', 'Set', 'Okt', 'Nob', 'Dis'],
[
'Enero', 'Pebrero', 'Marso', 'Abril', 'Mayo', 'Hunyo', 'Hulyo', 'Agosto', 'Setyembre',
'Oktubre', 'Nobyembre', 'Disyembre'
]
],
[['B', 'A'], ['BC', 'AD'], ['Before Christ', 'Anno Domini']],
0,
[6, 0],
['M/d/yy', 'MMM d, y', 'MMMM d, y', 'EEEE, MMMM d, y'],
['h:mm a', 'h:mm:ss a', 'h:mm:ss a z', 'h:mm:ss a zzzz'],
['{1}, {0}', u, '{1} \'at\' {0}', u],
['.', ',', ';', '%', '+', '-', 'E', '×', '‰', '∞', 'NaN', ':'],
['#,##0.###', '#,##0%', '¤#,##0.00', '#E0'],
'USD',
'$',
'US Dollar',
{},
'ltr',
plural
];
});
我添加了一个 GitHub 存储库,可以从中进行测试:https ://github.com/DrewShirts/angular-samoan
要重现该问题,请运行脚本build prod
。
解决方案
以下工作,但是一个黑客。我仍在寻找更好的解决方案,而不是针对角度代码执行拉取请求。当然,这不是唯一的长期解决方案。
我创建了一个 bash 脚本作为构建过程的一部分运行,该过程将 sm.js 文件从项目内部复制到 node_modules/@angular/common/locales/global
cp ./src/app/locales/sm.js ./node_modules/@angular/common/locales/global/
然后修改package.json:
"build": "./pre-build-hack.sh && ng build --configuration production --localize"
不是一个优雅的解决方案,但它有效。这也适用于我们的 CI/CD 平台。
感谢@Eliseo 为我们指明了这个解决方案的方向。
推荐阅读
- php - 尝试在google api(php)中为app_ad变异创建AdGroupAd时如何解决分段错误
- python - X轴乱序seaborn histplot
- java - Java如何在终端中动态更改数字
- javascript - MongoDB BSON 文档大小异常
- typescript - 为什么不能推断出这些泛型类型?
- c# - 将 Wireshark 过滤器表达式转换为 BPF
- c# - 带有 ASP.NET 4.6.2 Web API 的 Identity Server 4 导致重定向
- linux - awk 'FNR == 2 {print}' 问题
- python - 使用飞行写表时出现“OSError:无法将记录批处理写入流”
- javascript - 如何添加警报 angular11