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
这可能吗?

这有标准吗?

请参考下面的链接

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

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

  • res/values/strings.xml 包含应用程序使用的所有字符串的英文文本,包括名为title的字符串的文本
  • res/values fr/strings.xml 包含所有字符串的法文文本,包括标题
  • res/values 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文件中加载英文标题

    • 您不需要将其存储在数据库中 如果将所有字符串存储在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转换为代码中的某个字符串