我正在工作一个Android
应用程序,并希望将其翻译成波斯语。 项目中的所有String
值都保存到资源XML
文件中。 一些String
值用于布局文件和一些类(R.String)。在Android
中使用波斯语文本时,必须重新整形以正确显示。android重塑所有资源文件字符串
我想重塑所有资源String
值而不调用每个String
值的重塑方法。
任何人都可以解释我如何做到这一点?
一些想法:
覆盖String类
覆盖的getResource类
我正在工作一个Android
应用程序,并希望将其翻译成波斯语。 项目中的所有String
值都保存到资源XML
文件中。 一些String
值用于布局文件和一些类(R.String)。在Android
中使用波斯语文本时,必须重新整形以正确显示。android重塑所有资源文件字符串
我想重塑所有资源String
值而不调用每个String
值的重塑方法。
任何人都可以解释我如何做到这一点?
一些想法:
覆盖String类
覆盖的getResource类
Android
已经提供的功能(well documented)有一个多语言的应用程序。与其替换您的文本并为每种语言使用您的应用程序的整体版本,它更好地使用框架功能。在这种情况下,应用程序会根据设备区域设置从您提供的可用语言中选择合适的语言。
所以基本上你将通过创建所需的目录结构(上面的链接)开始:
MyProject/
res/
values/
strings.xml
values-fa/
strings.xml
,然后你在String
值填进文件,如:
英语(默认语言环境), /values/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">My Application</string>
<string name="hello_world">Hello World!</string>
</resources>
波斯,/values-fa/strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">...</string>
<string name="hello_world">...</string>
</resources>
(报价,从上面的链接适配)
解reshape farsi语言
的重塑函数具有用于每波斯语String
值,因此设置字符串中的XML
布局是不可能(AFAIK),因此以下提议假设所有String
值都以编程方式设置。
使用全局静态包装函数#1
public static final String getLocalizedString(int resId) {
if(Locale.getDefault().toString().equals("fa_IR")) {
return PersianReshape.reshape(getResources().getString(resId));
}else{
return getResources().getString(resId);
}
现在,您可以使用此功能加载String
(你必须改变每种情况),或者重写例如getRessource方法。我个人更喜欢使用静态函数,而不是因为关于其他类型的负载的资源比String
,副作用等
创建具有压倒一切的setText(定制类其他可能出现的问题压倒一切)每个使用的UI组件#2
另一种可能性是创建自定义的ui小部件,在显示时调用PersianReshape.reshape()
。例如。为EditText
:
class CustomTextField extends EditText {
@Override
public void setText(String text) {
super.setText(PersianReshape.reshape(text));
}
}
[...]
CustomTextField myTextBox = new CustomTextField();
myTextBox.setText("....");
感谢的Alex,项目具有价值发资源目录,但问题reshaping.reshape方法将调用每一个使用波斯串时间。 – Micle
我不确定我是否理解你的问题。你使用类似String hello = getResources()。getString(R.string.hello_world); 得到一个字符串,它总是在所需的语言中,不是吗? – alex
是的,PersianReshape.reshape(getResources()。getString(R.string.hello_world)); PersianReshape.reshape每次以波斯语字符串调用。 – Micle