使用strings.xml和翻译

时间:2017-12-26 09:40:55

标签: android localization

我正在开发一个应用,现在默认语言是意大利语,我已将所有文本放在strings.xml文件中。

在这个应用程序中有一个关于某些人的部分,我创建了自己的数据库表并存储了文本。

如何保存字符串ID以根据手机区域设置获取翻译的内容?

现在在启动时我填充数据库并保存所有文本,我只想保存R.string.something

类似的东西:

String resource = mydb.get("description"); // This shoul be the R.string
textview.setText(resource); // Teanslated content

这可能吗?
这有标准吗?

4 个答案:

答案 0 :(得分:0)

您不需要将其存储在数据库中 如果你将所有的字符串存储在string.xml上并从那里显示文本,那么为values文件夹中的每种语言创建xml并命名为

  

values-pt,   价值观,   价值观,   什么你想要的。   现在只需将受尊重的字符串放在每个文件中。然后当用户更改其语言应用程序时,如果存在,还将从受尊重的语言文件中获取值。

答案 1 :(得分:0)

Ypu必须在/ res下创建多语言资源目录。在你的琴弦上使用限定词我认为fr是法国人。因此,如果您有一个名为values-fr的资源文件夹,那么手机上有法语的任何人都会获得位于该文件夹中的法语字符串文件,其他人都会在values文件夹中获取该字符串文件。

资源结构如下所示

Project/
    res/
       values/
           strings.xml
       values-es/
           strings.xml
       values-fr/
           strings.xml

这是法国语言的字符串:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">application</string>
    <string name="hello_world">ask le monde !</string>
</resources>

现在,每当您更改设备语言时,项目将根据设备语言采用字符串。

答案 2 :(得分:0)

您可以将资源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;
}

}

并在像这样的主要活动中使用它

dbHelper.insertId(R.string.my_string);

获取数据

textView.setText(dbHelper.getStringId()); 

这对我来说非常好

答案 3 :(得分:-1)

请参阅以下链接

您可以根据区域设置创建多个strings.xml资源文件的翻译文本。

  

假设您的应用程序的默认语言是英语。假设您希望将应用程序中的所有文本本地化为法语,并将应用程序中的大部分文本(除应用程序标题之外的所有内容)本地化为日语。在这种情况下,您可以创建三个备用strings.xml文件,每个文件都存储在特定于语言环境的资源目录中:

     
      
  • RES /值/ strings.xml中   包含应用程序使用的所有字符串的英文文本,包括名为title的字符串的文本。
  •   
  • RES /值-FR / strings.xml中   包含所有字符串的法语文本,包括标题。
  •   
  • RES /值-JA / strings.xml中   包含除标题以外的所有字符串的日语文本。
  •   

如果你的基于Java的代码引用了R.string.title,那么这是在运行时发生的事情:

  • 如果设备设置为法语以外的任何语言,Android会从res / values / strings.xml文件加载标题。
  • 如果设备设置为法语,则Android会从res / values-fr / strings.xml文件加载标题。
  • 请注意,如果设备设置为日语,Android会在res / values-ja / strings.xml文件中查找标题。但由于该文件中不包含此类字符串,因此Android会回退到默认值,并从res / values / strings.xml文件中加载英文标题。