iOS多語言-跟隨系統(tǒng)/應(yīng)用內(nèi)切換

  1. 創(chuàng)建多語言文件
image.png
  1. 點擊下圖中按鈕,會首先顯示默認的英文語言類型


    image.png
  2. PROJECT -> Localizations -> 點擊"+"按鈕添加需要的語言類型


    image.png

結(jié)果:


image.png
  1. 設(shè)置語言

Localizable.strings(Chinese, Simplified)

"BTNTITLE" = "切換";

"TITLE" = "你好 世界";

"COUNTRY" = "中國: %@";

Localizable.strings(English)

"BTNTITLE" = "Exchange";

"TITLE" = "Hello World";

"COUNTRY" = "China: %@";
  1. 為控件賦值
self.test1Label.text = NSLocalizedString(@"BTNTITLE",  nil);
self.test2Label.text = NSLocalizedString(@"TITLE", nil);
self.test3Label.text = [NSString stringWithFormat:NSLocalizedString(@"COUNTRY", nil), @"999"];

PS: 使用[NSLocalizedString(@"TITLE", nil);]這種方式賦值的,多語言文件的名字必須是Localizable,否則只會顯示它的key

  1. 顯示結(jié)果

手機系統(tǒng)為英文時:

Exchange
Hello World
China: 999

手機系統(tǒng)為中文時:

切換
你好 世界
中國: 999
PS: 這種方式應(yīng)用的語言會跟隨系統(tǒng)語言進行切換,不能應(yīng)用內(nèi)自己切換

多語言文件名字不為Localizable,創(chuàng)建過程一致,只是名字換成其他的,結(jié)果:


image.png

這時候仍然用NSLocalizedString給控件賦值,只會顯示對應(yīng)的key了

BTNTITLE
TITLE
COUNTRY

正確顯示:

self.test1Label.text = NSLocalizedStringFromTable(@"BTNTITLE", @"EEE",  nil);
self.test2Label.text = NSLocalizedStringFromTable(@"TITLE", @"EEE", nil);
self.test3Label.text = [NSString stringWithFormat:NSLocalizedStringFromTable(@"COUNTRY", @"EEE", nil), @"999"];
    //跟隨系統(tǒng)切換 文件名必須是Localizable
    /**
     key: 文字對應(yīng)的key
     comment: 注釋 一般寫nil
     */
    NSLocalizedString(key, comment)
    
    //以下三種均可以手動設(shè)置多語言
    /**
     key: 文字對應(yīng)的key
     tbl: 多語言文件的名字
     comment: 注釋 一般nil
     */
    NSLocalizedStringFromTable(key, tbl, comment)
    
    /**
     key: 文字對應(yīng)的key
     tbl: 多語言文件的名字
     bundle: 多語言文件的bundle
     comment: 注釋 一般nil
     */
    NSLocalizedStringFromTableInBundle(key, tbl, bundle, comment)
    
    /**
     key: 文字對應(yīng)的key
     tbl: 多語言文件的名字
     bundle: 多語言文件的bundle
     val: 默認值
     comment: 注釋 一般nil
    */
    NSLocalizedStringWithDefaultValue(key, tbl, bundle, val, comment)

應(yīng)用內(nèi)手動設(shè)置語言

  1. 每種語言對應(yīng)一個后綴為lproj的文件夾,且文件為EEE.strings


    image.png
image.png
  1. 切換語言: 獲取EEE.strings中value的值,即切換語言 -> 切換不同語言文件夾 -> 切換不同的語言資源文件
NSString *path = [[NSBundle mainBundle] pathForResource:@"zh-Hans" ofType:@"lproj"];
NSString *string = [[NSBundle bundleWithPath:path] localizedStringForKey:@"TITLE" value:nil table:@"EEE"];
NSLog(@"==%@", string); //你好 世界
  1. 切換語言,存儲當前語言key
NSString *currentLanguage = [[NSUserDefaults standardUserDefaults] objectForKey:kAppLanguage];
    if (btn.tag == 0) {
        //中文
        if ([currentLanguage isEqualToString:@"zh-Hans"]) {
            return;
        }
        [[NSUserDefaults standardUserDefaults] setObject:@"zh-Hans" forKey:kAppLanguage];
        [[NSUserDefaults standardUserDefaults] synchronize];
    } else {
        //英文
        if ([currentLanguage isEqualToString:@"en"]) {
            return;
        }
        [[NSUserDefaults standardUserDefaults] setObject:@"en" forKey:kAppLanguage];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }

啟動時,默認語言:

if (![[NSUserDefaults standardUserDefaults] objectForKey:kAppLanguage]) {
        //默認設(shè)為英文
        [[NSUserDefaults standardUserDefaults] setObject:@"en"  forKey:kAppLanguage];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }

ps: 沒有做什么封裝 只是大概思路和用法來理解一下

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容