ANGULARJS
Cách giao tiếp giữa $rootScope, $broadcast và $emit trong AngularJS Tạo ứng dụng SPA trong AngularJS với Routing và StateProvider. Sử dụng Karma và Jasmine để test ứng dụng AngularJS Ứng dụng di động đa nền tảng với Ionic và React Native trong AngularJS Tích hợp thư viện và module bằng Bower và npm vào Angular Xử lý lỗi với $exceptionHandler và $log service trong AngularJS. Sử dụng Custom Directives trong AngularJS Interceptors và Http Service trong Angular Tạo và sử dụng directive trong AngularJS Cách sử dụng service trong AngularJS Cách sử dụng Dependency Injection trong AngularJS Cách sử dụng route trong AngularJS Tạo hiệu ứng với ngAnimate trong AngularJS Tối ưu hóa hiệu suất trong AngularJS Security trong AngularJS và cách sử dụng đơn giản Đa ngôn ngữ Internationalization (i18n) trong AngularJS Two way data binding trong Angularjs Bài 01: Tổng quan về AngularJS Bài 02: Download AngularJS và viết ứng dụng AngularJS đầu tiên Bài 03: Tìm hiểu Controller trong AngularJS Bài 04: Tìm hiểu Scope và rootScope trong AngularJS Bài 05: Tìm hiểu AngularJS Directives - Danh sách Directives Bài 06: Directive ng-model trong AngularJS Bài 07: Directive ng-model-options trong AngularJS Bài 08: Directives ng-bind - ng-bind-html - ng-bind-template trong AngularJS Bài 09: Directive Form trong AngularJS Bài 10: Directive ng-form trong AngularJS Bài 11: Directive input trong AngularJS Bài 12: Directive input checkbox trong AngularJS Bài 13: Directive input date trong AngularJS Bài 14: Directive input datetime-local trong AngularJS Bài 15: Directive input time trong AngularJS Bài 16: Directive input month và input week trong AngularJS Bài 17: Directive ng-show và ng-hide trong AngularJS Bài 18: Directive ng-repeat trong AngularJS Bài 19: Directive ng-init trong AngularJS Bài 20: Directive ng-include trong AngularJS Bài 21: Services trong AngularJS và cách tạo Service mới Bài 22: Directive ng-class trong angularjs Tạo tabs với ng-show & ng-class & ng-click trong angularjs Bài 23: Directive ng-click trong angularjs Bài 24: Directive ng-class-odd và ng-class-even trong Angularjs [Học AngularJS] - Bài 01 - Hello World! [Học AngularJS] - Bài 02 - ng-app [Học AngularJS] - Bài 03 - ng-controller [Học AngularJS] - Bài 04 - $scope [Học AngularJS] - Bài 05 - $rootScope
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Đa ngôn ngữ Internationalization (i18n) trong AngularJS

Đảm bảo tính toàn cầu cho ứng dụng với i18n trong AngularJS - Hướng dẫn sử dụng các thành phần và thực hành cơ bản để tối ưu hoá tính năng i18n.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Trong bài viết này, chúng ta sẽ tìm hiểu về i18n trong AngularJS và hướng dẫn sử dụng các thành phần và thực hành cơ bản để đảm bảo tính toàn cầu cho ứng dụng. Nội dung bài viết sẽ bao gồm các khái niệm cơ bản của i18n, các thành phần hỗ trợ i18n trong AngularJS, cũng như các thực hành cơ bản để tối ưu hoá tính năng i18n trong AngularJS.

Internationalization (i18n) là gì?

angular i18n png

Internationalization (i18n) là một khái niệm quan trọng trong lĩnh vực phát triển ứng dụng web. Nó đề cập đến quá trình thiết kế và phát triển ứng dụng để có thể hoạt động trên nhiều ngôn ngữ và khu vực khác nhau, giúp đáp ứng được nhu cầu sử dụng của người dùng trên toàn thế giới.

Tính năng i18n cho phép ứng dụng hiển thị các thông điệp, chú thích, các giá trị số hoặc ngày tháng dưới các định dạng phù hợp với ngôn ngữ và vùng miền của người dùng. Chẳng hạn, trong một ứng dụng có tính năng i18n tốt, khi người dùng chọn ngôn ngữ tiếng Tây Ban Nha, tất cả các chú thích, thông điệp và các giá trị khác trong ứng dụng đều hiển thị bằng tiếng Tây Ban Nha thay vì tiếng Anh hoặc ngôn ngữ khác.

Bài viết này được đăng tại [free tuts .net]

