已经搜索过,但没有找到解决方案:
基本上,我有一个Localizable.strings设置,我在我的代码中使用。但是,如果我能以某种方式在我的XIB中引用这些值,那将是非常可爱的,这样我就可以避免每种语言创建一个烦人的XIB ......
这可能吗?
答案 0 :(得分:16)
您可以实现UILabel的子类,并在从nib初始化时自动提取本地化值。 在XIB中,您只需设置令牌(或英文文本,如果您愿意),并让UILabel从此值中提取本地化文本。
答案 1 :(得分:9)
我向你展示了很棒的方式
<强> 1。创建UILabel的子类
class LozalizedLabel : UILabel {
@IBInspectable var keyValue: String {
get {
return self.text!
}
set(value) {
self.text = NSLocalizedString(value, comment: "")
}
}
}
<强> 2。在IB
中将类设置为LocalizedLabel第3。直接在IB
中输入Localizable.strings中的密钥Voila,现在花更少的时间来创建无用的IBOutlets,只是为了让它成为可本地化的UILabel。
注意强> 这不会使本地化字符串显示在界面构建器中,而只是显示&#34;键&#34;。因此,在构建TextView时,请记住相应地设置约束
答案 2 :(得分:5)
无法直接使用Interface Builder从Localizable.strings
设置。
您可能想要翻译NIB的原因是因为每种语言的单词长度可能不同。因此允许您更改每种语言的笔尖布局。
您可以使用viewDidLoad
的{{1}}方法设置它们。
UIViewController
答案 3 :(得分:5)
NSLocalizedString
具有易于实施的优势。风险在于您可能忘记为新的Gui元素添加条目。
您可以使用itool
转储原始xib文件中的字符串,转换这些转储的字符串,然后将转换后的字符串加载到other-language-xib文件中。
与NSLocalizedString
相比,这样做有一些优势。
创建XIB时,将其设置为本地化(如前所述),然后针对此原始xib运行itool
以提取字符串。
将字符串文件转换为所需的语言,然后将转换加载到本地化的xib中。
如果你谷歌搜索ibtool --generate-strings-file
,你应该找到一些教程和示例。
语法应类似于:
#dump original xib to a $xibfile.strings file:
ibtool --generate-strings-file Resources/English.lproj/$xibfile.strings Resources/English.lproj/$xibfile.xib
# offline: translate the $xibfile.xib, place it into the correct lproj folder
# then: merge translated $xibfile.strings with original xib to create localized xib
ibtool --strings-file Resources/de.lproj/$xibfile.strings --write Resources/de.lproj/$xibfile.xib Resources/English.lproj/$xibfile.xib
Resources / English.lproj目录中的 $xibfile.strings
将包含原始(英语)字符串。已翻译的$xibfile.strings
必须位于相应的xx.lproj
目录中。
如果您将构建脚本添加到xcode,那么将在每次构建时调用转换的加载。
答案 4 :(得分:4)
IB无法使用Localizable.strings中的字符串,但还有另一个名为 Base Internationalization的选项。
简而言之:您可以为每种所需语言创建附加到xib / storyboard的单独.strings文件。在结果中,您将拥有xib,并为每种语言提供自己的翻译。因此它可以复制您拥有的一些值 Localizable.strings,但它比设置代码或复制xib文件更清晰。
答案 5 :(得分:1)
您可以在代码中执行此操作:
label.text = NSLocalizedString(@"key", @"comment");
但我不认为除了本地化整个笔尖之外,还有其他方法可以使用nib。我当然没有找到另一种方式。
答案 6 :(得分:0)
Apple支持的本地化.xib文件的方法。这允许您本地化每种语言/国家/地区的文本和布局。
答案 7 :(得分:0)
另一种方式,但有扩展名:
from selenium import webdriver
from selenium.webdriver.remote.webdriver import WebDriver
def add_credentials_moz(driver, target, username, password):
driver.execute("SET_CONTEXT", {"context": "chrome"})
driver.execute_script("""
let [target, username, password] = [...arguments];
let WebRequest = Cu.import('resource://gre/modules/WebRequest.jsm', {});
WebRequest.onAuthRequired.addListener(function listener(){
WebRequest.onAuthRequired.removeListener(listener);
return Promise.resolve({authCredentials: {username: username, password: password}});
}, {urls: new MatchPatternSet([target])}, ['blocking']);
""", target, username, password)
driver.execute("SET_CONTEXT", {"context": "content"})
WebDriver.add_credentials_moz = add_credentials_moz
driver = webdriver.Firefox()
driver.add_credentials_moz("https://httpbin.org/*", username="user", password="passwd")
driver.get("https://httpbin.org/")
driver.find_element_by_css_selector("[href='/basic-auth/user/passwd']")\
.click()
然后,您就可以直接从IB编写本地化密钥,它将在运行时进行本地化。
答案 8 :(得分:0)
这是我的版本。希望对您有所帮助。
flex-direction: row