在objective-c(iPhone)中抽象出字符串

Mat*_* GA 7 string iphone localization objective-c

我正在开发一个iphone应用程序,我想知道抽象字符串的正确做法是什么.我习惯于创建一个包含常量字符串的文件,并在我的应用程序中引用它们(例如url,端口号甚至按钮标签).我想知道这是否被认为是Obj-C的良好做法,如果是这样,最好的办法是什么?我应该用字符串创建一个类吗?或者使用".strings"文件?

ps我可能会在以后本地化我的应用程序.我还没有调查过如何做到这一点,但我想在我开发的时候抽出我的弦是一个好主意.

谢谢!MGA

jus*_*tin 5

一般来说,你接口NSBundle.您使用字符串来读取字符串的本地化版本(从本地化的字符串文件加载).

还有一些人用来减轻语法的宏,这些都是前缀的NSLocalizedString.NSLocalizedString实现使用NSBundle.

imo,你应该使用字符串常量来识别你读取的本地化字符串(就像你应该使用字典和对象键).

您可以使用此表单声明常量(假定objc):

extern NSString* const MONAppString_Download;
Run Code Online (Sandbox Code Playgroud)

并定义如下:

NSString* const MONAppString_Download = @"Download";
Run Code Online (Sandbox Code Playgroud)

然后使用:访问它:

NSString * tableName = nil; // << using the default
NSString * localized =
  [[NSBundle mainBundle]
    localizedStringForKey:MONAppString_Download
     value:MONAppString_Download // << return the string using the default localization if not found
      table:tableName];
Run Code Online (Sandbox Code Playgroud)

有时它有助于创建包装函数以减少噪音,尤其是在许多地方使用它们时:

// @return what's set to the above variable named  'localized'.
NSString * MONLocalized_Download();
Run Code Online (Sandbox Code Playgroud)

然后你设置你的字符串文件,如地图,一个支持你的每个本地化.

因此,只要您需要读取用户可见的字符串,就可以使用上面的表单.还要考虑还有其他资源可以本地化(笔尖,图像,pdf等),您可以将它们与您的应用程序捆绑在一起.如果你愿意的话,这里的大部分工作也是由CFBundle的NSBundle提取的.

祝好运