Глобальный метод $ localize в Angular 9 возвращает сам текст - PullRequest
0 голосов
/ 02 мая 2020

Я следовал инструкциям по использованию $localize и пытался использовать его следующим образом:

Мой angular.json (связанные части):

        "build": {
          ...
          "configurations": {
            ...
            "fr-FR": {
              "aot": true,
              "outputPath": "dist/fr-FR",
              "i18nFile": "src/locale/messages.fr.xlf",
              "i18nFormat": "xlf",
              "i18nLocale": "fr-FR",
              "i18nMissingTranslation": "error"
            }
          }
        },
        "serve": {
         ...
          "configurations": {
            ...
            "fr-FR": {
              "browserTarget": "frontend:build:fr-FR"
            }
          }
        },

и запуска приложения с: ng serve --configuration=fr-FR

Когда я использую атрибут i18n в своих шаблонах следующим образом:

<p i18n="@@profile">Profile</p>

и в моей messages.fr.xlf есть следующая запись :

      <trans-unit id="profile" datatype="html">
        <source>Profile</source>
        <target>Profil</target>
        <context-group purpose="location">
          <context context-type="sourcefile">src/app/profile/profile.component.html</context>
          <context context-type="linenumber">34</context>
        </context-group>
      </trans-unit>

все работает как положено. Но теперь мне нужно получить доступ к переводу в машинописи, скажем (profile.component.ts). Для этого у меня есть следующее:

let profileText = $localize`:@@profile`;
console.log(profileText);

Это приводит к следующей ошибке в консоли:

ERROR Error: Unterminated $localize metadata block in ":@@profile".

, и если я пытаюсь сделать следующее:

let profileText = $localize`:@@profile:Profile`;
console.log(profileText);

ошибка исчезла, но всегда печатает Profile, а не перевод. Чего мне не хватает?

Обновление:

Пожалуйста, найдите ссылку StackBlitz . Дело в том, что это; Я не думаю, что StackBlitz учитывает --configuration=fr-FR (из package.json) при работе и поведение такое же.

Обновление 2:

StackBlitz ссылка может вводить в заблуждение, так как я не знаю, как запустить проект с определенной c конфигурацией (скажем, --configuration=fr-FR). Поэтому я повторил проблему в репозитории Github .

1 Ответ

1 голос
/ 02 мая 2020

Удалите enableIvy: false из вашего tsconfig.json (в основном, включите Ivy) и исправьте конфигурацию i18n в вашем angular.json, как указано в do c:

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "project-name": {
      ...
      "i18n": {
        "sourceLocale": "en-US",
        "locales": {
          "fr": "src/locale/messages.fr.xlf"
        }
      },
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          ...
          "configurations": {
            "fr-FR": {
              "localize": [
                "fr"
              ]
            },
            ...
          }
        },
        "serve": {
          "builder": "@angular-devkit/build-angular:dev-server",
          ...
          "configurations": {
            "fr-FR": {
              "browserTarget": "project-name:build:fr-FR"
            },
            ...
          }
        },
        ...
      }
    }
  },
  ...
}
...