Tại sao i18n quan trọng trong các ứng dụng AngularJS?

Internationalization (i18n) là một yếu tố quan trọng trong việc phát triển các ứng dụng web AngularJS. Điều này là do các ứng dụng web AngularJS thường được sử dụng trên toàn cầu và phải hỗ trợ nhiều ngôn ngữ và khu vực khác nhau.

Khi một ứng dụng AngularJS được phát triển với tính năng i18n, người dùng trên toàn cầu sẽ có trải nghiệm tốt hơn khi sử dụng ứng dụng này. Nó cho phép người dùng sử dụng ứng dụng trên ngôn ngữ mà họ hiểu, điều này cải thiện trải nghiệm người dùng và tăng tính toàn cầu của ứng dụng.

Bên cạnh đó, việc hỗ trợ i18n trong ứng dụng AngularJS cũng giúp cho các nhà phát triển có thể tạo ra các ứng dụng linh hoạt và dễ dàng mở rộng. Việc chuyển đổi sang các ngôn ngữ và khu vực khác nhau chỉ cần sử dụng các tệp dịch thuật thay vì phải thay đổi mã nguồn của ứng dụng. Điều này giúp tiết kiệm thời gian và chi phí cho các nhà phát triển và giúp ứng dụng dễ dàng được phát triển và duy trì trên toàn cầu.

Vì vậy, tính năng i18n là một yếu tố không thể thiếu trong việc phát triển các ứng dụng AngularJS và đóng vai trò quan trọng trong việc tăng tính toàn cầu và trải nghiệm người dùng tốt hơn.

Các thành phần hỗ trợ i18n trong AngularJS

Ngôn ngữ và khu vực (Locale)

Ngôn ngữ và khu vực (Locale) là một trong những khái niệm cơ bản của i18n trong AngularJS. Ngôn ngữ (Language) chỉ định ngôn ngữ được sử dụng trong ứng dụng, ví dụ như tiếng Anh, tiếng Việt, tiếng Tây Ban Nha... Khu vực (Locale) mô tả quốc gia hoặc vùng địa lý cụ thể trong ngôn ngữ đó, ví dụ như "en-US" cho tiếng Anh ở Hoa Kỳ hoặc "vi-VN" cho tiếng Việt ở Việt Nam.

Khi xây dựng ứng dụng đa ngôn ngữ, việc sử dụng chính xác ngôn ngữ và khu vực là rất quan trọng để đảm bảo chuỗi địa phương (localize string) được hiển thị đúng đắn cho người dùng.

anh8 jpg

Hình ảnh i18n và l10n

$translate service

Đây là một service được tích hợp sẵn trong AngularJS, giúp dịch các chuỗi địa phương sang nhiều ngôn ngữ khác nhau. $translate service cũng hỗ trợ việc xác định ngôn ngữ hiện tại của người dùng và cho phép người dùng chuyển đổi sang các ngôn ngữ khác.

Ví dụ, để đặt ngôn ngữ và khu vực cho ứng dụng sử dụng $translate service trong AngularJS, ta có thể làm như sau:

// Thêm module 'pascalprecht.translate' vào ứng dụng AngularJS
var app = angular.module('myApp', ['pascalprecht.translate']);

// Thiết lập các bản dịch trong các ngôn ngữ khác nhau
app.config(function($translateProvider) {
  $translateProvider.translations('en', {
    TITLE: 'Welcome to my app!',
    MESSAGE: 'Hello, how are you?'
  });
  
  $translateProvider.translations('vi', {
    TITLE: 'Chào mừng đến với ứng dụng của tôi!',
    MESSAGE: 'Xin chào, bạn có khỏe không?'
  });

  // Thiết lập ngôn ngữ mặc định là tiếng Anh
  $translateProvider.preferredLanguage('en');
});

Trong đoạn mã trên, ta đã khai báo hai ngôn ngữ là tiếng Anh ('en') và tiếng Việt ('vi'), và thiết lập các chuỗi địa phương tương ứng cho mỗi ngôn ngữ. Tiếp theo, ta thiết lập ngôn ngữ mặc định là tiếng Anh bằng cách sử dụng phương thức preferredLanguage().

Khi ứng dụng được chạy, ta có thể sử dụng $translate service để chuyển đổi các chuỗi địa phương sang ngôn ngữ và khu vực tương ứng:

app.controller('MyController', function($scope, $translate) {
  $scope.title = $translate.instant('TITLE');
  $scope.message = $translate.instant('MESSAGE');
});

