如题,app支持中文,英文,日文三种语言。希望在其他语言的情况下都使用英文。如何实现啊,网上看到的自己实现Localized,有没有苹果原生的方法来指定啊
巴扎黑2017-04-18 09:53:57
將專案plist中的開發地區改為en
即可
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
🎜更多介紹🎜 🎜蘋果的多語言原理
名詞介紹
< code>Base 多語言預設文件,被其它多語言(Chinese, English, ...) 繼承和覆蓋,不會被iOS直接使用,只有當對應的多語言文件中沒有找到相應條目時才會到Localizable.strings
多語言文件,用於本地化App內的字串Localizable.strings
多语言文件,用于本地化App内的字符串InfoPlist.strings
多语言文件,用于本地化App名称Base
多语言默认文件,被其它多语言 (Chinese, English, ...) 继承和覆盖,不会被iOS直接使用,只有当对应的多语言文件中没有找到相应条目时才会到Base
InfoPlist.strings
多語言文件,用於本地化App名稱Base
中查找,作用跟函數參數的預設值差不多。中開發地區所對應的語言
查找原理App啟動時,iOS會遍歷用戶設定的語言優先級去和App
的多語言文件匹配
如果匹配,會使用對應的語言如果不匹配,會使用plist日文
zh-Hans
日语ja
英语en
簡體中文zh-Hans
ja
英文
怪我咯2017-04-18 09:53:57
你好,用我提供的 DPLocalizedString
方法代替系统的 NSLocalizedString
即可。
#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
+ (NSString *)DPLocalizedString:(NSString *)translation_key {
NSString * LocalizableStr = NSLocalizedString(translation_key, nil);
if (!([CURR_LANG rangeOfString:@"ja"].length >0) &&
!([CURR_LANG rangeOfString:@"zh-Hant"].length >0) &&
!([CURR_LANG rangeOfString:@"zh-Hans"].length >0)) {
NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle * languageBundle = [NSBundle bundleWithPath:path];
LocalizableStr = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
}
return LocalizableStr;
}
黄舟2017-04-18 09:53:57
題主 你好,我為你提供一個想法,具體的實現 可能需要你自己根據需求來做。
取得機器預設語言
NSArray *languages = [NSLocale preferredLanguages];
//获得首选语言版本
NSString *language = [languages objectAtIndex:0];
2.判斷該語言
if ([language hasPrefix:@"zh-Hans"]) { //简体中文
//do...
} else if ([language hasPrefix:@"zh-TW"] || [language hasPrefix:@"zh-HK"] || [language hasPrefix:@"zh-Hant"]) {//繁体中文 由于繁体又有台湾繁体和香港繁体之分 进行判断然后为繁体
} else if ([language hasPrefix:@"en"]) {//英文
}else if ([language hasPrefix:@"ja"]){//日文
}else{
//设置语言为英文...
}
PHP中文网2017-04-18 09:53:57
iOS的國際化來說一直都覺得處理起來非常麻煩,也一直想找找一個比較完美的解決方案來解決國際化問題。之前分享過一篇過於國際化的文章,現在再深入分析。
因為文章之前寫的。原文章已經被更新啦。會在最後更新出來。
一.存在問題
1.官方沒有給出一套關於國際化的完美的處理方式。
2.沒有適配這種語言的時候不能指定顯示其他語言。它會預設選擇上一次的語言。
3.大版本更新後,資料更新不相容之前的版本。
4.新增特定的語言資源檔案和程式碼回傳的語言沒有對應起來。
二.國際化框架思想
針對上面的這些問題,我是啟用了一個plist來處理國際化問題。
plist裡的key和value做一個對應,如果取得目前的語言和plist對應起來就顯示目前的語言,不然就顯示指定的語言。
三.實作方式
在特定的語言基礎上加上對應的語言包。用NSLocalizedString來取得對應的語言。
取得當前語言
NSArray * allLanguages = [defaults objectForKey:@"AppleLanguages"];
NSString * CURR_LANG = [allLanguages objectAtIndex:0];
判斷當前語言是否為適配的語言
if (![CURR_LANG hasPrefix:@"en"] && ![CURR_LANG hasPrefix:@"zh"])
{
NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle * languageBundle = [NSBundle bundleWithPath:path];
s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
}
s就是當前非中文或英文下的語言,目前可以把英文去掉,因為判斷不判斷英文都是要處理成英文的。顯示如下
if (![CURR_LANG hasPrefix:@"zh"])
{
NSString * path = [[NSBundle mainBundle] pathForResource:@"en" ofType:@"lproj"];
NSBundle * languageBundle = [NSBundle bundleWithPath:path];
s = [languageBundle localizedStringForKey:translation_key value:@"" table:nil];
}
我的筆記裡有些關於總結國際化內容。