Угловой перевод i18n в производство не работает - PullRequest
0 голосов
/ 24 апреля 2018

В моей среде разработки код работает нормально.Но как только я создаю его и запускаю в производство, оно не может скомпилировать приложение на правильный язык

console.log(environment);

if (environment.production) {
   enableProdMode();
   window.console.log = function () { };   // disable any console.log debugging statements in production mode
}


declare const require;
var translations;

let locationSplit = window.location.hostname.split(".");
console.log(locationSplit);

if (locationSplit[0] == environment.chinese) {

  translations = require(`raw-loader!./locale/translatedChinese.zh-Hans.xlf`);
}
else {

  translations = null;
}


platformBrowserDynamic().bootstrapModule(AppModule, {
  providers: [
    { provide: TRANSLATIONS, useValue: translations },
    { provide: TRANSLATIONS_FORMAT, useValue: 'xlf' }
  ]
});

Я консоль веду журнал файла перевода, и он там.Но ... это не так.Да, логика в порядке.Я проверял это.И, как я уже сказал, при локальном запуске с веб-пакетом все хорошо.Так что я не совсем понимаю, в чем проблема.Файл есть, логика верна, но все равно отображается на английском языке: (

Ответы [ 2 ]

0 голосов
/ 11 июля 2019

Кажется, что это можно сделать с помощью компилятора AOT.

Из угловой документации:

При интернационализации с помощью компилятора AOT необходимо предварительно создать отдельный пакет приложения для каждого языка и предоставить соответствующий пакет на основе определения языка на стороне сервера или параметров URL-адреса. Чтобы указать компилятору AOT использовать конфигурацию перевода, задайте три параметра конфигурации сборки «i18n» в файле angular.json.

  1. i18nFile: путь к файлу перевода.
  2. i18nFormat: формат файла перевода.
  3. i18nLocale: идентификатор локали.

Вы также должны направить вывод в папку, зависящую от локали, чтобы отделить ее от других версий вашего приложения, установив опцию конфигурации outputPath.

"build": {
  ...
  "configurations": {
    ...
    "fr": {
      "aot": true,
      "outputPath": "dist/my-project-fr/",
      "i18nFile": "src/locale/messages.fr.xlf",
      "i18nFormat": "xlf",
      "i18nLocale": "fr",
      ...
    }
  }
},
"serve": {
  ...
  "configurations": {
    ...
    "fr": {
      "browserTarget": "*project-name*:build:fr"
    }
  }
}

Затем вы можете передать эту конфигурацию командам ng serve или ng build. В приведенном ниже примере показано, как обслуживать файл на французском языке, созданный в предыдущих разделах этого руководства:

ng serve --configuration=fr

Для производственных сборок вы определяете отдельную конфигурацию production-fr в файле конфигурации CLI, angular.json.

...
"architect": {
  "build": {
    "builder": "@angular-devkit/build-angular:browser",
    "options": { ... },
    "configurations": {
      "fr": {
        "aot": true,
        "outputPath": "dist/my-project-fr/",
        "i18nFile": "src/locale/messages.fr.xlf",
        "i18nFormat": "xlf",
        "i18nLocale": "fr",
        "i18nMissingTranslation": "error",
      }
// ...
"serve": {
  "builder": "@angular-devkit/build-angular:dev-server",
  "options": {
    "browserTarget": "my-project:build"
  },
  "configurations": {
    "production": {
      "browserTarget": "my-project:build:production"
    },
    "fr": {
      "browserTarget": "my-project:build:fr"
    }
  }
},

Те же параметры конфигурации также могут быть предоставлены через CLI с существующей производственной конфигурацией.

ng build --prod --i18n-file src/locale/messages.fr.xlf --i18n-format xlf --i18n-locale fr

Более подробная информация здесь: https://angular.io/guide/i18n#merge-with-the-aot-compiler

0 голосов
/ 24 апреля 2018

угловой i18n не работает с aot. попробуйте собрать так, убедитесь, что aot выключен:

 ng build --aot=false
...