- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
Localiz-6ren">
我已经构建了一个应用程序,现在是时候将它翻译成不同的语言了。但是我认为我已经本地化的一些标签不会以具有不同值的不同语言显示。
图片一:首先,我在里面添加了瑞典语
"Project -> Localizations"
然后我进入“LaunchScreen.storyboard”并编辑了文件。这个:
但是当我在模拟器上运行它时,文本没有得到翻译。它仍然是相同的文本,我不知道如何解决它。你?请随时帮助我,我将不胜感激!
因此,我不确定是否必须添加一些代码或其他任何内容才能使这项工作正常进行,但我遵循了指南,而他们没有。这就是我如此困惑的原因之一。提前致谢!
不喜欢之前:至少给我一个不喜欢的理由,以便我以后改进!
最佳答案
由于 Storyboard 元素的 id 会发生变化,并且无法将它们用作本地化“键值”对中的“键”,所以在本地化 Storyboard (UI) 元素时,一个更好的解决方案是提供自定义 User Define属性
定义为要用于该 UIView
的 Locale Key
。
然后您可以在 Storyboard Attribute Inspector
中为特定的 UI View 定义一个输入字段,该输入字段将填充 Localizable 中定义的
文件(一个用于英语,一个用于瑞典语,两者应具有相同的键但具有不同的值 - 英语中的值将具有英文翻译,而瑞典语中则相反。localized key
。 strings
1) 例如,因为你想本地化一个 UI View UILabel
而不是你可以将它放在一个 swift 文件中 Localizable.swift
例如(代码使得成为可能:
import UIKit
// MARK: Localizable
public protocol Localizable {
var localized: String { get }
}
extension String: Localizable {
public var localized: String {
return NSLocalizedString(self, comment: "")
}
}
// MARK: XIBLocalizable
public protocol XIBLocalizable {
var localeKey: String? { get set }
}
extension UILabel: XIBLocalizable {
@IBInspectable public var localeKey: String? {
get { return nil }
set(key) {
text = key?.localized
}
}
}
2) 您可以取消选中您的 Storyboard翻译
,这样您最终将拥有 1 个 Storyboard,而无需将 Storyboard复制为多个翻译版本。
3) 您现在可以创建一个包含您的 key 和翻译的 Localizable.strings
文件,并本地化
该文件以获得您的翻译(就像您对 Storyboard所做的那样) , 但不是将 Storyboard 本地化为多个翻译版本,而是本地化 Localizable.strings 文件(因此在用两种语言本地化后您会看到两个文件,一个名为 Localizable.strings (English)
和其他 Localizable.strings(瑞典语)
。
例如,您的 Localizable.strings(英文)
可能如下所示:
"main_page_title_label" = "Main Page Title in English";
例如,您的 Localizable.strings(瑞典语)
可能如下所示:
"main_page_title_label" = "Huvudsida Titel på engelska";
4) 现在转到您的LaunchScreen.storyboard
,您应该对其进行未本地化
,因此您只有一个版本,而不是示例图片中的两个版本(英语、瑞典语)。查找您要本地化的 UILabel,在 Attribute Inspector
下,您将看到一个名为 Locale Key
的新输入字段,您可以在此处输入值 main_page_title_label
。现在您刚刚在 Storyboard中本地化了一个 UILabel。
5) 要从模拟器中测试它,您必须在 Edit Scheme > Run > Options > Application Language
中更改语言,保存后,您现在可以在模拟器中运行该应用程序,它将模拟您的模拟器操作系统系统将设置为瑞典语,因此使用该键设置的标签将显示该键的瑞典语值。
支持更多 UI View (UIButton、UITextField、UISearchBar..)
如果您希望能够本地化更多的 UI View ,而不仅仅是 UILabel
类型的 UI View ,那么您可以向 Localizable.swift
文件添加更多支持。
如果您还希望能够本地化 Button 类型的 UI View ,您可以将其添加到Localizable.swift
:
extension UIButton: XIBLocalizable {
@IBInspectable public var localeKey: String? {
get { return nil }
set(key) {
setTitle(key?.localized, for: .normal)
}
}
}
要支持 Storyboard中 UITextField
和 UISearchBar
占位符文本的本地化,添加到您的 Localizable.swift
:
// MARK: Special protocol to localizaze UI's placeholder
public protocol UIPlaceholderXIBLocalizable {
var localePlaceholderKey: String? { get set }
}
extension UITextField: UIPlaceholderXIBLocalizable {
@IBInspectable public var localePlaceholderKey: String? {
get { return nil }
set(key) {
placeholder = key?.localized
}
}
}
extension UISearchBar: UIPlaceholderXIBLocalizable {
@IBInspectable public var localePlaceholderKey: String? {
get { return nil }
set(key) {
placeholder = key?.localized
}
}
}
关于ios - Storyboard中的标签没有采用正确的本地化值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55062448/
考虑以下代码: template struct list { template list(Args...) { static_assert(sizeof..
考虑以下代码: template struct list { template list(Args...) { static_assert(sizeof..
最近才开始学习"new"OpenGL(可编程而不是固定功能,我从 Nehe 教程中学到的),我想知道自从 OpenGL 4 发布以来学习 OpenGL 3 是否真的有用。 我问的原因是因为我想知道能够
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我想了解如何操作特征向量/矩阵。我想实现最小二乘高斯牛顿算法(因此我学习使用 Eigen 库)。我有一个 1x6 的参数 vector ,每次迭代都需要更新它们。现在,我只想弄清楚函数如何将 vect
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 5 年前。 Improv
我发现编写适用于Enums的静态方法非常困难。这是一个非常人为的示例,但假设您想要编写一个方法,该方法采用 Enum 常量并返回下一个声明的常量。我发现(大约一个小时后)你可以按如下方式进行。它可以工
我正在尝试编写一个函数,在某些条件下,将指向结构的指针更改为指向不同的结构。 我的限制是我想保留初始函数签名,该签名将指向指针(而不是特定结构类型)的通用指针作为参数。 这行不通: [nav] In
我正在尝试将 Keras 示例改编为 VAE https://blog.keras.io/building-autoencoders-in-keras.html 我修改了代码,使用有噪声的 mnist
自 JPA 2.0 以来,关系上有 orphanRemoval 属性,它极大地简化了父子关系的更新,并且与级联删除一起允许删除树的整个分支并轻松删除它。 但是,也有一些情况可能被标记为“收养”,即您将
我正在尝试编写一个类,它能够在以后及时调用不带参数的 lambda。我期待 C++17 类模板参数推导以避免需要工厂函数。但是,尝试在不指定类型的情况下实例化对象会失败。我可以很好地使用工厂功能,但我
我怎样才能避免并非所有控制路径都在此处返回容器的事实: enum Type {Int, String}; Container containerFactory(Type
我开始学习 C++ 和 STL。 我有一个问题: 写一个函数模板palindrome,接受一个 vector 参数并返回true或false来检查 vector 是否是回文(12321是回文,1234
我一直在尝试获取一个条目值(代码中的 S1)以将其自身设置为一个值(_attributes 字典中的 STR),但我就是无法让它工作。我想让它成为一个最终的顶层循环,但我在这方面一步一步来,因为我是一
我想做同样的事情 How do I get the number of days between two dates in JavaScript? 但我想对此日期格式执行相同操作:2000-12-31
我想编写一个带有构造函数的 C++ 类,该构造函数将 auto_ptr 作为其参数,以便我可以将类实例从 auto_ptr 初始化为另一个实例: #include class A { public:
我需要一种方法,我可以在其中获取二维数组中的输入并以最快的方式之一对其进行逐行排序。我尝试使用 Insertion Sort 同时获取 Input 和 Sort it。我使用的第二件事是我单独为一行取
好的,我已经阅读了一些关于 IDisposable 最佳实践的文章,我想我基本上明白了(终于)。 我的问题与从 IDisposable 基类继承有关。我看到的所有示例都在子类中一遍又一遍地编写相同的代
定义类时,以下是否有效? T(const T&&) = default; 我正在阅读移动构造函数 here并且它解释了如何仍然可以隐式声明默认值: A class can have multiple
我想使用 LoadLibrary 开发一个插件系统。 我的问题是:我希望我的函数采用 const char* 而 LoadLibrary 采用 LPCTSTR。 我有一个聪明的想法来做(LPCSTR)
我是一名优秀的程序员,十分优秀!