日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

iOS 应用程序内部国际化,不跟随系统语言

發布時間:2023/12/13 综合教程 21 生活家
生活随笔 收集整理的這篇文章主要介紹了 iOS 应用程序内部国际化,不跟随系统语言 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:網絡上關于iOS國際化的文章很多,但基本上都是基于跟隨系統語言的國際化,筆者就不贅述了-0 –

今天要講的是不跟隨系統的切換語言版本方案,即程序內部的切換語言版本方案。

一、總則:

應用內部語言不跟隨系統語言,由應用自己進行控制,通過配置多個語言文件,根據用戶的選擇動態獲取不同文件夾下的語言文件,顯示在界面上。

最后把用戶選擇的語言持久化到本地,下次運行時讀取。

二、應用內的國際化

1、新建工程

新建Single View Application工程,取名為MyInternational。

2、添加多語言文件

我們選擇使用自己的語言文件,而不是系統的localizable.string,因為在項目開發使用svn時,多人操作同一文件可能會造成沖突。

在Resource中添加新的Strings File:

取名為hello(記得Targets要勾選項目)

新建完成之后會生成hello.string文件,把它拖進Supporting Files里。

3、配置hello.string國際化

首先配置剛才的hello.string文件。

點擊hello.strings文件,點擊圈中的Make localized(本地化)。

只有English,沒關系點擊確定。

4、配置項目國際化

網絡上很多配置方法不靠譜,因為新版的Xcode位置“+”號的位置換了,這里教大家正確的方法,點擊項目—>選擇Project—>選擇Info—>點擊“+”號。

點擊“+”號后,添加中文,當然也可以添加其他的語言,彈出對話框,infoPlist是配置系統的國際化文件,可以配置圖標之類的多語言環境,不屬于本文范圍,nib文件看需要配,這里選擇不配。

配置完成之后,再看hello.string便分成了兩個文件。

完成上面的四步便完成了項目內的多語言環境配置,下面來看看代碼怎么寫。

5、添加需要的字符串

分別在hello.strings(English)與hello.strings(Chinese)里面添加對應語言的字符串。

字符串的格式為“key”=“value”;鍵值對(別忘記分號!)

接下來配置項目需要的字符串,一個用于lable的顯示,一個用于button的顯示。

hello.strings(English)

"invite"="hello atany,come to join in us!";

"buttonInfo"="change Language";

hello.strings(Chinese)

"invite"="你好atany,快來加入我們吧!";

"buttonInfo"="切換語言";

6、看看流程

【實現思路:】

在初始化首個Controller的時候,進行應用語言的加載。首次加載因為userLanguage(應用內語言)不存在,則使用系統當前的語言,保存到userlanguage,下次直接讀。讀出來之后,獲取到對應文件路徑,得到文件的索引,儲存到工具類InternationalControl的靜態變量bundle中。

其他地方需要用字符串時,用工具類獲得bundle即可讀取相應文件中的字符串。

7、新建工具類InternationalControl

InternationalControl.h

[cpp]view plaincopy

#import<Foundation/Foundation.h>

#import<UIKit/UIKit.h>

@interfaceInternationalControl:NSObject

+(NSBundle*)bundle;//獲取當前資源文件

+(void)initUserLanguage;//初始化語言文件

+(NSString*)userLanguage;//獲取應用當前語言

+(void)setUserlanguage:(NSString*)language;//設置當前語言

@end

InternationalControl.m

1)創建靜態變量bundle,以及獲取方法bundle(注:此處不要使用getBundle)。

[cpp]view plaincopy

staticNSBundle*bundle=nil;

+(NSBundle*)bundle{

returnbundle;

}

2)初始化方法:

userLanguage儲存在NSUserDefaults中,首次加載時要檢測是否存在,如果不存在的話讀AppleLanguages,并賦值給userLanguage。

[cpp]view plaincopy

