- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我主要是为其他新手写这篇文章,并在几年后当我忘记自己做了什么时提醒自己
我正在构建的应用程序中有一长串本地化字符串。我真的很讨厌缺乏可读性,因为我通过一大堆语句像
[_myUILabelObject setText:NSLocalizedStringFromTable(_myString, applicationLanguage,nil)]
然后我需要另一个不同的 UIButtons 和 UITextView 等等。必须有更好的方法。我想要的是类似
[_myUILabelObject translateMe:@"This text");
最佳答案
这就是我所做的:
我为每个对象创建了一堆类扩展(技术上的类别):UIButton、UILabel、UITextView……任何我需要的。
每个都有一个简单的 .h 文件,简单地声明扩展与主类相关。这是我的 UITextField 的 translateMe 示例:
@interface UITextField (translateMe)
- (void) translateMe: (NSString *) usingString;
@end
第一行告诉编译器 translateMe 将成为 UITextField 的扩展。
第二行告诉编译器 translateMe 期望成为 UITextField 的一个方法,它接收一个我称为 usingString 的 NSString。
然后在 .m 实现文件中,我这样做了:
extern NSString *applicationLanguage;
- (void) translateMe: (NSString *) string {
[self setText:NSLocalizedStringFromTable(string, applicationLanguage,nil)];
[self sizeToFit];
}
applicationLanguage 字符串是我根据用户选择的语言在别处设置的字符串,它本质上是 .strings 文件的名称。
此处的其余代码仅包含我希望在 ViewController 代码中避免的所有繁琐编码。
现在这里的神奇之处在于,您可以为 ViewController 中的每个对象创建类似的 .h 和 .m 文件组合。如果您调用了所有方法 translateMe,那么您在编码时就不必担心实际调用的是哪个对象。结果是你得到的东西看起来很简单,如下所示:
[_standardDemoPlanTitle translateMe: @"Standard Demo Plan"];
[_linkSampleDemoVideoButton translateMe: @"Link to sample demo"];
[_linkCustomerPresentationButton translateMe: @"Link to customer presentation"];
[_personalNotesTitle translateMe: @"Your Personal Notes"];
[_theSaveButton translateMe: @"Save"];
[_emailPlanButton translateMe: @"Email this plan to a colleague"];
请注意,有些是按钮,有些是标签(标题)这一事实根本不重要。
作为一个额外的捷径,我从另一篇文章中了解到,也可以用简短的方式处理长文本部分。
代替:
[_longTextRequiredByLawyers translateMe: @"blah blah blah blah blah forever..."];
我能做的是为实现文件中的文本放入一个短句柄,并将较长的文本放入 .strings 文件中。这是一个例子:
[longTextRequiredByLawyers translateMe: @"#lawyerText"];
顺便说一下,#-sign 不是必需的,但我在整个 .m 文件中都使用它作为个人提醒,这样我就知道要插入的内容不一定与界面生成器。
然后我的 english.strings 文件包含如下内容:
"#lawyerText" = "When in the course of human events it becomes necessary for one people to dissolve the bonds which have connected them with another and to assume among the powers of the earth the separate and equal station to which the laws of God...";
我的 spanish.strings 文件有翻译:
"#lawyerText" = "En México no hay abogados, entonces el texto es mas corto.";
您可以对阿尔巴尼亚语和克林贡语做同样的事情。
因此,关键技巧(或此处的良好编程思想):
有一件事我希望我已经弄明白了:
我现在有一长串 .h 文件,我现在必须将这些文件 #include 放在我所有 ViewController .m 文件的顶部。我希望我可以有一个 .h 文件,#includes 所有 translateMe .h 文件...有点像嵌套的 .h。
如果有一个 .h 文件不是很好吗,也许 allMyTranslates.h 里面有上面的列表,然后我只在我编写的代码中包含 allMyTranslates.h。
我最终会替换:
#include "UIButton+translateMe.h"
#include "UITextView+translateMe.h"
#include "UILabel+translateMe.h"
#include "UIButton+translateMe.h"
#include and so on
有了这个
#include "allMyTranslateHeaders.h"
好吧,你去吧......新手的一些笔记......当然所有的专家都提供了帮助,但每隔一段时间我们就需要这样的笔记来帮助我们度过难关!
关于ios - 一种使 Xcode 中的 localizedStrings 代码更具可读性的简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23736653/
我的按钮有问题。该按钮是登录按钮。当我在输入凭据后单击回车时,将触发查看凭据是否正确的方法。这没有任何问题。 但还应该发生的是,在检查这些凭据是否正确之后,登录和注册按钮应该会被删除,同时会出现一个新
因此,我尝试以 Angular 显示多个 View ,以帮助解决我正在构建的网站中遇到的页脚问题。我想确保我一直在阅读和尝试模仿的内容是有意义的。这就是我到目前为止所拥有的。 index.html
我正在尝试创建可调整大小的 div 容器,而且它们是可拖动的。 我使用了 Angular Material 拖放和 angular resizable element 这是解决方法 https://s
我正在尝试创建可调整大小的 div 容器,而且它们是可拖动的。 我使用了 Angular Material 拖放和 angular resizable element 这是解决方法 https://s
我是一名优秀的程序员,十分优秀!