国际化 - 角度

时间:2017-12-19 11:31:17

标签: angularjs internationalization

我正在关注此tutorial将我网站的内容翻译成几种语言,但我希望这取决于访问我网站的默认语言,而不是按下按钮。

例如,如果一个来自西班牙的人访问我的网站,我想用西班牙语显示,如果没有,请用英语显示。

有可能吗?基本上,就像Android Framework一样。

2 个答案:

答案 0 :(得分:0)

您可以从导航器对象中检测语言。导航器有语言数组。数组的第一语言是浏览器的默认语言。

export class App {

  constructor(private winRef: WindowRef) {

    console.log('navigator object', winRef.nativeWindow.navigator);
  }
}

答案 1 :(得分:0)

要访问浏览器的语言,只需使用:

var lang = navigator.language;

解决方案1 ​​

因此,使用的一个示例如下:

//Used for the internationalization
  constructor(
    private translate: TranslateService,
  ) {
    //Getting the language of the browser
    var lang = navigator.language;
    this.switchLanguage(lang);
  }

  switchLanguage(language: string) {
    //console.log(language);
    if (language == "en") this.translate.use("en");
    else if (language == "es") this.translate.use("es");
    else this.translate.use("en");
  }

在这种情况下,在您的组件的constructor中,您将获得浏览器的语言,并致电switchLanguage以定义您应使用的语言。

解决方案2(对我来说效果更好)

另一种解决方案是创建一个新文件,例如translation.service.ts

用于管理该文件中的方法:

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

@Injectable()
export class TranslationService {
    constructor(
        //Used for the internationalization
        private translate: TranslateService,
    ) { }

    switchLanguage(language: string) {
        console.log(language);
        if (language == "es" || language == "es-ar" || language == "es-bo" || language == "es-cl" || language == "es-co" || language == "es-cr" || language == "es-do" || language == "es-ec"
            || language == "es-sv" || language == "es-gt" || language == "es-hn" || language == "es-mx" || language == "es-ni" || language == "es-pa" || language == "es-py"
            || language == "es-pe" || language == "es-er" || language == "es-es" || language == "es-uy" || language == "es-ve") this.translate.use("es");
        else this.translate.use("es");
    }
}

之后只需将其注入要翻译的组件