欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

3分鐘實(shí)現(xiàn)iOS語言本地化/國際化(圖文教程)

 更新時(shí)間:2020年02月23日 11:52:08   作者:CH520  
這篇文章主要介紹了3分鐘實(shí)現(xiàn)iOS語言本地化/國際化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

語言本地化,又叫做語言國際化。是指根據(jù)用戶操作系統(tǒng)的語言設(shè)置,自動將應(yīng)用程序的語言設(shè)置為和用戶操作系統(tǒng)語言一致的語言。往往一些應(yīng)用程序需要提供給多個(gè)國家的人群使用,或者一個(gè)國家有多種語言,這就要求應(yīng)用程序所展示的文字、圖片等信息,能夠讓講不同語言的用戶讀懂、看懂。進(jìn)而提出為同一個(gè)應(yīng)用程序適配多種語言,也即是國際化。語言國際化之所以又叫做語言本地化,這是站在每個(gè)用戶的角度而言的,是指能夠讓用戶本地、本土人群能夠看懂的語言信息,顧名思義,語言本地化。其實(shí)語言本地化 == 語言國際化!

本文將分如下7個(gè)主要章節(jié)一步一步講解如何完全本地化一個(gè)App。

  • 配置需要國際化的語言(國際化的準(zhǔn)備工作)
  • App名稱本地化
  • 代碼中字符串本地化
  • 多人開發(fā)情況下的字符串本地化
  • 圖片本地化(兩種方式兩種方式)
  • 查看/切換本地語言
  • storyboard/xib本地化

配置需要國際化的語言

配置需要國際化的語言,這也是國際化之前的準(zhǔn)備工作,無論我們是國際化App名稱、代碼中的字符串、圖片、還是storyboard和xib,都需要進(jìn)行這一步的準(zhǔn)備工作(一個(gè)項(xiàng)目中需要且僅需要配置一次)。

選中project->Info->Localizations,然后點(diǎn)擊"+",添加需要國際化/本地化的語言,如下圖(默認(rèn)需要勾選Use Base Internationalization):

此處以添加法語為例,如下圖:

彈出如下對話框,直接點(diǎn)擊finish,如下圖:

同理,添加簡體中文、繁體中文、韓語,最終結(jié)果如下圖:

備注: “zh-Hans”和“zh-Hant”是簡體中文和繁體中文的縮寫。這是標(biāo)準(zhǔn)的縮寫。H可大寫也可小寫。"en"是英語的縮寫。ko是韓語的縮寫,fr是法語的縮寫。其他語言請百度各國語言縮寫即可查詢。

(一)應(yīng)用名稱本地化/國際化

應(yīng)用名稱本地化,是指同一個(gè)App的名稱,在不同的語言環(huán)境下(也就是手機(jī)設(shè)備的語言設(shè)置)顯示不同的名稱。比如,微信在簡體中文環(huán)境下App名稱顯示為“ 微信 ”,在英語環(huán)境下顯示為“ weChat ”。下面就開始進(jìn)行應(yīng)用名稱本地化。

選中Info.plist,按下鍵盤上的command + N,選擇 Strings File (iOS->Resource->Strings File)

文件名字命名為 InfoPlist ,且 必須是這個(gè)名字 (因每個(gè)人電腦設(shè)置差異,此處本人電腦沒有顯示strings后綴名):

點(diǎn)擊create后,Xcode左側(cè)導(dǎo)航列表就會出現(xiàn)名為InfoPlist.strings的文件,如下圖:

選中InfoPlist.strings,在Xcode的File inspection(Xcode右側(cè)文件檢查器)中點(diǎn)擊Localize,目的是選擇我們需要本地化的語言,如下圖:

注意: 在點(diǎn)擊Localize之前,一定要保證我們已經(jīng)添加了需要本地化的語言,也就是上面 配置需要國際化的語言 那一步(步驟:project->Info->Localizations,然后點(diǎn)擊"+",添加需要國際化/本地化的語言)。

點(diǎn)擊Localize后,會彈出一個(gè)對話框,展開對話框列表,發(fā)現(xiàn)下拉列表所展示的語言正是我們在上面配置的需要國際化的語言,選擇我們需要本地化的語言,然后點(diǎn)擊對話框的Localize按鈕,如下圖:

注意: 如果我們沒有在 PROJECT 中配置需要國際化的語言(project->Info->Localizations,然后點(diǎn)擊"+"),上圖下拉列表中將只會出現(xiàn)"Base"和"English"選項(xiàng),English語言是系統(tǒng)默認(rèn)的語言,其他需要國際化的語言(例如中文簡體、法語)必須通過上面的 配置本地化語言 那一步手動添加。

然后我們發(fā)現(xiàn)Xcode右側(cè)的File inspection變成了下圖的樣式:

接下來,勾選French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下圖:

此時(shí),Xcode左側(cè)的InfoPlist.stirings左側(cè)多了一個(gè)箭頭,點(diǎn)擊箭頭可以展開,如下圖所示:

從上圖可以看出,InfoPlist.strings文件下包含了English、French、Chinese(Simplified)、Chinese(Traditional)、Korean這五種語言的文件。

原理:程序啟動時(shí),會根據(jù)操作系統(tǒng)設(shè)置的語言,自動加載InfoPlist.strings文件下對應(yīng)的語言文件,然后顯示應(yīng)用程序的名字。

接下來,我們分別用不同的語言給InfoPlist.strings下的文件設(shè)置對應(yīng)的名字。

(1)在InfoPlist.strings(english)中加入如下代碼:

// Localizable App Name是App在英語環(huán)境環(huán)境下顯示的名稱
CFBundleDisplayName = "Localizable App Name";

備注: CFBundleDisplayName可以使用雙引號,也可以不使用雙引號!

(2)在InfoPlist.strings(French)中加入如下代碼:

CFBundleDisplayName = "Le nom de la localisation de l'App";

(3)在InfoPlist.strings(Chinese(Simplified))中加入如下代碼:

CFBundleDisplayName = "國際化App名稱";

(4)在InfoPlist.strings(Chinese(Traditional))中加入如下代碼:

CFBundleDisplayName = "國際化App名稱";

(5)在InfoPlist.strings(Korean)中加入如下代碼:

CFBundleDisplayName = "현지화 앱 명칭";

修改模擬器語言環(huán)境為English。App名稱如下圖:

修改模擬器語言環(huán)境為Chinese(Simplified)。App名稱如下圖:

修改模擬器語言環(huán)境為Chinese(Traditional)。App名稱如下圖:

修改模擬器語言環(huán)境為Franch。App名稱如下圖:

修改模擬器語言環(huán)境為Korean。App名稱如下圖:

備注: 過去本地化App名稱,需要在Info.plist文件中增加一個(gè)名為“Application has localized display name”的BOOL類型的Key,并且需要將其值設(shè)置為YES(如下圖)。目的是讓App支持本地化App名稱。 但現(xiàn)在可以忽略這一步

至此,本地化App名稱已經(jīng)演示完畢,其步驟就是:

在Project的設(shè)置中通過點(diǎn)擊"+"添加需要本地化的語言。 然后在Xcode右側(cè)的File inspection中點(diǎn)擊Localize,選中需要本地化App名稱的語言。 最后在每個(gè)語言對應(yīng)的文件中以key = value(CFBundleDisplayName = "App名稱";);的形式設(shè)置App的名稱。

(二)代碼中字符串的本地化

所謂字符串本地化,就是指App內(nèi)的字符串在不同的語言環(huán)境下顯示不同的內(nèi)容。比如,"主頁"這個(gè)字符串在中文語言環(huán)境下顯示“主頁”,在英語環(huán)境下顯示“home”。下面就開始進(jìn)行字符串本地化。

其實(shí)字符本地化和App名稱本地化過程如出一轍,只是創(chuàng)建的文件名成不一樣(連同后綴一起,文件名必須是Localizable.strings),其他步驟完全相同。為了能夠讓大家徹底了解,此處還是會把步驟一一貼出來。

和應(yīng)用名稱本地化一樣,首先需要command + N,選擇iOS -> Resource -> Strings File

文件名必須命名為 Localizable