Trong ví dụ trên, ta đã sử dụng $translate.instant() để chuyển đổi các chuỗi địa phương sang ngôn ngữ hiện đang được sử dụng trong ứng dụng. Tuy nhiên, $translate.instant() chỉ có thể sử dụng trong các thành phần đồng bộ hóa, và không thể sử dụng trong các thành phần không đồng bộ hóa, chẳng hạn như các yêu cầu AJAX hoặc các bản ghi cơ sở dữ liệu.

Chuỗi địa phương (Localize string)

Chuỗi địa phương (localize string) là các chuỗi được sử dụng trong ứng dụng để hiển thị các nội dung tương ứng với ngôn ngữ và khu vực đang được sử dụng. Để hỗ trợ i18n trong AngularJS, các chuỗi này được đặt trong các tệp tin ngôn ngữ tương ứng với tên của ngôn ngữ và khu vực đó.

ng-i18next directive

Để hiển thị các chuỗi địa phương trong HTML, ta có thể sử dụng ng-i18next directive. Directive này cho phép ta đặt các chuỗi địa phương trực tiếp trong các thẻ HTML mà không cần sử dụng các phương thức của $translate service.

Để sử dụng ng-i18next directive, ta cần thêm thư viện i18next vào ứng dụng. Sau đó, ta có thể đặt các chuỗi địa phương trong các thẻ HTML bằng cách sử dụng thuộc tính data-i18next với giá trị là key của chuỗi địa phương tương ứng.

Ví dụ, ta có thể đặt chuỗi địa phương "Hello world" trong HTML bằng cách sử dụng ng-i18next directive như sau:

<div ng-i18next="HELLO_WORLD"></div>

Ở đây, HELLO_WORLD là key của chuỗi địa phương tương ứng trong tệp ngôn ngữ.

Khi ứng dụng chạy, ng-i18next directive sẽ tự động tìm kiếm giá trị của key HELLO_WORLD trong các tệp ngôn ngữ tương ứng và hiển thị nội dung tương ứng trong thẻ HTML.

Ngoài ra, ta cũng có thể sử dụng các thuộc tính khác của ng-i18next directive để tùy chỉnh hiển thị các chuỗi địa phương, ví dụ như thuộc tính data-i18next-options để đặt các thông số tùy chỉnh cho chuỗi địa phương.

Biên dịch ngôn ngữ (Language translation)

Biên dịch ngôn ngữ (Language translation) là quá trình chuyển đổi các chuỗi địa phương từ ngôn ngữ gốc sang các ngôn ngữ khác nhau, để cho phép ứng dụng có thể hỗ trợ nhiều ngôn ngữ và khu vực khác nhau. Quá trình này thường được thực hiện bởi các chuyên gia dịch hoặc các công cụ tự động dịch ngữ.

angular-gettext library

Để biên dịch các chuỗi địa phương sang các ngôn ngữ khác nhau, ta có thể sử dụng thư viện angular-gettext. Thư viện này cung cấp các công cụ để dịch các chuỗi địa phương sang các ngôn ngữ khác nhau và quản lý các tệp ngôn ngữ.

Để sử dụng angular-gettext, ta cần thêm thư viện này vào ứng dụng và cấu hình các tệp ngôn ngữ tương ứng. Sau đó, ta có thể sử dụng các công cụ của angular-gettext để dịch các chuỗi địa phương.

Ví dụ, ta có một chuỗi địa phương "Hello world" và ta muốn dịch nó sang ngôn ngữ Tây Ban Nha. Đầu tiên, ta cần thêm chuỗi địa phương này vào tệp ngôn ngữ tiếng Anh và tiếng Tây Ban Nha:

msgid "HELLO_WORLD"
msgstr "Hello world"
msgid "HELLO_WORLD"
msgstr "Hola mundo"

Ở đây, msgid là key của chuỗi địa phương, và msgstr là nội dung của chuỗi địa phương sau khi được dịch.

Sau đó, ta có thể sử dụng công cụ gettextCatalog của angular-gettext để dịch các chuỗi địa phương trong ứng dụng. Ví dụ, ta có thể dịch chuỗi địa phương "Hello world" sang ngôn ngữ Tây Ban Nha như sau:

var translation = gettextCatalog.getString("HELLO_WORLD");

Khi ứng dụng chạy, gettextCatalog sẽ tự động tìm kiếm tệp ngôn ngữ tương ứng và trả về nội dung tương ứng của chuỗi địa phương "HELLO_WORLD" đã được dịch sang ngôn ngữ Tây Ban Nha.

Ngôn ngữ mặc định (Default language)

