我对iOS开发很陌生,我问自己是否有可能使用我的" Localizable.strings"直接进入故事板。 例如,在Android中,您可以从XML文件中执行此操作:
android:text="@string/notConnected"
我知道你可以制作故事板的本地化版本,但是拥有不同的字符串文件和不同的故事板对我来说看起来很难看。
那么是否可以只使用字符串文件并在故事板中使用我需要的内容?最好不要从代码中设置它?
这可能吗?是否有合法的方法从Android中调用字符串?
答案 0 :(得分:13)
我认为能够在故事板中本地化String
具有显着的优势。我不同意@elk_cloner,因为每个IBOutlet
挂起UILabel
s是前进的方向。
让它工作的一种方法是在UILabel
子类上使用@IBInspectable属性:
class LocalisableLabel: UILabel {
@IBInspectable var localisedKey: String? {
didSet {
guard let key = localisedKey else { return }
text = NSLocalizedString(key, comment: "")
}
}
}
在故事板中设置自定义类:
在属性检查器中,将显示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()
}
}
}
}
答案 1 :(得分:5)
根据您的要求,这是不可能的,但
您不需要不同的故事板进行本地化
假设您要本地化标签字符串。
mylabel.text = nsLocalizedString(" THIS_IS_MY_STRING",nil);
当然,在你的本地化文件中会有一行。你必须有不同语言的不同文件。假设你有一个英文文件,必须有一行。
" THIS_IS_MY_STRING" ="这是我的字符串&#34 ;;
编译应用程序时,该功能将使用映射来本地化您的应用程序。
编辑:
如果您想了解详细信息,请查看这些教程 internationalization-tutorial-for-ios-2014
有一些在线脚本(例如localize.py)可以帮助您自动搜索所有代码并找出nslocalizedString函数并在localizableString文件中创建行。像这样。
" THIS_IS_MY_STRING" =" THIS_IS_MY_STRING"
以后你只需在那里写实际的字符串。 :)
答案 2 :(得分:2)
除了Leon's answer外,您还可以使用扩展名来摆脱对显式子类的需求:
<ion-card *ngFor="let item of menu">
<img [src]="item.img" *ngIf="menu.length <= 6"/>
<div class="card-title">{{item.text}}</div>
</ion-card>
答案 3 :(得分:2)
制作一个按钮类,并将 @IBInspectable 属性设置为按钮类
class Button: UIButton {
@IBInspectable public var referenceText: String = "" {
didSet {
self.setTitle(NSLocalizedString(referenceText, comment: ""), for: .normal)
}
}
}
按钮文字将为“登录”
答案 4 :(得分:0)