Android 使用strings.xml和翻译
我正在开发一个应用程序,现在默认语言是意大利语,我已经将所有文本放在Android 使用strings.xml和翻译,android,localization,Android,Localization,我正在开发一个应用程序,现在默认语言是意大利语,我已经将所有文本放在strings.xml文件中 在这个应用程序中有一个关于一些人的部分,我创建了自己的数据库表并存储了文本 我如何保存字符串id以根据电话区域设置获取翻译的内容 现在在启动时,我填充数据库并保存所有文本,我只想保存R.string.something 比如: String resource = mydb.get("description"); // This shoul be the R.string textview.setTe
strings.xml
文件中
在这个应用程序中有一个关于一些人的部分,我创建了自己的数据库表并存储了文本
我如何保存字符串id以根据电话区域设置获取翻译的内容
现在在启动时,我填充数据库并保存所有文本,我只想保存R.string.something
比如:
String resource = mydb.get("description"); // This shoul be the R.string
textview.setText(resource); // Teanslated content
这可能吗?这有标准吗?请参考下面的链接
- res/values/strings.xml 包含应用程序使用的所有字符串的英文文本,包括名为title的字符串的文本
- res/values fr/strings.xml 包含所有字符串的法文文本,包括标题
- res/values ja/strings.xml 包含除标题以外的所有字符串的日语文本
- 如果设备设置为法语以外的任何语言,Android将从res/values/strings.xml文件加载标题
- 如果设备设置为法语,Android将从res/values fr/strings.xml文件加载标题
- 请注意,如果设备设置为日语,Android将在res/values ja/strings.xml文件中查找标题。但由于该文件中不包含此类字符串,Android会返回默认设置,并从res/values/strings.xml文件中加载英文标题
- 您不需要将其存储在数据库中
如果将所有字符串存储在string.xml上,并从中显示文本,则在values文件夹和类似名称上为每种语言创建xml
价值观,
价值观,
价值观br,
不管你想要什么。
现在只需将受尊重的字符串放入每个文件中。然后,当用户更改其语言时,应用程序还将从受尊重的语言文件(如果存在)中获取值
Ypu必须在in/res下创建多语言资源目录。在字符串上使用限定符我相信fr是用于法国的。因此,如果您有一个名为values fr的资源文件夹,那么任何手机上有法语的人都将获得位于该文件夹中的法语字符串文件,其他人将获得values文件夹中的字符串文件 资源结构如下所示
Project/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
dbHelper.insertId(R.string.my_string);
以下是法语的字符串:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">application</string>
<string name="hello_world">ask le monde !</string>
</resources>
应用
问问《世界报》!
现在,无论何时更改设备语言,project都将根据设备语言获取字符串。您可以将资源id作为整数存储在数据库中,并可以从数据库中获取整数类型,还可以将该int设置为textview
textView.setText(integerResourceIdFromDatabase);
我创建了数据库类,如下所示:
package com.demo.sqlitedemo.databasehelper;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DbHelper extends SQLiteOpenHelper {
private static String DATABASE_NAME = "Demo_db";
private static int VERSION = 1;
private static final String TABLE_STRING_IDS = "string_ids";
private static final String STRING_ID = "string_id";
private static final String STRING_TABLE_CREATE = "create table "
+ TABLE_STRING_IDS + "( " + STRING_ID
+ " integer primary key );";
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(STRING_TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_STRING_IDS);
onCreate(db);
}
public void insertId(int stringId) {
SQLiteDatabase database = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(STRING_ID, stringId);
database.insert(TABLE_STRING_IDS, "", values);
database.close();
}
public int getStringId() {
SQLiteDatabase database = getReadableDatabase();
Cursor cursor = database.query(TABLE_STRING_IDS, new String[]{STRING_ID}
, null, null, null, null, null);
cursor.moveToFirst();
int id = cursor.getInt(cursor.getColumnIndex(STRING_ID));
database.close();
return id;
}
}
在这样的主要活动中使用它
Project/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
dbHelper.insertId(R.string.my_string);
获取数据
textView.setText(dbHelper.getStringId());
这对我来说非常好您应该在几个strings.xml资源文件中提供所有翻译。然后可能会将语言保存在应用程序SharedReferences中。类似“it”或“en”或。。。并相应地切换应用程序的区域设置。谢谢,但我有类似的内容:
person.getBio()
,我需要为该文本获取正确的语言。我没有硬编码字符串,因为我的DB中有多个人。我有一个DB insert,它获取R.string.person\u bio
存储为整数,如您所说,但使用setText,我获取的是实际整数,而不是text@ChristianGiupponi我认为您可能已经将int转换为代码中的某个字符串