Ios 如何本地化plist文件

Ios 如何本地化plist文件,ios,properties,localization,internationalization,plist,Ios,Properties,Localization,Internationalization,Plist,我提前感谢你的帮助。我到处寻找答案,但运气不好 我有一个应用程序,使用非常专业的体育术语,我存储在plist文件中。然后,这些术语将显示在UITableView中。当用户点击该技能时,将播放视频演示。该应用程序工作得很好,但我非常希望将其本地化为其他语言 我已经翻译了这些术语,我希望我可以通过制作一份plist文件的副本来本地化plist文件,只需在每个连续副本中更改特定于运动的术语,然后将其放入相应的语言文件夹中。这可能吗?如果可能的话,有人能给我举一个好的例子或教程吗 到目前为止,我已经尝试

我提前感谢你的帮助。我到处寻找答案,但运气不好

我有一个应用程序,使用非常专业的体育术语,我存储在plist文件中。然后,这些术语将显示在UITableView中。当用户点击该技能时,将播放视频演示。该应用程序工作得很好,但我非常希望将其本地化为其他语言

我已经翻译了这些术语,我希望我可以通过制作一份plist文件的副本来本地化plist文件,只需在每个连续副本中更改特定于运动的术语,然后将其放入相应的语言文件夹中。这可能吗?如果可能的话,有人能给我举一个好的例子或教程吗

到目前为止,我已经尝试在Xcode中本地化俄语的plist文件,并将其放在自己的ru.lproj文件夹中,但是,当我在模拟器中运行它时,UITableView中根本没有显示任何数据!如果没有俄文文件,它可以正常工作。因此,我的想法是,Xcode在某种程度上混淆了plist文件,因为名称相同,即使它位于不同的目录en.lproj和ru.lproj中。该文件在两个目录中都称为Basic.plist。这个过程对我来说完全是混乱的,从我收集的信息来看,应该不难理解


再次,提前谢谢你。本地化的概念对我来说是全新的,我渴望学习它。我很确定我理解.strings文件是如何与嵌入在代码中的字符串一起工作的,但是我想知道是否有可能翻译整个pList文件。

很多事情可能是错误的。一种可能性是plist文件不会被复制到bundle中。在目标的构建阶段页面中,它应该是Basic.plist,旁边写着……in localization.lproj

如果您手动创建了ru.lproj,可能是您将其复制到了错误的位置,或者将原始文件留在了错误的位置,现在它应该位于en.lproj中。与其手动创建文件,不如在XCode中选择文件Basic.plist并使用文件检查器中的本地化控件添加本地化。正如Kevin Grant提到的,如果这没有显示您的文件包含英语和俄语,那么就有问题了,您可以重新开始使用+控件

最后,我不是100%确定这一点,但已经足够接近了:我相信您的代码可能需要更新,以确定从何处加载plist文件。如果是.xib或.strings文件,则不必这样做,因为这将是自动的,并且iOS知道在加载.xib时,首先查看相关的.lproj文件夹,您只指定其名称,而不指定其确切位置。但我假设您是通过特定路径加载plist文件,因此该路径现在必须包括.proj文件夹


如果可能的话,我认为每种语言使用不同的plist文件的更好方法是只使用一个plist,但是可以使用它作为.strings文件的键,而不是显示plist中的字符串。您可以使用NSLocalizedString宏检索本地化,该宏定义为[[NSBundle mainBundle]localizedStringForKey:key value:@table:nil],它将在运行时在本地化的.strings文件中为您提供相应的值。当然,这意味着在更新plist时,还必须更新.strings文件以匹配。好的是,您不需要为您的活动语言确定plist的路径-使用NSLocalizedString,您根本不提供路径。

如何在Xcode中设置文件Xcode是否将其视为具有本地化的文件?您是在运行时使用捆绑API定位文件,还是自己尝试定位文件?谢谢您的回复。正在使用以下方法复制plist:NSString*Path=[[NSBundle mainBundle]bundlePath];NSString*DataPath=[Path stringByAppendingPathComponent:@Basic.plist];NSDictionary*tempDict=[[NSDictionary alloc]initWithContentsOfFile:DataPath];self.data=tempDict;我是否因为现在有两个不同的.lproj文件夹而有所不同?是的,因为过去您的Basic.plist文件位于捆绑包的根文件夹中,而现在它位于en.lproj或ru.lproj子文件夹中。因此,首先你需要弄清楚是看en.lproj内部还是看ru.lproj内部我不知道如何立即实现这一点,并将其附加到你的路径中。我已经弄清楚了。我使用的初始代码不正确。我使用了以下方法,现在效果很好:NSString*path=[[NSBundle mainBundle]pathForResource:@Plyos of type:@plist];NSDictionary*tempDict=[NSDictionary Dictionary WithContentsOfFile:path];