국제화(I18N) 및 Transloco
11863 단어 angulartransloco
국제화(I18N)는 무엇입니까?
나는 국제화가 무엇인지 설명하는 것부터 시작하는 것이 가장 좋다고 생각한다(i18n은 단어의 첫 번째 자모, 그 다음은 자모수, 단어의 마지막 자모까지), 그리고 왜 국제화가 이렇게 중요한지 설명한다.
국제화는 여러 국가에서 쉽게 사용할 수 있도록 소프트웨어 응용 프로그램을 조정하는 과정이다.흔히 볼 수 있는 오해가 있다. 즉, 이것은 응용 프로그램의 모든 텍스트가 반드시 다양한 언어의 번역을 가져야 한다는 것을 의미한다.그러나 응용 프로그램에서 완전한 i18n은 단순한 텍스트가 아니다.
많은 서방 국가에서, 빨간색은 통상적으로 위험을 나타내는 데 쓰인다.그러나 세계 각지의 일부 지역에서 빨간색은 적극적인 색깔로 여겨진다.
마찬가지로 많은 서양 국가에서 텍스트는 왼쪽에서 오른쪽으로 읽힌다.그러나 어떤 언어에서는 텍스트가 오른쪽에서 왼쪽으로 읽힌다.
i18n이 작용하는 또 다른 예는 이미지에 있다.만약 응용 프로그램의 그림에 텍스트가 포함되어 있다면, i18n을 완전히 지원하기 위해서는 여러 개의 이미지를 생성해야 할 수도 있으며, 모든 이미지는 응용 프로그램에서 지원하는 언어의 정확한 번역을 가지고 있습니다.그리고 응용 프로그램을 사용하는 사용자가 있는 국가에 따라 정확한 이미지를 제공해야 합니다.
AngularConnect에서 이 문제에 대해 멋진 강연을 했습니다.만약 당신이 더 많은 정보를 알고 싶다면, 이 강연을 볼 수 있다.볼만해!
Transloco란 무엇입니까?
Transloco은 NgNeat팀이 개발하고 유지하는 라이브러리입니다.Angular 응용 프로그램을 쉽고 유지보수, 확장, 고성능으로 번역할 수 있도록 대량의 기능과 공식 지원 플러그인을 포함합니다.적극적인 유지 관리 및 지원:
각도 어플리케이션에 Transloco 통합
이제는 코드를 작성하는 데 착수할 때가 되었다.처음부터 시작합시다.nodejs과 npm를 설치했다고 가정합니다.만약 그렇지 않다면, 나는 LTS 버전을 사용하는 것을 건의한다!
설치
전역적으로 Angular CLI가 설치되지 않은 경우 원하는 셸에서 다음 명령을 실행합니다.
npm install -g @angular/cli
그러면 Angular CLI가 글로벌 설치됩니다.이제 Angular CLI를 사용하여 새 애플리케이션을 생성합니다.ng new transloco-test
너는 약간의 힌트를 얻을 수 있을 것이다.도서관을 시험적으로 사용하려면 우리는 너무 미친 물건을 필요로 하지 않는다.➜ ng new transloco-test
? Would you like to add Angular routing? No
? Which stylesheet format would you like to use? CSS
현재 새로 만든 transloco-test
폴더로 이동해야 합니다. cd transloco-test
여기에서 우리는 ng add
명령을 사용하여 Transloco를 응용 프로그램에 추가할 수 있습니다.주의:
ng add
원리도를 실행하면 Transloco는 우리의 프로젝트에서 자동으로 파일을 만들어서 초기 설정 과정을 포함합니다!ng add @ngneat/transloco
이 명령을 실행하면 라이브러리의 초기 설정에 대한 힌트를 볼 수 있습니다.현재 기본 설정은 다음과 같습니다.? 🌍 Which languages do you need? en, es
? 🚀 Are you working with server side rendering? No
우리는 또한 일부 파일을 만들고 업데이트하는 것을 볼 수 있습니다: 이 파일들을 빨리 살펴봅시다.
tranloco.config.js
- 다른 Transloco 도구에 사용되는 기본 설정 설정을 저장합니다.이것들은 우리가 번역한 파일을 저장하는 것이다.일반적으로 모든 언어의 파일을 지원합니다.그것들은 키 값 쌍으로 설정되었지만, Transloco는 끼워 넣는 키를 지원합니다.
src/assets/i18n/{en|es}.json
- 이 파일은 Transloco 모듈, 설정,transpiler와translationloader를 설정합니다.이 서류를 자세히 봅시다.
@Injectable({ providedIn: "root" })
export class TranslocoHttpLoader implements TranslocoLoader {
constructor(private http: HttpClient) {}
getTranslation(lang: string) {
// We can see here that the file names of our translations are important
// They must match the available languages in our app
return this.http.get<Translation>(`/assets/i18n/${lang}.json`);
}
}
@NgModule({
exports: [TranslocoModule],
providers: [
{
provide: TRANSLOCO_CONFIG,
useValue: translocoConfig({
// These strings of available langs must match our translation file names
availableLangs: ["en", "es"],
defaultLang: "en",
// Remove this option if your application doesn't support changing language in runtime.
reRenderOnLangChange: true,
prodMode: environment.production,
}),
},
{ provide: TRANSLOCO_LOADER, useClass: TranslocoHttpLoader },
],
})
export class TranslocoRootModule {}
이 파일은 Transloco를 저장하여 응용 프로그램의 번역을 위한 설정과 번역 로드 정책을 가져옵니다.주의해야 할 것은 번역 파일의 파일 이름은 응용 프로그램에서 지원하는
src/app/transloco/transloco-root.module.ts
그룹과 일치해야 한다는 것이다.템플릿에 번역 추가
Transloco는 우리의 템플릿에서 번역을 얻을 수 있는 다양한 방법을 제공합니다.
우선
availableLangs
폴더의 en.json
에 번역을 설정합니다.{
"title": "Transloco Test",
"welcomeText": "Hello {{ name }}"
}
assets/i18n
은 welcomeText
을 포함하고 있습니다. 이것은 우리가 번역에 전달한 동적 값입니다.우리는 또한
{{ name }}
을 증가시킬 것이다.만약 당신이 원한다면 당신은 스스로 번역할 수 있습니다. 저는 번역 전에 es.json
을 더해서 번역 간의 차이를 나타내고 싶습니다.{
"title": "ES- Transloco Test",
"welcomeText": "ES- Hello {{ name }}"
}
ES-
을 열고 파일의 모든 내용을 삭제한 다음 다음을 삽입합니다.<div>
<h1>{{ 'title' | transloco }}</h1>
<h3>{{ 'welcomeText' | transloco: {name: 'World'} }}</h3>
</div>
현재 app.component.html
을 사용하여 응용 프로그램을 실행하면 다음과 같은 내용을 볼 수 있습니다.경탄했어Transloco는 우리의 열쇠를 찾았고, 그것을 위해 정확한 번역을 성공적으로 찾았습니다!
우리는 또한 속성 명령을 사용하여 같은 결과를 실현할 수 있다.
<div>
<h1 transloco="title"></h1>
<h3 transloco="welcomeText" [translocoParams]="{name: 'World'}"></h3>
</div>
저는 개인적으로 번역에 동적 값을 제공하지 않고 ng serve
만 사용할 때 이런 방법의 효과가 매우 좋다고 생각합니다.만약 여러 개의 매개 변수가 있다면, 그것은 혼란스러워질 수 있다.템플릿에서 번역을 실행하는 마지막 옵션은 구조 명령을 사용하는 것입니다.개인적으로 가장 좋아하는 방법.
<div *transloco="let t">
<h1>{{ t('title') }}</h1>
<h3>{{ t('welcomeText', {name: 'World'}) }}</h3>
</div>
이 세 가지 방법의 출력은 같다.그러나 구조 명령 방법을 사용하면 성능 장점이 있다.언어 변경과 변경 검사 주기 동안, 전체 템플릿을 업데이트하기 위해 구독 하나만 사용합니다.필요한 경우 TS 파일에서 번역을 받을 수도 있습니다.
transloco="title"
을 열고 app.component.ts
을 구조 함수에 주입합니다.constructor(
private readonly translocoService: TranslocoService
){}
ngOnInit() {
// We can then use the service to fetch translations
const example = this.translocoService.translate('welcomeText', {
name: 'World',
});
}
런타임 언어 변경 지원
Transloco의 가장 큰 특징 중 하나는 실행할 때 번역된 언어를 변경할 수 있다는 것입니다.그리고 되게 쉬워요!
TranslocoService
파일을 열고 새 방법을 만듭니다. switchLanguage() {
if (this.translocoService.getActiveLang() === 'en') {
this.translocoService.setActiveLang('es');
} else {
this.translocoService.setActiveLang('en');
}
}
현재 이 방법을 호출할 때 번역은 app.component.ts
에서 en
으로 변경됩니다.es
을 열고 언어 전환을 위한 버튼을 추가합니다.<div>
<h1>{{ "title" | transloco }}</h1>
<h3>{{ "welcomeText" | transloco: { name: "World" } }}</h3>
</div>
<button (click)="switchLanguage()">Switch Language</button>
현재, 우리가 단추를 눌렀을 때, 우리는 번역 실시간 업데이트를 볼 수 있습니다: 다양한 지원
번역을 설정해서 화면에 보여줄 수 있어서 정말 좋아요. 그런데 다음 장면은요?
app.component.html
{{ numberOfSeconds }} seconds remaining
이 1이면 numberOfSeconds
이어야 하지만 그렇지 않습니다. 1 second remaining
은 항상 나타납니다.이게 문제야!그러나 Transloco는 MessageFormat 지원을 추가한 공식 플러그인을 가지고 있습니다.
MessageFormat Plugin은 번역 중인 복수와 성별을 지원하기 위해 저희 프로그램에 쉽게 추가할 수 있습니다.
그것을 어떻게 추가하는지 봅시다.우선 두 개의 새 패키지를 설치해야 합니다.
1 seconds remaining
그리고 npm i messageformat @ngneat/transloco-messageformat
에서 초기화해야 하기 때문에 TranslocoRootModule
을 열고 다음 내용을 transloco/transloco-root.module.ts
그룹에 추가합니다.@NgModule({
imports: [
TranslocoMessageFormatModule.init()
]
...
})
export class TranslocoRootModule {}
봐라!지원이 추가되었습니다.그런데 우리는 그것을 어떻게 사용합니까?imports
번역을 통해 사용 상황을 살펴보겠습니다.{{ numOfResults }} search results
을 열고 다음 키 변환 쌍을 추가합니다.{
...,
"searchResults": "{numOfResults, plural, =0 {no results found} one {1 search result} other {# search results}}"
}
현재 assets/i18n/en.json
에 다음 환영 문구를 추가합니다.<p>{{ t('searchResults', numOfResults) }}</p>
마지막으로 app.component.html
에 app.component.ts
이라는 새로운 속성을 설정합니다.export class AppComponent {
numOfResults = 0;
...
}
numOfResults
의 값을 변경하여 해당하는 번역 변경 사항을 보십시오!마지막 인사
본고는 Transloco의 도움으로 Angular 응용 프로그램에서 I18N 지원을 실현하는 것이 얼마나 쉬운지 보여줄 수 있기를 바랍니다.Transloco는 더 많은 기능과 플러그인을 제공하여 당신의 i18n 체험을 더욱 아름답게 합니다.
내가 지적하고 싶은 두 가지 측면은 다음과 같다.
플랫 이동 플랫
Transloco는 중첩 키를 지원합니다.
{
"aria": {
"label": "My Translatable A11Y Label"
}
}
이 문제를 해결하기 위해서, 그것은 적당한 키를 찾기 위해 겹겹이 끼워 넣는 것을 반복해야 한다.Transloco에는 다음과 같이 파일을 플랫화할 수 있는 도구가 있습니다.{
"aria.label": "My Translatable A11Y Label"
}
O (1) (대 O 표현) 를 찾을 수 있습니다.문서 링크 구현 방법: https://ngneat.github.io/transloco/docs/tools/optimizeMonorepo 지원
Transloco는 monorepo의 라이브러리나 npm 패키지에서 번역을 추출하여 번역의 위치를 더 많이 제어하여 사용하는 파일에 접근할 수 있는 도구도 있습니다.다음은 Scoped Library Extractor Tool에 대한 문서 링크입니다.
현대 인터넷 컨설팅 회사로 기업의 디지털화 전환을 돕는 데 주력하고 있다.React, Angular, Vue, 웹 구성 요소, GraphQL, Node, Bazel 또는 Polymer 분야의 전문가 구조 지도, 교육 또는 문의는 [thisdotlabs.com](https://www.thisdotlabs.com)을 방문하십시오.
이런 인터넷 매체는 모든 사람을 위해 포용적이고 교육적인 네트워크를 만드는 데 전념한다.이벤트, 팟캐스트, 무료 콘텐츠를 통해 현대 인터넷의 최신 진전을 알 수 있습니다.자세한 내용은 thisdot.co을 참조하십시오.
Reference
이 문제에 관하여(국제화(I18N) 및 Transloco), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thisdotmedia_staff/internationalization-i18n-in-angular-with-transloco-3ebn텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)