以编程方式将应用程序语言环境设置为pt_BR

15

我有一个应用程序,支持葡萄牙语,包括葡萄牙和巴西地区。我创建了一个values-pt文件夹(包含葡萄牙翻译),以及一个values-pt-rBR文件夹(包含巴西翻译)。我尝试将应用程序语言设置为葡萄牙语(葡萄牙),应用程序语言会正确更改。但是当我将其设置为葡萄牙语(巴西)时,它无法正常工作。我尝试将手机默认语言更改为葡萄牙语(巴西),但仍然不起作用。在这两种情况下(程序和系统),对于葡萄牙语(葡萄牙),都可以正常工作。有人知道问题出在哪里吗?代码如下:

Locale locale = new Locale(strLocale);
Locale.setDefault(locale);

config.locale = locale;
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());

并且strLocale被设置为"pt"或"pt_BR",分别用于葡萄牙和巴西语言。


另一种简单的方法是使用Locale.forLanguageTag("pt-BR")。更多详情请参考https://docs.oracle.com/javase/tutorial/i18n/locale/matching.html。 - Swapnil Kadam
2个回答

39
我假设你的目标是 Android 操作系统 > 2.2,因为安卓从 2.3 版本开始支持两种葡萄牙语言。
我在模拟器上进行了测试,通过更改语言和键盘并仅有一个字符串不同(app_name),它出现在应用程序标题中,并且可以正常工作。

唯一的区别是我将葡萄牙地区命名为values-pt-rPT,而不是values-pt。
我没有进行即时重新本地化的测试,但我认为它也可以正常工作。
我认为当你使用地区时,必须为每种语言环境指定一个地区(例如 fr-rFR 适用于法国,而 fr-rCA 适用于加拿大),不能使用默认设置(在你的情况下是 pt,或在第二个示例中是 fr)。

这个链接更深入地说明了整个过程。

[编辑]

在使用代码创建新的区域设置时,请尝试:

final Locale myLocale = new Locale("pt", "PT");
final Locale myLocale = new Locale("pt", "BR");

这是来自参考网站的另一页。


1
我已经尝试了您建议的方法,但问题似乎是我的手机将当前选择的语言环境报告为“pt”,无论我选择葡萄牙语(葡萄牙)还是葡萄牙语(巴西)。我的手机有什么问题吗? - a.p.
不是。这是安卓2.3 +吗?您如何设置区域设置(可以用不同的方式完成-对于我的需求,加拿大法语与法国法语相同,奥地利德语与德国德语相同-我只使用默认语言-在您的情况下,pt)? - Phantômaxx
我的手机运行的是Android 4.1.2系统。它为葡萄牙和巴西都提供了pt。然而,我最大的问题是语句locale = new Locale("pt", "PT")似乎也不起作用。我将语言环境从cod设置为pt“PT”,我有文件夹values-pt-rPT和values-pt-rBR,但应用程序没有改变。如果我有一个values-pt文件夹并将语言环境更改为new Locale("pt"),它就可以工作。我还有什么遗漏的吗? - a.p.
以上内容需要进行更正,使用Locale.getDefault().toString()返回正确的语言环境字符串,例如pt_PT或者pt_BR。问题仍然是如何在程序中设置语言环境。有其他想法吗? - a.p.
1
经过进一步测试,按照您建议的设置区域语言,即 new Locale("pt", "BR") 或 PT(葡萄牙)解决了问题。感谢您的帮助! - a.p.
显示剩余3条评论

0
Locale.setDefault(new Locale("pt", "BR"));

2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community
这实际上就是另一个答案所说的。 - Wai Ha Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接