Реализация Angular Translate

Пожалуйста, предложите мне реализацию для перевода приложения angular на разные языки. Я также использовал ngx-translate. Но хотите перевести все приложение сразу?

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
0
1 467
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать угловую технику перевода i18n

техника перевода i18n

Создать минимальный проект Angular4 Мы используем @ angular / cli для создания нового проекта с именем traduction в терминале:

 ng new traduction --prefix tr
    cd traduction
    ng serve -o

Установите и загрузите ngx-translate

Используйте npm в своем терминале в папке проекта «traduction»:

npm install @ngx-translate/core --save
npm install @ngx-translate/http-loader

Импортируйте необходимые модули в app.module.ts:

import { HttpClientModule, HttpClient } from '@angular/common/http';
import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';

Добавьте функцию, которая возвращает TranslateHttpLoader, и экспортируйте ее (требуется AoT). В этом случае функция HttpLoaderFactory, которую мы создаем, возвращает объект, который может загружать переводы с использованием Http и .json, но вы можете написать свой собственный класс, который, например, использует глобальную переменную JavaScript вместо загрузки файла или использует Google Translate:

export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http);
}

Затем нам нужно импортировать наши модули в @NgModule, это импорт, который сообщает Angular загрузить этот модуль в ваш AppModule:

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })
  ],
  providers: [],
  bootstrap: [AppComponent]
})

Было бы намного проще, если бы Angular использовал ключевые слова «load» или «submodule» вместо «import», потому что вначале легко спутать импорт ES2015 с импортом NgModule.

Внедрить TranslateService

В app.component.ts мы запускаем TranslateService, импортируем TranslateService:

import { TranslateService } from '@ngx-translate/core';

Затем внутри класса AppComponent мы внедряем службу и определяем язык по умолчанию. И чтобы быть готовым к следующему шагу, мы добавляем функцию переключения языка.

constructor(private translate: TranslateService) {
    translate.setDefaultLang('en');
  }

  switchLanguage(language: string) {
    this.translate.use(language);
  }

Создание файлов перевода .json

Теперь мы создаем наши файлы перевода в папке assets / i18n:

SRC / активы / i18n / en.json

{
    "Title": "Translation example",
    "Intro": "Hello I am Arthur, I am 42 years old."
}

SRC / активы / i18n / fr.json

{
    "Title": "Exemple de traduction",
    "Intro": "Bonjour je m'appelle Arthur, j'ai 42 ans."
}

Это простые файлы .json, которые будут загружены нашим «TranslateHttpLoader», который мы создали в «app.module.ts».

Перевести простой заголовок и вступление

В app.component.html мы добавляем заголовок с «директивой» translate внутри тега «h1». Эта директива берет текст внутри тега и заменяет его соответствующим переводом. Если вы используете директиву, вы должны убедиться, что внутри тега нет ничего, кроме текста.

В качестве второго примера мы используем «TranslationPipe» для перевода метки с помощью define как встроенной строки. Поскольку иногда у нас есть значение внутри перевода, которое мы хотим заменить, мы можем передать объект данных в конвейер «translate».

<h1 translate>Title</h1>

<div>
  {{ 'Intro' | translate:user }}
</div>

Интегрировать переключатель языка

Теперь мы можем прикрепить нашу функцию переключения языка, которую мы видели выше в app.component.ts, к кнопке. В этом случае мы создаем кнопку для каждого языка и вызываем функцию switchLanguage () с соответствующей клавишей языка.

<button (click) = "switchLanguage('en')">en</button>

<button (click) = "switchLanguage('fr')">fr</button>

Перевести предложение с переменной

Как упоминалось ранее, иногда у вас есть предложения, содержащие переменную. В этом небольшом примере у нас есть объект пользователя с возрастом и именем внутри «app.component.ts», и мы хотим перевести предложение, которое будет содержать следующие значения:

...
export class AppComponent {
  user = {
    name: 'Arthur',
    age: 42
  };
...
}

Поскольку мы передаем этот объект в конвейер «translate», теперь мы можем использовать его свойства в нашем переводе с обозначением {{placeholder}}.

SRC / активы / i18n / en.json

{
    "Title": "Translation example",
    "Intro": "Hello I am {{name}}, I am {{age}} years old."
}

SRC / активы / i18n / fr.json

{
    "Title": "Exemple de traduction",
    "Intro": "Bonjour je m'appelle {{name}}, j'ai {{age}} ans."
}

Использование вложенных объектов .json

Если вы хотите иметь больший контроль над своим переводом и, например, переводить блоки страниц (с точки зрения конечного пользователя) или компоненты (с точки зрения разработчика), одним из решений может быть следующее; используйте вложенные объекты .json, как описано в репозитории git. Пример может выглядеть так в файлах -json:

{
    "Title": "Translation example",
    "Intro": "Hello I am {{name}}, I am {{age}} years old.",
    "Startpage": {
        "TranslationSections": "Hello World"
    },
     "Aboutpage": {
        "TranslationSections": "We are letsboot"
    }
}

{
    "Title": "Exemple de traduction",
    "Intro": "Bonjour je m'appelle {{name}}, j'ai {{age}} ans.",
    "Startpage": {
        "TranslationSections": "Bonjour Monde"
    },
    "Aboutpage": {
        "TranslationSections": "Nous sommes letsboot"
    }
}

И в соответствующем шаблоне:

<h1 translate>Title</h1>

<div>
  {{ 'Intro' | translate:user }}
</div>

<div>
  {{ 'Startpage.TranslationSections' | translate }}
</div>

<div>
  {{ 'Aboutpage.TranslationSections' | translate }}
</div>

<br/>

<button (click) = "switchLanguage('en')">en</button>
<button (click) = "switchLanguage('fr')">fr</button>

Пример: угловой перевод

А что, если у меня будет 20 компонентов? мне нужно вводить TranslateService в каждый из них?

daniel gi 07.01.2019 13:18

@danielgi, вам не нужно размещать службу перевода повсюду, следуя инструкциям выше. Нужно только импортировать в app.component

Dinesh Ghule 08.01.2019 03:50

спасибо, но ваше решение работает только с файлами .html, но не с файлами .ts. например, я не могу вызвать translate.instant ()

daniel gi 09.01.2019 09:18

@daniel gi вы можете использовать сервис перевода для работы с файлами .ts

Dinesh Ghule 09.01.2019 09:42

Итак, если у меня есть 20 компонентов, мне нужно внедрить службу перевода в каждый из них, чтобы использовать ее в файлах ts? также нет глобального instace для файлов .ts?

daniel gi 09.01.2019 09:56

@danielgi, вы можете импортировать службу перевода в модуль приложения и использовать evrywhere

Dinesh Ghule 10.01.2019 10:29

Другие вопросы по теме