備注 :因本人電腦取消隱藏文件后綴名,所以會自動補(bǔ)全.strings后綴名。

文件創(chuàng)建成功,查看Xcode左側(cè)導(dǎo)航列表,發(fā)現(xiàn)多了一個(gè)名為Localizable.strings的文件,如下圖:

選中Localizable.strings文件,在Xcode的File inspection中點(diǎn)擊Localize,目的是選擇我們需要本地化的語言(和本地化App名稱同理),如下圖:

依次選擇English->Localize,如下圖:

然后我們發(fā)現(xiàn)Xcode右側(cè)的File inspection變成了下圖的樣式:

然后勾選French、Chinese(zh-Hans)、Chinese(zh-Hant)、Korean,如下圖:

此時(shí),Xcode左側(cè)的Localizable.stirings左側(cè)多了一個(gè)箭頭,展開后,如下圖所示:

然后我們只需要在Localizable.strings下對應(yīng)的文件中,分別以Key-Value的形式,為代碼中每一個(gè)需要本地化的字符串賦值,如下圖:

本地化代碼中的字符串,如下圖:

我們只需要使用Foundation框架自帶的NSLocalizedString(key, comment)這個(gè)宏根據(jù)Key獲取對應(yīng)的字符串,然后賦值給代碼中的字符串。

// NSLocalizedString(key, comment) 本質(zhì)
// NSlocalizeString 第一個(gè)參數(shù)是內(nèi)容,根據(jù)第一個(gè)參數(shù)去對應(yīng)語言的文件中取對應(yīng)的字符串,第二個(gè)參數(shù)將會轉(zhuǎn)化為字符串文件里的注釋,可以傳nil,也可以傳空字符串@""。
#define NSLocalizedString(key, comment) [[NSBundle mainBundle] localizedStringForKey:(key) value:@"" table:nil]

不同語言環(huán)境下

運(yùn)行效果,如下圖: 英語環(huán)境下:

法語環(huán)境下:

簡體中文環(huán)境下:

繁體中文環(huán)境下:

韓語環(huán)境下:

如此一來,我們就實(shí)現(xiàn)了代碼中字符串的本地化。

技巧

其實(shí),我們不需要給Localizable.strings(English)文件添加Key-Value。原因如下:系統(tǒng)根據(jù)某個(gè)key去獲取對應(yīng)的字符串時(shí),如果沒有找到,那么就會以key作為value返回。所以如果我們在Localizable.strings(English)文件中沒有添加 click = "hit";那么在english環(huán)境下btn最終顯示的title會是click. 切換語言無需在模擬器中設(shè)置,只需要在Xcode中進(jìn)行如下設(shè)置: Edit->Scheme->Run->Arguments Passed On Launch ->-AppleLanguages (語言代碼)。例如,我們模擬器此時(shí)雖然是韓語,如果通過上述步驟設(shè)置為zh-Hans,那么語言環(huán)境將會變?yōu)闈h語,如下圖:

運(yùn)行效果:

如此一來,切換語言變得更加簡單,無需在模擬器的設(shè)置中進(jìn)行繁瑣的語言切換。

 (三)多人開發(fā)情況下的字符串本地化

