使用Custom locale in android时,目录名称为
res/drawable-en-rUS
res/values-fr-rCA
其中-r指定说出该语言的区域(国家/地区)。
当还指定区域变体时呢?我的客户要求我们支持英语,中文和三(3)种日语。 (*)
我使用customized Application class设置了区域设置,并且代码如下:
locale = new Locale(lang, country);
Locale.setDefault(locale);
config.locale = locale;
mContext.getResources().updateConfiguration(config,mContext.getResources().getDisplayMetrics());
并且正在使用这样命名的资源目录:
/res/drawable-en
/res/drawable-cx
/res/drawable-ja
/res/drawable-ja-rHI
/res/drawable-ja-rFU
这个有效;最下面的两个条目是黑客。我正在使用虚构的国家/地区名称作为区域,当我实际需要它们像
时/res/drawable-ja-rJP-vHI
/res/drawable-ja-rJP-vFU
指定日本境内的变体。
还有另一个Locale()
构造函数,即
Locale(String language, String country, String variant);
如果我将其用作
locale = new Locale("ja", "JP", "hi");
如何指定资源目录,包括语言,区域和变体?
我在Providing Alternative Application Resources上找到的最佳资源并未显示如何执行此操作。
(*)他们要求这些日语版本:
答案 0 :(得分:2)
此问题是您无法将变体指定为资源文件夹。据我所知,variant
字符串的唯一目的是能够将其显示给用户。老实说,我认为你的'黑客'可能是最好的解决方法。
即使有可能采用其他方式,您使用的变体无论如何都不是区域变体,只是编写相同内容的不同方式。 (就个人而言,我是混合的忠实粉丝,但我仍然只知道大约300个汉字,所以这有时会让我陷入困境......但它足以绕过去!)
答案 1 :(得分:1)
Locale Variant的目的是提供其他选项,例如不同的排序或不同的语言变体(挪威语就是这种情况)。这不是为您使用它而设计的。
当然,如果我有像你这样的要求,我会尝试加载整个不同的资源集(保留Locale)。但是,这远不是一件容易的事。当然,维护将是一场噩梦。