我想动态地在我的应用程序中应用本地化,因此可以在java文件中定义字符串并将该字符串提取到我们的布局xml文件,即我们使用@ string / anystringname将此文件中的字符串替换为我们的布局文件@somestring定义为java文件????
答案 0 :(得分:4)
基本上,没有。
您无法动态操作资源文件。 您需要自己实现此类功能。
以下是一个例子:
english.json
{
"hello": "Hello"
}
french.json
{
"hello": "Bonjour"
}
public class StringManager {
private static StringManager sInstance = null;
private static String sDefaultLanguageCode = "en";
private Map<String, JSONObject> mLanguageMap = new ArrayMap<>();
private StringManager() {
}
public static StringManager getInstance() {
if (sInstance == null) {
synchronized (StringManager.class) {
if (sInstance == null)
sInstance = new StringManager();
}
}
return sInstance;
}
public static void setDefaultLanguageCode(String languageCode) {
sDefaultLanguageCode = languageCode;
}
public void addLanguage(String languageCode, JSONObject json) {
mLanguageMap.put(languageCode, json);
}
public String getString(String key) {
return mLanguageMap.get(mDefaultLanguageCode).getString(key);
}
public String getString(String languageCode, String key) {
return mLanguageMap.get(languageCode).getString(key);
}
}
public class SomeActivity extends Activity {
...
public void initStringResources() {
// assume englishJsonObject is created from english.json
StringManager.getInstance().addLanguage("en", englishJsonObject);
StringManager.getInstance().addLanguage("fr", frenchJsonObject);
StringManager.setDefaultLanguageCode("fr");
}
public void useSomeString() {
String helloString = StringManager.getInstance().getString("hello");
// helloString will be "Bonjour"
// and you can get specific language string
String englishHelloString = StringManager.getInstance().getString("en", "hello");
}
// this may be called from Button or other UI component
public void onLanguageChanged(String languageCode) {
StringManager.setDefaultLanguageCode(languageCode);
// and update UI components that display localized strings
}
}
答案 1 :(得分:0)
这是不可能的。但是,可以在运行时更改应用程序的语言。这允许您在strings.xml之间切换不同的语言。 我使用的库是Android localization library 您的所有活动都必须扩展扩展AppCompatActivity的LocalizationActivity。你只需要打电话 setLanguage(&#34;恩&#34); 要更改您的应用语言,请使用其他strings.xml
在this thread中,您可以阅读更多可能的解决方案。
答案 2 :(得分:-2)
<TextView
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/tv"
/>
<string name="tv">old text</string>//old text
final TextView textView = (TextView) findViewById(R.id.rate);
textView.setText("new text");//new text