簡體   English   中英

如何本地化 iOS info.plist 文件中的字符串?

[英]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:

  1. 在 Xcode 中找到文件夾 Resources(放在 root 中)
  2. 選擇文件夾資源
  3. 然后按主菜單 File->New->File...
  4. 在“資源”字符串文件部分中選擇,然后按下一步
  5. 然后在Save As字段中只寫 InfoPlist(“I”(眼睛)大寫和“P”大寫 - P 后面的 l(ell)應該是大寫)
  6. 然后按創建
  7. 然后選擇在 Resources 文件夾中創建的文件 InfoPlist.strings 並在右側菜單中按“Localize”按鈕
  8. 然后從項目導航器中選擇項目並從項目列表中選擇項目
  9. 在底部的信息選項卡中,您可以使用任意數量的語言(在本地化部分中有)
  10. 您可以在資源文件夾中看到的語言
  11. 要本地化 info.plist 文件中的值(“鍵”),您可以使用文本編輯器打開並獲取要本地化的所有鍵
  12. 您可以在任何 InfoPlist.strings 中編寫任何鍵作為示例,如上例

"NSLocationAlwaysAndWhenInUseUsageDescription"="blabla";

"NSLocationAlwaysUsageDescription"="blabla2";

這就是全部工作,您已經本地化了 info.plist 文件!

提示

  1. 請記住,iOS 模擬器默認使用您的系統語言。 請也更改 iOS 模擬器設置中的語言(和地區)以測試您的翻譯。

  2. 本地化字符串(請參閱此處的Apple 文檔)應該是

    NSLocationWhenInUseUsageDescription = "Description of this";

    而不是(用引號“...”)

     "NSLocationWhenInUseUsageDescription" = "Description of this";

如果某些東西不起作用,請確保您添加了:

“本地化資源可以混合”= YES

進入 info.plist。 在我的例子中,InfoPlist.strings 文件被忽略了。

我強烈建議閱讀 Apple 的指南,並查看此處列出的 WWDC 資源:國際化和本地化主題

當您向項目添加新語言時,專門回答您的問題在此處輸入圖片說明 ,您有機會選擇要包含哪些 InfoPlist 文件(如果您有多個目標,您將有多個 Info plist 文件)。 要獲得以下屏幕,您只需點擊 Localizations 下的 + 並選擇一種新語言來添加支持。在此處輸入圖片說明

添加后,它將在給定語言的相應 lproj 目錄中創建必要的字符串文件。

- 編輯 -

需要明確的是,iOS 將根據用戶當前選擇的語言使用 plist 條目的鍵作為本地化字符串文件中的鍵,為您的 Plist 文件換出字符串。

對於較新的 XCode 12 / 13 /...

1. 在您的項目中創建一個新的InfoPlist.string文件。

選擇您的項目,單擊右鍵並選擇新建文件

選擇文件類型“字符串文件”

將其命名為“InfoPlist”並創建它

2. Select 你的文件,你應該看到右邊欄選項“Localize”

在右側欄中選擇本地化

完畢。

3.如果你想在項目的信息>>本地化中添加更多語言

它將為您添加的新語言自動創建“InfoPlist.string”的副本。

為您的項目添加更多語言。

對於在嘗試添加本地化時遇到未包含 info.plist 問題的任何人,例如在 Xcode 9 中。

您需要通過進入並單擊文件檢查器中的本地化按鈕來使 info.plist 本地化,如下所示。

當您添加新的本地化時,info.plist 將包含在文件資源中。

在此處輸入圖片說明

正如 RGML 所說,您可以創建一個 InfoPlist.strings,對其進行本地化,然后添加您的鍵和值,如下所示:“NSLocationWhenInUseUsageDescription” = “Help To locate me!”;

它會將指定語言的密鑰添加到您的 info.plist 中。

除了已接受的答案(該項目在 Flutter 上,但與原生基本相同):

我確實有文件夾Base.lprojen.lprojxx.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“開發語言”不會影響您的問題,不要費心改變它。

使用InfoPlist.strings文件時(在 XCode 中,它應該放在Info.plist文件旁邊 - 實際文件位置可能在項目中的任何位置

在 XCode 中查看

) 小心使用密鑰的短名稱進行翻譯。

我試圖使用Privacy - Camera Usage Description ,但工作鍵是NSCameraUsageDescription

在我的情況下,本地化不起作用的原因是名稱中帶有“-”符號。 示例:“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM