gpt4 book ai didi

swift - 无法本地化我的 Swift 5 框架。本地化导入没有任何作用

转载 作者:行者123 更新时间:2023-11-30 10:40:28 25 4
gpt4 key购买 nike

我开发了一个 Swift 5 框架,可在适用于 iPhone 和 iPad 的 iOS 12 及更高版本上运行。

除了英语之外,我还添加了法语本地化,但项目信息选项卡显示两种语言都没有本地化文件,如下图所示:

enter image description here

当我运行 Xcode Editor|Export 进行本地化时,我得到了捆绑的文件(包括 fr.xliff 文件)。我使用 Xcode 编辑了 fr.xliff 来翻译一些字符串,并将其导入回来。但应用程序中没有任何变化。

顺便说一句,我在项目文件层次结构中看不到任何 *.strings 文件,这听起来很奇怪。

[更新]

所以我手动添加了Localized.Strings文件,并添加了英语和法语。

  1. 当我导入 xliff 文件时,Localized.strings 文件保持为空。没有出现明显的问题。

  2. 当我将 key=value 列表放入字符串文件中时,NSLocalizedString() 不会返回字符串的正确本地化版本(它始终返回键)。

感谢帮助。

最佳答案

发现问题所在:我必须使用完整(扩展)版本的 NSLocalizedString() 才能使函数调用从我的框架 Localized.strings 文件(而不是客户端)获取翻译应用程序),如下:

NSLocalizedString("Continue", tableName: tableName, bundle: bundle, comment: "Continue in the button title of UIAladdinOnboardingViewController")

地点:

  • tableName:一个全局变量,保存我的可本地化字符串文件的名称(在我的例子中是“Aladdin.Localizes”)。我这样做是为了避免 .strings 文件的潜在冲突(因为我的框架名称是 Aladdin);
  • bundle:框架 namespace 中的全局变量,用于指定要从中选取字符串的框架模型包。我这样定义它: let bundle = Bundle(for: ExtendedAppDelegate.self) 其中 ExtendedAppDelegate 是我的框架自定义类之一。

重要旁注:

顺便说一句,不要将插值字符串作为 NSLocalizedString 调用的关键参数,否则它将在运行时进行插值,导致字符串文件中不存在插值字符串。

不要这样做:

let s = NSLocalizedString("{Start your \(introductoryPeriod) free trial.}", tableName: tableName, bundle: bundle, comment: "in price display")

这样做:

let s = String(format: NSLocalizedString("{Start your %@ free trial.}", tableName: tableName, bundle: bundle, comment: "{Start your \\(introductoryPeriod) free trial.}"), introductoryPeriod)

使用相应的 Aladdin.Localizable.strings (en):

/* {Start your \(introductoryPeriod) free trial.} (in price display) */
"{Start your %@ free trial.}" = "{Start your %@ free trial.}";

生成字符串:

我使用了终端中的 gestrings,如下所示:

 $genstrings -o en.lproj/ *.swift

$genstrings -o fr.lproj/ *.swift

对于您拥有的每种目标语言,依此类推。最后,直接在字符串文件中进行翻译。

关于swift - 无法本地化我的 Swift 5 框架。本地化导入没有任何作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56917337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com