首页 > 其他分享 >angular项目国际化yaml自定义配置(ngx-translate)

angular项目国际化yaml自定义配置(ngx-translate)

时间:2023-04-17 16:33:34浏览次数:37  
标签:http 自定义 return yaml import translate ngx


angular国际化配置很简单,但是想不用json文件用yaml文件,并且同一语言分label.jp.yaml和message.jp.yaml两个文件分开管理。

1、下载ngx-translate的依赖库

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

2、app.module.ts 中引入TranslateModule模块

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

imports: [
    ......
    HttpClientModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpYamlLoaderFactory,
        deps: [HttpClient]
      }
    })
  ],


export function HttpYamlLoaderFactory(http: HttpClient): MultiTranslateLoader {
  const localPath = 'assets/i18n/';
  const resources = [
    { prefix: `${localPath}label.`, suffix: '.yaml' },
    { prefix: `${localPath}message.`, suffix: '.yaml' }
  ];
  return new MultiTranslateLoader(http, resources);
}

3、自建 MultiTranslateLoader  文件

import * as merge from 'deepmerge';
import * as jsyaml from 'js-yaml';
import { forkJoin, Observable, of } from 'rxjs';
import { catchError, map } from 'rxjs/operators';

import { HttpClient } from '@angular/common/http';
import { TranslateLoader } from '@ngx-translate/core';

export interface ITranslationResource {
    prefix: string;
    suffix: string;
}

export class MultiTranslateLoader implements TranslateLoader {
    constructor(
        private http: HttpClient,
        private resources: ITranslationResource[]
    ) { }

    public getTranslation(lang: string): Observable<any> {
        const requests = this.resources.map(resource => {
            const isYaml = resource.suffix.includes('yaml');
            const path = resource.prefix + lang + resource.suffix;

            return this.http
                .get(path, {
                    responseType: 'text'
                })
                .pipe(
                    catchError(() => {
                        console.error('Could not find translation file:', path);
                        return of({});
                    }),
                    map(res => {
                        if (!res) {
                            return {};
                        }
                        if (isYaml) {
                            return jsyaml.safeLoad(res.toString());
                        } else {
                            return JSON.parse(res.toString());
                        }
                    })
                );
        });
        return forkJoin(requests).pipe(map(response => merge.all(response)));
    }
}

4、创建国际化文件

label.ja.yaml

Button:
  Yes: はい
  No: いいえ

message.ja.yaml

Mes01: 入力が不正です。

5、注入TranslateService 服务

在需要用到的component里面注入TranslateService

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

constructor(private translate: TranslateService) { 
    this.translate.use('ja');
}

6、使用国际化

<span>{{'Mes01' | translate}}</span><br/>
<button>{{'Button.Yes' | translate}}</button>
<button>{{'Button.No' | translate}}</button>

angular项目国际化yaml自定义配置(ngx-translate)_json

 

 

 

 

标签:http,自定义,return,yaml,import,translate,ngx
From: https://blog.51cto.com/u_12374018/6195459

相关文章

  • npm自定义模块及发布模块NodeJS
    在模块目录下执行:npminit(可以加--yes一键生成)新建文件index.jsvaryunan='helloyunan';module.exports=yunan;然后将文件夹放到node_modules可以用下面方法使用试试constyunan=require('huyunan');console.log('yunan',yunan);//yunanhelloyunan发布之前......
  • splunk 自定义SPL命令关联威胁情报数据
    通过自定义SPL命令关联微步情报数据,效果如下:  1、安装splunk-sdkcd/data/splunk/etc/apps/search/binpip3install-t.splunk-sdk2、自定义脚本开发[root@SIEM-P-VC-A001bin]#morethreatquery.py#!/usr/bin/python#-*-coding:utf-8-*-importsysfromsplunklib.s......
  • Dockerfile自定义镜像
    常见的镜像在DockerHub就能找到,但是我们自己写的项目就必须自己构建镜像了。镜像结构镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。我们以MySQL为例,来看看镜像的组成结构:简单来说,镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、......
  • 在.NET 6.0中自定义接口路由
    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进。在本文中,我们将讨论ASP.NETCore中的新路由。我们将了解什么是接口(endpoints)路由,它是如何工作的,它在哪里使用,以及如何创建自己的路由。本文主题:探索接口路由......
  • Java中线程的常用操作-后台线程、自定义线程工厂ThreadFactpry、join加入一个线程、线
    场景Java中Thread类的常用API以及使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/126596884上面讲了Thread的常用API,下面记录下线程的一些常用操作。注:博客:https://blog.csdn.net/badao_liumang_qizhi实现后台线程后台线程,是指运行时在后台提供的一......
  • 自定义数据类型
    内置类型---intshortchardoubleflaot---C语言自己的类型复杂类型---结构体,枚举,联合体---自己创造的类型结构体结构体类型引用声明结构体是一些值的集合,这些值可以是不同类型。structStu//如果不屑Stu就是匿名结构体类型{ member-list;//--成员列表}Variable-list;//变量列表......
  • docker 构建自定义镜像
    1、docker构建自定义镜像copy与add的区别copy指令和add指令的唯一区别在于:是否支持从远程URL获取资源。COPY指令只能从执行dockerbuild所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。相同需求时,推荐使用COPY指令。ADD指令更......
  • Qt5.9 UI设计(四)——布局设计及自定义界面
    前言前面我们已经创建了mainwindowControlTabWidgetControlTreeWidgetmaintitlebar4个UI几面,我们需要将其他三个UI放置到mainwindow显示,同时需要它们可以自适应的界面的大小缩放。这里会使用到水平布局和垂直布局方法。(一)主界面布局设计放置一个空的widget将mainwi......
  • nginx自定义负载均衡及根据cpu运行自定义负载均衡
    转载请注明出处:1.nginx如何自定义负载均衡在Nginx中,可以通过配置文件自定义负载均衡策略。具体步骤如下:首先,在Nginx配置文件中定义一个upstream模块,并设置负载均衡策略和后端服务器列表,例如:upstreammyapp{serverbackend1.example.comweight=3;server......
  • 【记录帖】如何自定义博客园界面
    博客园美化教程大集合----极致个性化你的专属博客(超详细,看这篇就够了)博客园cnblogs:自定义页面风格博客园自定义样式......