2017-12-26 34 views
0

私はアプリを開発していますが、デフォルトの言語はイタリア語で、strings.xmlファイルにすべてのテキストを配置しました。strings.xmlと翻訳を使って作業する

このアプリにはいくつかの人に関するセクションがあり、自分のデータベーステーブルを作成してテキストを保存しました。

電話機のロケールに基づいて翻訳されたコンテンツを取得するには、文字列IDを保存するだけですか?

今はブート時にDBを作成し、すべてのテキストを保存します。R.string.somethingだけを保存したいと思います。以下のような

何か:

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

このpossibileですか?
標準がありますか?

+2

私にとって、これは完全に正常に動作します。おそらくあなたのアプリケーションSharedPreferencesに言語を保存します。 "it"や "en"のようなもの...そしてそれに応じてアプリのロケールを切り替えます。 –

答えて

0

あなただけのデータベースに整数として、あなたのリソースIDを格納することができますし、次のように私は私のデータベースクラスを作成したデータベースから整数型を取得することができますし、

textView.setText(integerResourceIdFromDatabase); 

ようTextViewのためにそのint型を設定することができます。

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()); 

あなたは、いくつかのstrings.xmlリソースファイル内のすべての翻訳を提供する必要があり

+0

私はあなたが言ったように 'R.string.person_bio'を整数として格納するdb insertを持っていますが、テキストの代わりに実際の整数を取得します –

+0

okk待ちますよ。 –

+0

@ChristianGiupponi私はあなただと思いますあなたのintをあなたのコードのどこかでStringにキャストしたかもしれません –

-1

あなたはロケールに基づいて翻訳されたテキストのいくつかのstrings.xmlリソースファイルを作成することができ、リンク

の下に参照してください。

アプリケーションのデフォルト言語が英語であるとします。アプリケーションのすべてのテキストをフランス語にローカライズし、アプリケーションのほとんどのテキスト(アプリケーションのタイトルを除くすべて)を日本語にローカライズするとします。この場合、あなたは3つの代替のstrings.xmlファイルを作成することができ、ロケール固有のリソースディレクトリに格納されている各:

  • のres /値/の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ファイルからtitleを読み込みます。
  • デバイスが日本語に設定されている場合、Androidはres/values-ja/strings.xmlファイルでtitleを探します。しかし、そのような文字列がそのファイルに含まれていないので、Androidはデフォルトに戻り、res/values/strings.xmlファイルから英語のタイトルを読み込みます。
0

文字列にすべての文字列を格納する場合は、データベース にデータベースを保存する必要はありません。その

値-PT、 値-ES、 値-BR、 、これまで何をしたいのような値のフォルダと名前のすべての言語用のXMLを作成して、そこからテキストをXMLと示しました。 は、各ファイルに尊重された文字列を置くだけです。そして、ユーザーが言語アプリを変更すると、それが存在する場合、尊重された言語ファイルから値を取得します。

0

イープルは、/ 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> 

は今、このプロジェクトは、デバイスの言語に応じた文字列を取ります。

+0

ありがとうございますが、私は 'person.getBio()'のようなものがあり、そのテキストの正しい言語を取得する必要があります。私はDBに複数の人がいるので、ハードコードされた文字列はありません。 –

関連する問題