[iOS] Chuyển đổi ngôn ngữ của Ứng dụng

Trong khi chờ bài giới thiệu về tool tự động tạo file đa ngôn ngữ cho cả Android và iOS của anh Hieu.TT, (*) tôi đành chắp bút viết bài giới thiệu về việc chuyển đổi ngôn ngữ của Ứng dụng iOS mà không cần phải đổi ngôn ngữ của iPhone.

(*) UPDATE: Bài viết đã được lên sóng GIỚI THIỆU TOOL TỰ ĐỘNG TẠO FILE ĐA NGÔN NGỮ CHO IOS VÀ ANDROID APP


1. Thêm Settings bundle vào project:

Setting Bundle là gì? TL;DR: Setting là một màn hình cài đặt các tùy chọn dành cho từng ứng dụng iOS.

Mở file Root.plist và thêm vào các ngôn ngữ tùy chọn cho dự án.

 

< ?xml version=”1.0″ encoding=”UTF-8″?>
< !DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd”>
<plist version=”1.0″>
<dict>
<key>PreferenceSpecifiers</key>
<array>
<dict>
<key>Key</key>
<string>app_language</string>
<key>Title</key>
<string>App Language</string>
<key>Type</key>
<string>PSMultiValueSpecifier</string>
<key>DefaultValue</key>
<string>auto</string>
<key>Titles</key>
<array>
<string>Auto</string>
<string>English</string>
<string>Italian</string>
<string>French</string>
<string>Spanish</string>
<string>German</string>
</array>
<key>Values</key>
<array>
<string>auto</string>
<string>en</string>
<string>it</string>
<string>fr</string>
<string>es</string>
<string>de</string>
</array>
</dict>
</array>
<key>StringsTable</key>
<string>Root</string>
</dict>
</plist>

Sau khi chạy ứng dụng, truy cập vào Setting, bạn sẽ nhìn thấy các tùy chọn về ngôn ngữ
  

 

2. Cách sử dụng

Bạn cần sử dụng từ khóa app_language để lấy được ngôn ngữ đang được thiết lập

[[NSUserDefaults standardUserDefaults] stringForKey:@”app_language”];

3.  Cách dùng được các file ngôn ngữ khác ngoài ngôn ngữ mặc định

Mở main.m và thêm vào:

void configureAppCustomLanguage()
{
NSString *forcedLanguage = [[NSUserDefaults standardUserDefaults] stringForKey:@”app_language”];
NSString *key = @”AppleLanguages”;

if ( forcedLanguage && forcedLanguage.length && ![forcedLanguage isEqualToString:@”auto”] )
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSLocale preferredLanguages] forKey:@”PreferredLanguages”];
[defaults setObject:[NSArray arrayWithObject:forcedLanguage] forKey:key];
[defaults synchronize];
}
else
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
forcedLanguage = [defaults valueForKey:key];
if ( forcedLanguage )
{
[defaults removeObjectForKey:key];
}

[defaults synchronize];
}
}

Bằng các sử dụng hàm này, bạn có thể sử dụng các file ngôn ngữ của riêng mình, thay vì phó mặc cho iOS.

Tiếp theo trong hàm int main(), sử dụng đoạn code sau:

int main(int argc, char * argv[])
{
@autoreleasepool {

// change language on start!
configureAppCustomLanguage();

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

Tất nhiên là bạn đã phải chuẩn bị các file ngôn ngữ của dự án như sau:

// Localizable.strings (Italian)
“sample-string-key” = “ITA”;

// Localizable.strings (English)
“sample-string-key” = “ENG”;

// etc…

 

Bây giờ ứng dụng của bạn đã có thể chuyển đổi việc hiển thị đa ngôn ngữ mà không cần phải thay đổi ngôn ngữ của iPhone.

Bạn có thể kiểm tra bằng cách sau:

NSLog(@”%@”, NSLocalizedString(@”sample-string-key”, nil));


Mẹo tối ưu hoá webpack webpack