項(xiàng)目開發(fā)中,獨(dú)立開發(fā)的還是少數(shù)。經(jīng)常會有多人開發(fā)的情況,這種情況,如果多人同時(shí)操作本地化文件,極有可能會存在沖突。另一方面,我們又不希望自己的本地化文件受到對方的污染,也就是說,我們不希望對方操作我們的本地化文件。但是上面介紹的代碼中字符串的本地化是使用的是默認(rèn)的文件名"Localizable",因?yàn)閱映绦驎r(shí),系統(tǒng)將根據(jù)語言加載相應(yīng)的文件得到其對應(yīng)的字符串文件,這個(gè)字符串可以通過系統(tǒng)將NSLocalizedString中的宏生成名為“Localizable.strings”的文件。那么如何讓系統(tǒng)加載我們自己命名的本地化文件而非系統(tǒng)默認(rèn)的Localizable.strings呢?這就是 NSLocalizedStringFromTable(<#key#>, <#tbl#>, <#comment#>)的用處。

也就是說,如果你的strings文件名字不是Localizable而是自定義的話,如VVS.strings,那么你就得使用NSLocalizedStringFromTable這個(gè)宏來讀取本地化字符串。

// key:系統(tǒng)根據(jù)key取字符串
// tbl:自定義strings文件的名字
// comment:可以不傳
  NSLocalizedStringFromTable(<#key#>, <#tbl#>, <#comment#>)

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIButton *btn;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  
  NSString *title = NSLocalizedStringFromTable(@"click", @"VVS", nil);
  [self.btn setTitle:title forState:UIControlStateNormal];
}

@end

運(yùn)行效果,如下圖:

如此一來,我們就可以掙脫別人的strings文件和系統(tǒng)默認(rèn)的Localizable.strings文件,自己另起爐灶。

(四)圖片本地化

本地化圖片,有兩種方式,第一種方式和本地化代碼中的字符串一樣,通過NSLocalizedString(key,comment)來獲取相應(yīng)的字符串,然后根據(jù)這個(gè)字符串再獲取圖片。

方式一

NSString *imageName = NSLocalizedString(@"icon", nil);
UIImage *image = [UIImage imageNamed:imageName];
self.imageView.image = image;

方式二

首先需要添加需要本地化的語言,具體步驟參考第一章 配置需要國際化的語言 。因?yàn)槲已菔镜膁emo中在本地化App名稱時(shí)已經(jīng)添加了需要國際化的語言。所以不需要再設(shè)置。

將圖片拖入工程中,例如“icon.png”,然后選中icon.png,展開Xcode右側(cè)的file Inspection,點(diǎn)擊Localize,如下圖:

然后,右擊icon.png->show in Finder,我們發(fā)現(xiàn)在en.Iproj文件中多了一個(gè)名為icon.png的圖片,如下圖:

當(dāng)然,zh-Hans.Iproj文件夾下并沒有圖片,如下圖:

我們只需給zh-Hans.Iproj添加一個(gè)名字也為icon.png的圖片。如下圖:

然后把zh-Hans.Iproj中的icon.png拖到Xcode中,如下圖:

然后發(fā)現(xiàn),icon.png左邊出現(xiàn)了一個(gè)可以展開的三角形。如下圖:

展開后發(fā)現(xiàn)里面包含兩張圖片,如下圖:

然后控制器中添加如下代碼:

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];
  
  NSString *imageName = NSLocalizedString(@"icon", nil);
  UIImage *image = [UIImage imageNamed:imageName];
  self.imageView.image = image;
}

@end

english環(huán)境下運(yùn)行效果如下:

中文環(huán)境改下運(yùn)行效果如下:

其他語言環(huán)境,例如法語、中文繁體、韓語,操作步驟完全和上面相同。都是在對應(yīng)的.Iproj文件夾下添加同名的圖片,然后把圖片拖放到Xcode中,不再贅述。

 (五)查看/切換本地語言

原理:應(yīng)用啟動時(shí),首先會讀取NSUserDefaults中的key為AppleLanguages對應(yīng)的value,該value是一個(gè)String數(shù)組,也就是說,我們訪問這個(gè)名為AppleLanguages的key可以返回一個(gè)string數(shù)組,該數(shù)組存儲著APP支持的語言列表,數(shù)組的第一項(xiàng)為APP當(dāng)前默認(rèn)的語言。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  NSArray *languages = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
  NSString *currentLanguage = languages.firstObject;
  NSLog(@"模擬器當(dāng)前語言:%@",currentLanguage);
}
@end

-控制臺打印結(jié)果:

同理,既然我們可以通過AppleLanguages這個(gè)key從NSUserDefaults中取出語言數(shù)組,那么我們也可以給AppleLanguages這個(gè)key賦值來達(dá)到切換本地語言的效果,從此以后,我們就無需頻繁的去模擬器的設(shè)置->通用->語言與地區(qū) 中切換語言。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  // 切換語言前
  NSArray *langArr1 = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
  NSString *language1 = langArr1.firstObject;
  NSLog(@"模擬器語言切換之前:%@",language1);
  
  // 切換語言
  NSArray *lans = @[@"en"];
  [[NSUserDefaults standardUserDefaults] setObject:lans forKey:@"AppleLanguages"];
  
  // 切換語言后
  NSArray *langArr2 = [[NSUserDefaults standardUserDefaults] valueForKey:@"AppleLanguages"];
  NSString *language2 = langArr2.firstObject;
  NSLog(@"模擬器語言切換之后:%@",language2);
}
@end

