白日放歌须纵酒,青春作伴好还乡。这篇文章主要讲述Android多语言支持:由于占位符计数不同导致的字符串格式问题相关的知识,希望能为你提供帮助。
我正在制作法语android应用程序,我正在努力支持英语。
我使用“占位符”来格式化我的字符串,因此我可以将它们调整为男性和女性用户。例如,我的strings.xml
文件中的这个字符串:
<
string name="encouraging_comment">
Les %1$s sont compliqué%2$ss...
<
/string>
将成为“男人复杂”或“女人复杂”。
我的问题就在于此。字符串翻译,如下......
<
string name="encouraging_comment">
%1$s are complicated...
<
/string>
......当法语等价物需要两个时,只需要一个占位符。
我该如何处理这个问题?提前致谢。
答案只需从英语模板字符串中省略第二个占位符,并在渲染字符串时使用空字符串作为第二个参数(或任何其他字符串,无关紧要,值将被忽略):
XML:
<
string name="encouraging_comment">
%1$s are complicated...
<
/string>
java的:
getString(R.string.encouraging_comment, "women", "");
getString(R.string.encouraging_comment, "men", "");
这是有效的,因为如果参数多于占位符,则不是错误,只有参数少于占位符。
我假设你会有一些表或映射,你可以根据语言和性别查找占位符值。在伪代码中:
(French,Female) ->
("femmes", "e")
(French,Male)->
("hommes", "" )
(English, Female) ->
("women","" )
(English, Male)->
("men","" )
另一答案AFAIK,您可以通过添加检查代码来完成此操作
String result;
if ( Locale.getDefault().getLanguage().equals("en")){// examples "en", "fr", "sp"
result= getString(R.string.encouraging_comment, myString);
}
else{
result= getString(R.string.encouraging_comment, myString, myStringTwo);
}
textView.setText(result);
希望这可以帮助你:)
另一答案一种方法是在你的
locale
中创建一个字符串strings.xml
对于English Strings.xml
<
string name="locale">
En<
/string>
对于French Strings.xml
<
string name="locale">
Fr<
/string>
【Android多语言支持(由于占位符计数不同导致的字符串格式问题)】然后设置字符串
switch (getString(R.string.locale)) {
case "Fr":
//set your string for French
break;
case "En":
//set your string for English
break;
}
推荐阅读
- Android(如何在build.gradle中获取资源字符串以支持多种语言的多种口味())
- Android Wear没有拿起本地化版本
- 本地化不适用于App的初始加载
- timeago相当于Android
- 在Android和Raspberry Pi 3 Linux之间建立Wifi-Direct连接
- 通过Android应用程序向Apache服务器发送请求,摆脱无限循环
- MediaPlayer无法在Android Things Raspberry Pi 3上运行
- 在Android Things上扫描Wifi网络会返回空列表
- 如何在Raspberry Pi 3模块上启用I2C(与Android Things一起使用作为操作系统)