Ngôn ngữ mặc định (Default language) là ngôn ngữ được sử dụng trong trường hợp người dùng không chọn ngôn ngữ nào cho ứng dụng. Khi ứng dụng được tải lần đầu tiên, nó sẽ tự động sử dụng ngôn ngữ mặc định nếu không có thông tin về ngôn ngữ được cung cấp từ phía người dùng hoặc hệ thống.

i18n attribute

AngularJS cũng hỗ trợ thuộc tính "i18n" để đánh dấu các thành phần HTML và AngularJS với ngôn ngữ và khu vực cụ thể. Việc sử dụng thuộc tính này cho phép các công cụ hỗ trợ i18n tự động tìm và xử lý các chuỗi địa phương trong các thành phần.

Ví dụ, ta có thể đánh dấu một đoạn văn bản bằng thuộc tính i18n như sau:

<p i18n="@@myLocalizedText">This text will be localized.</p>

Trong đó "@@myLocalizedText" là khóa để tìm bản dịch cho đoạn văn bản trên.

Với việc sử dụng cả ngôn ngữ mặc định và thuộc tính i18n, ta có thể cung cấp một trải nghiệm người dùng tốt hơn và hỗ trợ ngôn ngữ đa khu vực cho ứng dụng.

Ví dụ hoàn chỉnh:

angular.module('myApp', ['pascalprecht.translate'])
.config(function ($translateProvider) {
  // Thiết lập ngôn ngữ mặc định
  $translateProvider.fallbackLanguage('en');

  // Thiết lập bản dịch cho các ngôn ngữ khác
  $translateProvider.translations('en', {
    'GREETING': 'Hello',
    'MESSAGE': 'Welcome to my app'
  });
  $translateProvider.translations('fr', {
    'GREETING': 'Bonjour',
    'MESSAGE': 'Bienvenue sur mon application'
  });
})
.controller('MyController', function ($scope, $translate) {
  // Sử dụng $translate để chuyển đổi các chuỗi địa phương
  $scope.greeting = $translate.instant('GREETING');
  $scope.message = $translate.instant('MESSAGE');
});

Và đoạn mã HTML:

<div ng-app="myApp" ng-controller="MyController">
  <h1>{{greeting}}</h1>
  <p>{{message}}</p>

  <!-- Sử dụng thuộc tính i18n để đánh dấu chuỗi địa phương -->
  <p i18n="@@myLocalizedText">This text will be localized.</p>
</div>

Các thực hành trong i18n của AngularJS

Thiết lập ngôn ngữ mặc định

Trong AngularJS, ta có thể thiết lập ngôn ngữ mặc định bằng cách sử dụng thuộc tính $translateProvider.preferredLanguage(). Giá trị của thuộc tính này có thể là mã ngôn ngữ ISO 639-1 hoặc ISO 639-2. Nếu không có mã ngôn ngữ nào được thiết lập, thì ngôn ngữ mặc định sẽ là "en" (tiếng Anh).

Ví dụ:

angular.module('myApp', ['pascalprecht.translate'])
.config(function($translateProvider) {
  $translateProvider.preferredLanguage('vi');
});

Trong ví dụ trên, ngôn ngữ mặc định được thiết lập là tiếng Việt.

Thiết lập nhiều ngôn ngữ và khu vực khác nhau

Để hỗ trợ nhiều ngôn ngữ và khu vực khác nhau trong ứng dụng AngularJS, ta có thể sử dụng thuộc tính $translateProvider.translations(). Thuộc tính này cho phép ta thiết lập các bộ từ điển tương ứng với các ngôn ngữ và khu vực khác nhau.

Ví dụ:

angular.module('myApp', ['pascalprecht.translate'])
.config(function($translateProvider) {
  $translateProvider.translations('en', {
    'GREETINGS': 'Hello, world!',
    'FAREWELL': 'Goodbye, world!'
  });
  $translateProvider.translations('vi', {
    'GREETINGS': 'Xin chào, thế giới!',
    'FAREWELL': 'Tạm biệt, thế giới!'
  });
});

Trong ví dụ trên, ta đã thiết lập bộ từ điển cho 2 ngôn ngữ: tiếng Anh và tiếng Việt. Mỗi bộ từ điển chứa các chuỗi địa phương tương ứng với ngôn ngữ đó.

Sử dụng filter i18n

Trong AngularJS, ta có thể sử dụng filter i18n để hiển thị các chuỗi địa phương trong các template.

Ví dụ:

<p>{{ 'GREETINGS' | translate }}</p>

Trong ví dụ trên, filter i18n được sử dụng để hiển thị chuỗi địa phương có tên là "GREETINGS".

