[英]How to localise a string inside the iOS info.plist file?
您可能知道iOS 8需要NSLocationWhenInUseUsageDescription密鑰才能使用用戶的位置。 我已將此密鑰和一些一般信息添加到我的信息列表中。
如何在 plist 文件中使用翻譯字符串?
- 更新 -
我已經有一個 Localizable 字符串。 我只是想知道我可以在 plist 字符串中使用類似 NSLocalizedString(MYSTRING,nil) 的東西。 我知道我可以為本地化創建多個 info.plist 文件,但我想知道可能有更簡單的方法。
您應該使用InfoPlist.strings
文件來本地化Info.plist
值。 為此,請轉到File->New->File
,在iOS
Resource
選項卡下選擇Strings File
,將其命名為InfoPlist
,然后創建。 打開並插入要本地化的Info.plist
值,例如:
NSLocationWhenInUseUsageDescription = "Description of this";
現在您可以使用翻譯本地化InfoPlist.strings
文件。
選擇本地化選項,或根據需要啟用本地化,
您也應該能夠在左側編輯器中看到該文件。
這是Info.plist
鍵本地化的官方文檔。
感謝Marco ,感謝您在此答案中包含圖片!
以上所有對我都不起作用(XCode 7.3),所以我閱讀了蘋果參考資料,它比上面描述的要簡單得多。 據蘋果稱:
本地化的值不存儲在 Info.plist 文件本身中。 相反,您將特定本地化的值存儲在名為 InfoPlist.strings 的字符串文件中。 您將此文件放在用於存儲相同本地化的其他資源的相同語言特定項目目錄中。
因此,我創建了一個名為InfoPlist.strings的字符串文件,並將其放置在“xx”語言的 xx.lproj 文件夾中(並使用 File->Add Files to ... 添加到項目中)。 就是這樣。 不需要關鍵“本地化資源可以混合”= YES,也不需要base.lproj或en.lproj中的InfoPlist.strings。
如果在語言特定文件中找不到鍵,應用程序將使用 Info.plist 鍵值作為默認值。 因此,我將我的英語值放在 Info.plist 文件中,並將翻譯后的值放在特定語言的文件中,經過測試,一切正常。
特別是,不需要本地化 InfoPlist.strings(它在 base.lproj、en.lroj 和 xx.lproj 中創建文件的一個版本),在我的情況下,這種方式不起作用。
一步一步本地化Info.plist:
Save As
字段中只寫 InfoPlist(“I”(眼睛)大寫和“P”大寫 - P 后面的 l(ell)不應該是大寫)"NSLocationAlwaysAndWhenInUseUsageDescription"="blabla";
"NSLocationAlwaysUsageDescription"="blabla2";
這就是全部工作,您已經本地化了 info.plist 文件!
提示
請記住,iOS 模擬器默認使用您的系統語言。 請也更改 iOS 模擬器設置中的語言(和地區)以測試您的翻譯。
本地化字符串(請參閱此處的Apple 文檔)應該是
NSLocationWhenInUseUsageDescription = "Description of this";
而不是(用引號“...”)
"NSLocationWhenInUseUsageDescription" = "Description of this";
如果某些東西不起作用,請確保您添加了:
“本地化資源可以混合”= YES
進入 info.plist。 在我的例子中,InfoPlist.strings 文件被忽略了。
我強烈建議閱讀 Apple 的指南,並查看此處列出的 WWDC 資源:國際化和本地化主題
當您向項目添加新語言時,專門回答您的問題 ,您有機會選擇要包含哪些 InfoPlist 文件(如果您有多個目標,您將有多個 Info plist 文件)。 要獲得以下屏幕,您只需點擊 Localizations 下的 + 並選擇一種新語言來添加支持。
添加后,它將在給定語言的相應 lproj 目錄中創建必要的字符串文件。
- 編輯 -
需要明確的是,iOS 將根據用戶當前選擇的語言使用 plist 條目的鍵作為本地化字符串文件中的鍵,為您的 Plist 文件換出字符串。
正如 RGML 所說,您可以創建一個 InfoPlist.strings,對其進行本地化,然后添加您的鍵和值,如下所示:“NSLocationWhenInUseUsageDescription” = “Help To locate me!”;
它會將指定語言的密鑰添加到您的 info.plist 中。
除了已接受的答案(該項目在 Flutter 上,但與原生基本相同):
我確實有文件夾Base.lproj
、 en.lproj
、 xx.kproj.
等等,每個都有InfoPlist.strings
。 這個文件有這樣的行(鍵周圍沒有引號,最后有一個分號):
NSLocationWhenInUseUsageDescription = "My explanation why I need this";
另外,檢查project.pbxproj
文件,它在 XXX.xcodeproj/project.pbxproj 中:它應該在代碼中包含您的所有語言(en、fr 等)
但即便如此,它也沒有奏效。 最后,我注意到Info.plist
文件中的CFBundleLocalizations
鍵。 (在 XCode 中將其作為原始鍵值打開 - Info.plist
文件上的鼠標右鍵 -> 打開為 -> 源代碼)確保數組中的值是代碼而不是完整的單詞,例如fr
而不是French
等等。
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ru</string>
<string>lv</string>
</array>
並仔細檢查您的設備是否設置為您正在測試的語言。 干杯
PS“開發語言”不會影響您的問題,不要費心改變它。
在我的情況下,本地化不起作用的原因是名稱中帶有“-”符號。 示例:“aero-Info.plist” 本地化文件:“aero-InfoPlist.strings”和“aeroInfoPlist.strings”不起作用。
就我而言,一切都設置正確,但仍未找到 InfoPlist.strings 文件。
唯一真正有效的是,刪除並再次將 InfoPlist.strings 文件添加到項目中。
iOS 本地化.plist
如果在InfoPlist.string
中設置,則可以跳過將鍵定義到.plist
.plist
InfoPlist.string
"NSPhotoLibraryAddUsageDescription" = "To download image";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.