Jam*_*GNT 10 localization storyboard ios
我对iOS开发很新,我问自己是否有可能将我的"Localizable.strings"文件中的本地化字符串直接用于故事板.例如,在Android中,您可以从XML文件中执行此操作:
android:text="@string/notConnected"
Run Code Online (Sandbox Code Playgroud)
我知道你可以制作故事板的本地化版本,但是拥有不同的字符串文件和不同的故事板对我来说看起来很难看.
那么有可能只有字符串文件并使用我需要的故事板吗?最好不要从代码中设置它?
这可能吗?是否有合法的方式从Android中调用字符串?
Leo*_*eon 14
我认为能够String在故事板中本地化s具有显着的优势.我不同意@elk_cloner,IBOutlet因为每个人UILabel都是前进的道路.
让它工作的一种方法是在UILabel子类上使用@IBInspectable属性:
class LocalisableLabel: UILabel {
@IBInspectable var localisedKey: String? {
didSet {
guard let key = localisedKey else { return }
text = NSLocalizedString(key, comment: "")
}
}
}
Run Code Online (Sandbox Code Playgroud)
在故事板中设置自定义类:
在属性检查器中,将显示localisedKey字段,您只需在此处添加密钥即可.
而已!
编辑:
您可以UIButton以相同的方式本地化,但如果故事板的标题字段中的文本与本地化的字符串(它将在其他语言中)不同,则标题的设置将具有动画效果.
要解决此问题,请将setTitle放在一个performWithoutAnimation块中:
class LocalisableButton: UIButton {
@IBInspectable var localisedKey: String? {
didSet {
guard let key = localisedKey else { return }
UIView.performWithoutAnimation {
setTitle(key.localized, for: .normal)
layoutIfNeeded()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据你的要求,这是不可能的
您不需要不同的故事板进行本地化
假设您要本地化标签字符串.
mylabel.text = nsLocalizedString("THIS_IS_MY_STRING",nil);
当然,在你的本地化文件中会有一行.你必须有不同语言的不同文件.假设你有一个英文文件,必须有一行.
"THIS_IS_MY_STRING"="这是我的字符串";
编译应用程序时,该功能将使用映射来本地化您的应用程序.
编辑:
如果您想了解详细信息,请查看这些教程 internationalization-tutorial-for-ios-2014
有一些在线脚本(例如localize.py)可以帮助您自动搜索所有代码并找出nslocalizedString函数并在localizableString文件中创建行.像这样.
"THIS_IS_MY_STRING"="THIS_IS_MY_STRING"
以后你只需要在那里写实际的字符串.:)
除了Leon的答案之外,您还可以通过使用扩展来摆脱对显式子类的需求:
extension UILabel {
@IBInspectable var localizableText: String? {
get { return text }
set(value) { text = NSLocalizedString(value!, comment: "") }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5642 次 |
| 最近记录: |