+(void)initUserLanguage{

NSUserDefaults*def=[NSUserDefaultsstandardUserDefaults];

NSString*string=[defvalueForKey:@"userLanguage"];

if(string.length==0){

//獲取系統當前語言版本(中文zh-Hans,英文en)

NSArray*languages=[defobjectForKey:@"AppleLanguages"];

<preclass="cpp"name="code">NSString*current=[languagesobjectAtIndex:0];

string=current;

[defsetValue:currentforKey:@"userLanguage"];

[defsynchronize];//持久化,不加的話不會保存
}

//獲取文件路徑
NSString*path=[[NSBundlemainBundle]pathForResource:stringofType:@"lproj"];

bundle=[NSBundlebundleWithPath:path];//生成bundle
}
</pre>

3)獲得當前語言方法

[cpp]view plaincopy

+(NSString*)userLanguage{

NSUserDefaults*def=[NSUserDefaultsstandardUserDefaults];

NSString*language=[defvalueForKey:@"userLanguage"];

returnlanguage;
}

4)設置語言方法

[cpp]view plaincopy

+(void)setUserlanguage:(NSString*)language{

NSUserDefaults*def=[NSUserDefaultsstandardUserDefaults];

//1.第一步改變bundle的值
NSString*path=[[NSBundlemainBundle]pathForResource:languageofType:@"lproj"];

bundle=[NSBundlebundleWithPath:path];

//2.持久化
[defsetValue:languageforKey:@"userLanguage"];

[defsynchronize];
}

8、拖nib,配置點擊事件

一個button,一個label,button用于切換語言,label用于顯示信息。

9、配置加載的第一個Controller,這里是YGViewController

YGViewController.h

[cpp]view plaincopy

#import<UIKit/UIKit.h>

@interfaceYGViewController:UIViewController

@property(retain,nonatomic)IBOutletUILabel*inviteLabel;//label

-(IBAction)changeLanguage:(id)sender;//點擊事件

@property(retain,nonatomic)IBOutletUIButton*btChange;//button

@end

YGViewController.m

1)加載:

[cpp]view plaincopy

-(void)viewDidLoad
{
//注冊通知,用于接收改變語言的通知
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(changeLanguage)name:@"changeLanguage"object:nil];

[InternationalControlinitUserLanguage];//初始化應用語言

NSBundle*bundle=[InternationalControlbundle];

NSString*inviteMsg=[bundlelocalizedStringForKey:@"invite"value:niltable:@"hello"];

NSString*buttonInfo=[bundlelocalizedStringForKey:@"buttonInfo"value:niltable:@"hello"];//table為hello.string的文件名

[_btChangesetTitle:buttonInfoforState:UIControlStateNormal];

_inviteLabel.text=inviteMsg;

[superviewDidLoad];
}

2)點擊修改語言方法

[cpp]view plaincopy

-(IBAction)changeLanguage:(id)sender{

NSString*lan=[InternationalControluserLanguage];

if([lanisEqualToString:@"en"]){//判斷當前的語言,進行改變

[InternationalControlsetUserlanguage:@"zh-Hans"];

}else{

[InternationalControlsetUserlanguage:@"en"];
}

//改變完成之后發送通知,告訴其他頁面修改完成,提示刷新界面
[[NSNotificationCenterdefaultCenter]postNotificationName:@"changeLanguage"object:nil];
}

3)接收到通知執行方法,刷新界面

[cpp]view plaincopy

-(void)changeLanguage{

[_btChangesetTitle:[[InternationalControlbundle]localizedStringForKey:@"buttonInfo"value:niltable:@"hello"]forState:UIControlStateNormal];

_inviteLabel.text=[[InternationalControlbundle]localizedStringForKey:@"invite"value:niltable:@"hello"];
}

如果有多個界面的話,需要每個界面都配置接收通知,用于修改界面。

10、運行界面

可以看到點擊切換語言之后,語言切換成功。

退出程序再次進入,保留了上次選擇的語言。

總結

以上是生活随笔為你收集整理的iOS 应用程序内部国际化,不跟随系统语言的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。