[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];
}
}