如何获取i18n在Angular项目中配置的所有翻译?

时间:2019-04-17 09:46:26

标签: angular pipe angular7 angular-i18n

我正在Angular 7中使用以下语言的i18n(国际化):en,es,fr,it,pl,pt和ru。

我需要获取项目中配置的所有语言,以设置带有其值的下拉列表。如何获得在JSON文件中设置的这些语言,以便在下拉列表中使用它们?

至少可以循环播放文件夹中的文件并恢复文件名吗?

2 个答案:

答案 0 :(得分:1)

您无法访问i18n文件夹以获取角度文件列表。

您需要创建API才能读取它。这样我在项目中实施,我就为谁所关心。

[Route("api/webconfiguration/getlanguages")]
        [AcceptVerbs("GET")]
        public dynamic GetLanguages()
        {    
            string path = ConfigurationManager.AppSettings["LanguageFolder"];

            DirectoryInfo dir = new DirectoryInfo(path);
            FileInfo[] files = dir.GetFiles("*.json");
            if (files.Length > 0)
            {
                var languages = files.Select(file => Path.GetFileNameWithoutExtension(file.Name));
                return languages.Select(c => new { code = c, name = new CultureInfo(c).DisplayName }).ToList();
            }

            return null;
        }

在web.config中配置

<add key="LanguageFolder" value="C:\src\assets\i18n"/>

创建服务以获取语言列表并在组件中使用。

getLanguages() {
    return this.httpClient.get<any>('/api/webconfiguration/getlanguages').pipe(
      map(response => <any>response));
  }

答案 1 :(得分:0)

到目前为止,我可以提供的服务就是这样。 直到我实现了您的期望,希望它能奏效。 这只是一个例子。

<ng-container *ngFor="let language of languageList">
 <a href="/{{language.code}}/">
 <button class="button">{{language.label}}</button>
 </a>
</ng-container>

这是.TS

中声明的列表
languageList = [
   { code: 'en', label: 'English' },
   { code: 'de', label: 'German' },
   { code: 'es', label: 'Espanol' }
];