回想一下,我在上面的 技巧 一節(jié)中提過:切換語言無需在模擬器中設(shè)置,只需要在Xcode中進(jìn)行如下設(shè)置: Edit->Scheme->Run->Arguments Passed On Launch ->-AppleLanguages (語言代碼)。其實(shí)本質(zhì)上就是給NSUserDefaults中名為AppleLanguages的key賦值。 未完待續(xù)...

到此這篇關(guān)于3分鐘實(shí)現(xiàn)iOS語言本地化/國際化的文章就介紹到這了,更多相關(guān)iOS 本地化/國際化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • iOS中自帶超強(qiáng)中文分詞器的實(shí)現(xiàn)方法

    iOS中自帶超強(qiáng)中文分詞器的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于iOS中自帶超強(qiáng)中文分詞器的實(shí)現(xiàn)方法,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • IOS 中動畫的暫停與繼續(xù)播放的詳解

    IOS 中動畫的暫停與繼續(xù)播放的詳解

    這篇文章主要介紹了IOS 中動畫的暫停與繼續(xù)播放的詳解的相關(guān)資料,希望通過本文大家能理解掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • 實(shí)例分析IOS實(shí)現(xiàn)自動打包

    實(shí)例分析IOS實(shí)現(xiàn)自動打包

    本篇文章給大家分享了IOS實(shí)現(xiàn)自動打包的相關(guān)知識點(diǎn),以及需要的操作內(nèi)容做了分享,有需要的朋友可以學(xué)習(xí)下。
    2018-05-05
  • iOS?實(shí)現(xiàn)類似抖音滾動效果

    iOS?實(shí)現(xiàn)類似抖音滾動效果

    這篇文章主要介紹了iOS?實(shí)現(xiàn)類似抖音滾動效果,整體思路是我們將tableView 的contentinset設(shè)置為上面一個(gè)屏幕的高度,下面一個(gè)屏幕的高度,左右為0,這樣保證我們滾動過去的時(shí)候
    都是準(zhǔn)備好的內(nèi)容,需要的朋友可以參考下
    2024-06-06
  • IOS與網(wǎng)頁JS交互詳解及實(shí)例

    IOS與網(wǎng)頁JS交互詳解及實(shí)例

    這篇文章主要介紹了 IOS與網(wǎng)頁JS交互詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • iOS masonry的使用方法

    iOS masonry的使用方法

    這篇文章主要介紹了iOS masonry的基本使用方法的相關(guān)資料,文章還介紹了CocoaPods的安裝過程,需要的朋友可以參考下面文字內(nèi)容
    2021-09-09
  • iOS中導(dǎo)航欄的基本使用匯總

    iOS中導(dǎo)航欄的基本使用匯總

    導(dǎo)航欄作為iOS開發(fā)的一大空控件來說,是非常的重要這篇文章主要給大家介紹了關(guān)于iOS中導(dǎo)航欄的基本使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • iOS開發(fā)之手勢識別

    iOS開發(fā)之手勢識別

    本文給大家匯總介紹了在IOS開發(fā)中我們經(jīng)常需要用到的手勢識別的相關(guān)知識,非常的細(xì)致全面,有需要的小伙伴可以參考下
    2016-04-04
  • IOS使用UICollectionView實(shí)現(xiàn)無限輪播效果

    IOS使用UICollectionView實(shí)現(xiàn)無限輪播效果

    這篇文章主要為大家詳細(xì)介紹了IOS使用UICollectionView實(shí)現(xiàn)無限輪播效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • IOS 使用NSAssert()和NSParameterAssert調(diào)試程序

    IOS 使用NSAssert()和NSParameterAssert調(diào)試程序

    這篇文章主要介紹了IOS 使用NSAssert()和NSParameterAssert調(diào)試程序的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評論