📜  NSLocalizedString 不起作用 (1)

📅  最后修改于: 2023-12-03 15:18:02.316000             🧑  作者: Mango

NSLocalizedString 不起作用

在iOS开发中,使用 NSLocalizedString 是常见的国际化替换字符串的方式。然而,有时候可能会遇到 NSLocalizedString 不起作用的情况,可能会导致应用程序无法正常显示本地化字符串。本文将介绍可能的原因和解决方法。

可能的原因
1. Localizable.strings 文件未包含所需语言

iOS应用程序通常支持多国语言,NSLocalizedStringLocalizable.strings 文件中获取字符串。如果 Localizable.strings 只包含默认的语言,而非目标语言的翻译文本,那么 NSLocalizedString 无法在界面上显示正确的本地化字符串。

2. Localizable.strings 文件未在 build phases 中正确配置

如果 Localizable.strings 文件未在 build phases 中 添加到正确的 Target Membership 区域,那么 NSLocalizedString 就无法从此文件中获取字符串。

在Xcode中,切换到 Build Phases 页面,确保 Localizable.strings 文件的勾选框是被勾选中的,并且在 Target Membership 区域中,正确的Target被选中。

3. 键名不正确

NSLocalizedString 是基于给定的键名来获取字符串信息的。如果键名提供不正确,那么 NSLocalizedString 就无法获取到正确的本地化字符串。

请检查 Localizable.strings 文件中的键名是否正确。 键名应该与以下格式匹配:

"key"="value";
4. 国际化字符串缺失

如果 NSLocalizedString 不能找到给定的键,那么它就不能返回本地化字符串。检查 Localizable.strings 文件,并确认是否存在与你的键名匹配的本地化字符串。

5. 当前语言设置不正确

系统运行程序时,会根据用户的语言设置来决定应用程序要使用哪个本地化字符串。如果设置不正确,那么 NSLocalizedString 将不能准确地返回本地化字符串。

请确保设备的语言设置正确,或者在你的代码中动态地设置语言设置。

let preferredLanguage = "zh-Hans"
UserDefaults.standard.set([preferredLanguage], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
解决方法
1. 添加语言文件

请检查 Localizable.strings 文件,确保其包含你需要的语言翻译信息。如果没有,请将所需语言的翻译添加到 Localizable.strings 文件中。

2. 配置正确的 Target Membership

在Xcode中,切换到 Build Phases 页面,确保 Localizable.strings 文件正确的Target被选中。

3. 检查键名是否正确

请检查 Localizable.strings 文件中的键名是否正确。

4. 添加缺失的字符串

如果 NSLocalizedString 不能找到给定的键,那么它就不能返回本地化字符串。检查 Localizable.strings 文件,并确认是否存在与你的键名匹配的本地化字符串。

5. 确认当前语言设置正确

请确认设备的语言设置正确,或动态地设置设备的语言设置。

let preferredLanguage = "zh-Hans"
UserDefaults.standard.set([preferredLanguage], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()

总之,我们需要对本地化过程进行透彻的检查以找出可能的问题,并及时进行更正,以确保 NSLocalizedString 能够正常工作。