Sử dụng biểu tượng cảm xúc (Emoji) trong i18n

Để sử dụng biểu tượng cảm xúc trong chuỗi địa phương, ta có thể sử dụng mã Unicode của biểu tượng đó.

Ví dụ:

angular.module('myApp', ['pascalprecht.translate'])
.config(function($translateProvider) {
  $translateProvider.translations('en', {
    'HAPPY': 'I am feeling ???? today!'
  });
  $translateProvider.translations('

Kết bài viết

Trong bài viết này, chúng ta đã tìm hiểu về khái niệm i18n (Internationalization) và tại sao nó quan trọng trong các ứng dụng AngularJS. Chúng ta đã cùng điểm qua các khái niệm cơ bản trong i18n như ngôn ngữ và khu vực (Locale), chuỗi địa phương (Localize string), biên dịch ngôn ngữ (Language translation) và ngôn ngữ mặc định (Default language).

Chúng ta đã tìm hiểu về các thành phần hỗ trợ i18n trong AngularJS bao gồm $translate service, ng-i18next directive, angular-gettext library và i18n attribute. Đồng thời, chúng ta cũng đã thực hiện các ví dụ minh họa cụ thể để hiểu rõ hơn về các thành phần này.

Cuối cùng, chúng ta cũng đã tìm hiểu về một số thủ thuật để sử dụng i18n hiệu quả hơn trong AngularJS, bao gồm thiết lập ngôn ngữ mặc định, thiết lập nhiều ngôn ngữ và khu vực khác nhau, sử dụng filter i18n và sử dụng biểu tượng cảm xúc (Emoji) trong i18n.

Hy vọng rằng bài viết này đã cung cấp cho bạn cái nhìn tổng quan về i18n và giúp bạn hiểu rõ hơn về cách sử dụng i18n trong các ứng dụng AngularJS.

Cùng chuyên mục:

Tích hợp thư viện và module bằng Bower và npm vào Angular

Tích hợp thư viện và module bằng Bower và npm vào Angular

Ứng dụng di động đa nền tảng với Ionic và React Native trong AngularJS

Ứng dụng di động đa nền tảng với Ionic và React Native trong AngularJS

Sử dụng Karma và Jasmine để test ứng dụng AngularJS

Sử dụng Karma và Jasmine để test ứng dụng AngularJS

Tạo ứng dụng SPA trong AngularJS với Routing và StateProvider.

Tạo ứng dụng SPA trong AngularJS với Routing và StateProvider.

Cách giao tiếp giữa $rootScope, $broadcast và $emit trong AngularJS

Cách giao tiếp giữa $rootScope, $broadcast và $emit trong AngularJS

Two way data binding trong Angularjs

Two way data binding trong Angularjs

Security trong AngularJS và cách sử dụng đơn giản

Security trong AngularJS và cách sử dụng đơn giản

Tối ưu hóa hiệu suất trong AngularJS

Tối ưu hóa hiệu suất trong AngularJS

Xử lý lỗi với $exceptionHandler và $log service trong AngularJS.

Xử lý lỗi với $exceptionHandler và $log service trong AngularJS.

Tạo hiệu ứng với ngAnimate trong AngularJS

Tạo hiệu ứng với ngAnimate trong AngularJS

Cách sử dụng route trong AngularJS

Cách sử dụng route trong AngularJS

Cách sử dụng Dependency Injection trong AngularJS

Cách sử dụng Dependency Injection trong AngularJS

Cách sử dụng service trong AngularJS

Cách sử dụng service trong AngularJS

Tạo và sử dụng directive trong AngularJS

Tạo và sử dụng directive trong AngularJS

Interceptors và Http Service trong Angular

Interceptors và Http Service trong Angular

Sử dụng Custom Directives trong AngularJS

Sử dụng Custom Directives trong AngularJS

Thiết lập project với Angular 6

Thiết lập project với Angular 6

Ở bài trước, chúng ta đã tìm hiểu cách cài đặt môi trường cũng như…

Cài đặt môi trường cho Angular 6

Cài đặt môi trường cho Angular 6

Ở bài trước, chúng ta đã tìm hiểu vì sao chọn Angular, Angular 6 là…

Giới thiệu Angular 6x

Giới thiệu Angular 6x

Xin giới thiệu với các bạn tổng quan tất cả các bài viết học về…

Ứng dụng single page Angular 4

Ứng dụng single page Angular 4

Trong bài học này, chúng ta sẽ thực hành tạo một ứng dụng single page…

Top