?最近要做一個應用要實現本地化,因為使用的是xcode4,應用程序本地化的問題跟以前的版本還是有些不同,在網上找了些資料對于xcode4以上的版本資料還是相對較少,有些最后要通過手動創建文件,這樣操作實在是太麻煩,所以經過一個下午的研究,總算是成功了一點點,還是慶幸一下。先給出結果。
英語:??????????????????????????????????????????????????????????????????? 中文:
??????????????
???????????????????????
具體實現如下:
靜態本地化?:?加載的文件,如xib文件,圖像文件,還有實現應用程序名本地化
動態本地化:?顯示的字符串本地化
?
一。先做準備:設置程序本地化
在xcode點擊程序圖標:點擊Info選項->Localizationn,點擊“+”,選擇要添加的語言,簡體中文選擇Chinese(zh-Hans)
你會在你工程目錄下發現多了個文件夾,“zh-Hans.lproj",x-code使用.lproj作為其本地化文件夾的擴展名。
?
二。設置xib文件本地化,?圖像本地化的方法是一樣道理的,可以根據用戶的顯示語言加載不同的xib文件
操作:點擊xib文件,在IB窗口中選擇選項選擇“File Inspecter",也就是第一個選項,選擇“Localization->"+"選擇添加的語言,
效果如下,原來的xib文件就會出現三角形,其下有兩個文件,因為我的為storyboard,但效果是一樣的。就可以實現將其本地化了,非常簡單吧
?
?
三。設置應用程序名本地化,
????? 設置應用程序名存儲在應用程序的Info.plist文件中,我們例子實際上為Localize-Info.plist,選擇文件,并不需要對文件進行本地化,而是使"Info.strings"本地化就可以了,在Localize.Info.plist,空白處右鍵,選擇Show Raw Keys/Values,就會看到應用程序名實際為CFBundleDisplayName,我們只需要在對應的 Info.plist中添加以下代碼就可以了
英文版:
- CFBundleDisplayName?=?"Localization";??
?中文版:
- CFBundleDisplayName?=?"本地化";??
?效果圖:
?
?
四、加載的字符串本地化,
????? 原理:在代碼中將加入的字符串加入NSLocalizeString宏中,啟動程序時,系統將根據語言加載相應的文件得到其對應的字符串文件,這個字符串可以通過系統將NSLocalizedString中的宏生成名為“Localizable.strings”的文件,當然你可以自己去創建這個文件,然后手動是添加對應的字符串。,
- labelName.text?=?NSLocalizedString(@"Name",?@"The?name?is?");??
- labelPassword.text??=?NSLocalizedString(@"Password:",@"The?password?is");??
?NSlocalizeString 第一個參數是內容,第二個參數將會轉化為字符串文件里的注釋。
轉化方法如下 :先關閉項目,打開終端,進入到項目的目錄,輸入genStrings 文件名.m就可以將該文件中的宏轉化為相應的字符串文件,
效果如下:會看到生成"Localizable.strings",
打開文件,就可以交給翻譯人員去翻譯了
?
?
?
?
===================
1、本地化字符串,網上那些方法我就不說了,我只更正一點:如果你的Classes下面有子文件夾會報錯,使用下面的命令:
find . -name \*.m | xargs genstrings -o /Users/apple/(你目標的文件夾)
2、本地化軟件的名字:
(1)在info.plist文件里做如下設置:

?(2)創建一個InfoPlist.strings文件,里面寫如下內容:
"CFBundleDisplayName"="你軟件的名稱";
"CFBundleName"="你軟件的名稱";
(3)本地化這個文件即可。
3、本地化資源,不必細說了,網上資料很多,這里我只說下我的疑惑:圖片資源貌似只能用zh-Hans。
4、本地化icon,目前不支持,所以不要費勁的去本地化icon了。
5、商店的本地化,也不必細說了,很簡單,按照蘋果需要的填就可以了。
====================
?
?
?
應用genstrings和NSLocalizedString實現App文本的本地化
Admin
2012年3月20日
App本地化的須要不消講大師也都熟悉打聽,本文將介紹一種簡單的辦法來實現字符串的本地化。
?
在不推敲本地化的景象下,我們若是在代碼中給一個Button定義title,一般會如許寫:
?
btn.titleLable.text = @"Example Button";
?
?
?
也許我們已經寫了很長的代碼才推敲到本地化的題目,大可不必頭疼,這時辰,我們要做的是把代碼從頭掃一遍,然后把每個會顯示給用戶看的字符串做如下批改:
(對于內部應用的字符串就用不著本地化了)
?
btn.titleLable.text = NSLocalizedString(@"btn_title", nil);
?
NSLocalizedString是一個定義在NSBundle.h中的宏,其用處是尋找當前體系說話對應的Localizable.strings文件中的某個key的值。
第一個參數是key的名字,第二個參數是對這個“鍵值對”的注釋,在用genstrings對象生成Localizable.strings文件時會主動加上去。
?
?
?
到今朝為止,我們還沒有生成Localizable.strings文件。這是一個逆向的過程,也就是先寫好調用過程,再生成strings資料文件。
?
當我們把所有的.m文件都修發好了,就該genstrings對象出場了。
1.?啟動終端,進入工程地點目次。
2. 新建兩個目次,推薦放在資料目次下。
?目次名會感化到Localizable.strings文件對應的說話,不克不及寫錯了。這里zh-Hans指簡體中文,重視不克不及用zh.lproj默示。
?
mkdir zh-Hans.lproj
mkdir en.lproj
?
3. 生成Localizable.strings文件
?
genstrings -o zh-Hans.lproj *.m
genstrings -o en.lproj *.m
?
-o <文件夾>,指定生成的Localizable.strings文件放置的目次。
*.m,掃描所有的.m文件。這里支撐的文件還包含.h, .java等。
?
4. 右鍵點擊工程的Resources目次,選擇“New Group”,添加兩個目次zh-Hans.lproj和en.lproj。
5. 在新建的group中添加方才生成的Localizable.strings文件。
6. 最后在Localizable.strings文件中,批改每個key所對應的內容,就大功成功了。
?
?
?
說了一大堆,其實操縱起來還是很簡單的,總的來講就是兩條:
1. 在代碼里用NSLocalizedString獲取要本地化的字符串
2. 用genstrings掃描代碼文件,生成Localizable.strings,然后加到工程中。?
?
最后祝大師的產品早日走向世界。