ngx translate angular 7, как переводить динамические данные из разных API-интерфейсов - PullRequest
0 голосов
/ 06 февраля 2019

У меня проблема с ngx-translate!То есть у меня есть 2 отдельных API с разными языками, например, схожими с http://example.com/api и http://example.com/fr/api/

Теперь в ngx-translate мне нужно использовать en/fr.json файлы для перевода моего углового приложения!как я видел из документов!

Но теперь мне нужно использовать данные, которые поступают из обоих API!это уже переведено на сервер!

http://example.com/api

http://example.com/fr/api/

Так вот мой вопрос, как мне это сделать ?!продолжайте использовать json files, так как в моем приложении есть некоторые статические слова, такие как the application menu

Если есть какие-либо другие альтернативы, пожалуйста, не стесняйтесь сообщать!

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

использовать переводчик только для этих слов (some statics words in my app like the application menu)

как

{{'HOME.NAME' |translate}}

и удалите фильтр перевода из данных API

0 голосов
/ 06 февраля 2019

Допущения:

  • Только 2 возможных варианта языка: ["en","fr"]
  • Файлы переводов не извлекаются из локализованных API.Вместо этого они находятся в папке assets вашего проекта.
  • При изменении языка с помощью ngx-translate нет необходимости повторно извлекать data

Вы можете создать службу, которая создает правильную конечную точку API, следующим образом:

@Injectable()
export class EnpointLocalizer {
  private readonly tokenMap = {'en': '/', '/fr/'}
  constructor(private readonly translate: TranslateService){}

  localizeJoin(sections: string[]){
   const {currentLang} = this.translate;
   return sections.join(this.tokenMap[currentLang] || '/'); 
  }
}

Затем вы можете внедрить ее в случае необходимости и использовать ее следующим образом:

@Injectable()
export class FooService {
 private endpoint = ["http://example.com","api"];

 constructor(private http: HttpClient, private localizer: EnpointLocalizer){}

 fetch(){
   return this.http.get(this.localizer.localizeJoin(this.endpoint),...);
 }
}

Конечно, существуют разные способы реализации логики «локализации» (например, regex patter + replace).Но для вашего случая использования я думаю, что это простое и понятное начало.

...