From b823983199e6cb09fb2f0335f49b90ba0ca95bd3 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Mon, 12 Aug 2013 21:22:20 -0400 Subject: [PATCH] [Android] Multi-language support (or at least the basic foundation of it). Added an example translation (Japanese). So now the Android version can both display in English and Japanese, depending on what the Android device's system language is set to. Also did a tiny clean-up of InputConfigItem.java so that the parameters are slightly more descriptive. Now, to do a translation in [x] language, all you have to do is take the normal English strings.xml and translate the XML entries into said language, and simply make a folder in the /res/ sub-directory in the form of values-[region code]. IE) With the Japanese translation, it is in the folder /res/values-ja No configuration other than that is needed. After doing the above, the language should load fine on any device when set to that specific system language. By default, if a translation file does not exist for a given system language. The app will automatically fall back to using the English translation. This *should* be bug-free since I did check everything multiple times. But if any issues occur, please report them so that I can fix them. --- Source/Android/res/layout/prefs.xml | 16 ++-- Source/Android/res/values-ja/strings.xml | 83 +++++++++++++++++++ Source/Android/res/values/strings.xml | 75 +++++++++++++++++ .../dolphinemu/dolphinemu/AboutFragment.java | 7 +- .../dolphinemu/DolphinEmulator.java | 2 +- .../dolphinemu/dolphinemu/FolderBrowser.java | 16 ++-- .../dolphinemu/GameListActivity.java | 18 ++-- .../dolphinemu/GameListFragment.java | 6 +- .../dolphinemu/InputConfigFragment.java | 56 +++++++------ .../dolphinemu/InputConfigItem.java | 20 ++--- .../dolphinemu/dolphinemu/PrefsFragment.java | 22 ++--- 11 files changed, 244 insertions(+), 77 deletions(-) create mode 100644 Source/Android/res/values-ja/strings.xml diff --git a/Source/Android/res/layout/prefs.xml b/Source/Android/res/layout/prefs.xml index 34700f56b7..d8d8664a97 100644 --- a/Source/Android/res/layout/prefs.xml +++ b/Source/Android/res/layout/prefs.xml @@ -2,23 +2,23 @@ + android:summary="@string/on_off" + android:title="@string/dual_core" /> + android:summary="@string/video_backend_to_use" + android:title="@string/video_backend" /> \ No newline at end of file diff --git a/Source/Android/res/values-ja/strings.xml b/Source/Android/res/values-ja/strings.xml new file mode 100644 index 0000000000..329d464ccb --- /dev/null +++ b/Source/Android/res/values-ja/strings.xml @@ -0,0 +1,83 @@ + + + + + Dolphin Emulator + + + ナビゲーションウィンドウを開く + ナビゲーションウィンドウを閉じる + + + ビルドのバージョン: + サポートのOpenGL ES 3: + + + 現在のディレクトリ: + 親ディレクトリ + フォルダ + ファイルサイズ: + 圧縮ファイル形式はサポートされていません + + + ゲームリスト + フォルダの参照 + 設定 + ゲームパッド設定 + について + ファイルブラウザのロード + 設定のロード + ゲームパッド設定のロード + メニューについてのロード + + + クリックされたファイル: + + + 画面上のコントロールを描画 + Aボタン + Bボタン + スタートボタン + Xボタン + Yボタン + Zボタン + D-Pad: ↑ + D-Pad: ↓ + D-Pad: ← + D-Pad: → + コントロールスティック: ↑ + コントロールスティック: ↓ + コントロールスティック: ← + コントロールスティック: → + C-スティック: ↑ + C-スティック: ↓ + C-スティック: ← + C-スティック: → + 左のトリガー + 右のトリガー + + コントロールは画面上に描画されていない + コントロールは画面上に描画されています + %1$sを設定するにはボタンを押して + + + Interpreter + JIT64 Recompiler + JITIL Recompiler + JIT ARM Recompiler + CPUコア + CPU設定 + 使用するエミュレーションコア + デュアルコア + 有効/無効 + + ビデオ設定 + Software Renderer + ビデオレンダラ + 使用するビデオレンダラー + + + はい + いいえ + + diff --git a/Source/Android/res/values/strings.xml b/Source/Android/res/values/strings.xml index 40a14e3b4e..ea1e02297a 100644 --- a/Source/Android/res/values/strings.xml +++ b/Source/Android/res/values/strings.xml @@ -1,8 +1,83 @@ + Dolphin Emulator + + Open navigation drawer Close navigation drawer + + + Build Revision: + Supports OpenGL ES 3: + + + Current Dir: + Parent Directory + Folder + File Size: + Can not use compressed file types + + + Game List + Browse Folder + Settings + Gamepad Config + About + Loading up the browser + Loading up settings + Loading up gamepad config + Loading about menu + + + File clicked: + + + Draw on-screen controls + Button A + Button B + Button Start + Button X + Button Y + Button Z + D-Pad Up + D-Pad Down + D-Pad Left + D-Pad Right + Main Stick Up + Main Stick Down + Main Stick Left + Main Stick Right + C Stick Up + C Stick Down + C Stick Left + C Stick Right + Trigger L + Trigger R + + Not drawing on-screen controls + Drawing on-screen controls + Press button to configure %1$s + + + Interpreter + JIT64 Recompiler + JITIL Recompiler + JIT ARM Recompiler + CPU Core + CPU Settings + Emulation core to use + Dual Core + On/Off + + Video Settings + Software Renderer + Video Backend + Video backend to use + + + Yes + No diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java index 906736b039..4a7b636ed6 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java @@ -35,10 +35,13 @@ public class AboutFragment extends Fragment { Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.gamelist_listview, container, false); mMainList = (ListView) rootView.findViewById(R.id.gamelist); + + String yes = getString(R.string.yes); + String no = getString(R.string.no); List Input = new ArrayList(); - Input.add(new GameListItem(m_activity, "Build Revision", NativeLibrary.GetVersionString(), "", true)); - Input.add(new GameListItem(m_activity, "Supports OpenGL ES 3", PrefsFragment.SupportsGLES3() ? "Yes" : "No", "", true)); + Input.add(new GameListItem(m_activity, getString(R.string.build_revision), NativeLibrary.GetVersionString(), "", true)); + Input.add(new GameListItem(m_activity, getString(R.string.supports_gles3), PrefsFragment.SupportsGLES3() ? yes : no, "", true)); adapter = new FolderBrowserAdapter(m_activity, R.layout.folderbrowser, Input); mMainList.setAdapter(adapter); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java index 6cad8cb3bd..fefb13ec14 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java @@ -38,7 +38,7 @@ public class DolphinEmulator extends Activity out.close(); out = null; } catch(IOException e) { - Log.e("tag", "Failed to copy asset file: " + asset, e); + Log.e("DolphinEmulator", "Failed to copy asset file: " + asset, e); } } diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java index 9094486197..ee96f445ce 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java @@ -24,7 +24,7 @@ public class FolderBrowser extends Fragment { // Populates the FolderView with the given currDir's contents. private void Fill(File currDir) { - m_activity.setTitle("Current Dir: " + currDir.getName()); + m_activity.setTitle(getString(R.string.current_dir) + currDir.getName()); File[] dirs = currDir.listFiles(); Listdir = new ArrayList(); Listfls = new ArrayList(); @@ -44,17 +44,17 @@ public class FolderBrowser extends Fragment { { if(entry.isDirectory()) { - dir.add(new GameListItem(m_activity, entryName,"Folder",entry.getAbsolutePath(), true)); + dir.add(new GameListItem(m_activity, entryName, getString(R.string.folder), entry.getAbsolutePath(), true)); } else { if (validExts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.')))) { - fls.add(new GameListItem(m_activity, entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), true)); + fls.add(new GameListItem(m_activity, entryName,getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), true)); } else if (archiveExts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.')))) { - fls.add(new GameListItem(m_activity, entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), false)); + fls.add(new GameListItem(m_activity, entryName,getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), false)); } } } @@ -70,7 +70,7 @@ public class FolderBrowser extends Fragment { // Check for a parent directory to the one we're currently in. if (!currDir.getPath().equalsIgnoreCase("/")) - dir.add(0, new GameListItem(m_activity, "..", "Parent Directory", currDir.getParent(), true)); + dir.add(0, new GameListItem(m_activity, "..", getString(R.string.parent_directory), currDir.getParent(), true)); adapter = new FolderBrowserAdapter(m_activity, R.layout.folderbrowser, dir); mDrawerList = (ListView) rootView.findViewById(R.id.gamelist); @@ -95,16 +95,18 @@ public class FolderBrowser extends Fragment { public void onItemClick(AdapterView parent, View view, int position, long id) { GameListItem o = adapter.getItem(position); - if(o.getData().equalsIgnoreCase("folder") || o.getData().equalsIgnoreCase("parent directory")) + if(o.getData().equalsIgnoreCase(getString(R.string.folder)) || o.getData().equalsIgnoreCase(getString(R.string.parent_directory))) { currentDir = new File(o.getPath()); Fill(currentDir); } else + { if (o.isValid()) FolderSelected(); else - Toast.makeText(m_activity, "Can not use compressed file types.", Toast.LENGTH_LONG).show(); + Toast.makeText(m_activity, getString(R.string.cant_use_compressed_filetypes), Toast.LENGTH_LONG).show(); + } } }; diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java index 9a48de4d8b..845bf72bdd 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java @@ -52,11 +52,11 @@ public class GameListActivity extends Activity mDrawerList = (ListView) findViewById(R.id.left_drawer); List dir = new ArrayList(); - dir.add(new SideMenuItem("Game List", 0)); - dir.add(new SideMenuItem("Browse Folder", 1)); - dir.add(new SideMenuItem("Settings", 2)); - dir.add(new SideMenuItem("Gamepad Config", 3)); - dir.add(new SideMenuItem("About", 4)); + dir.add(new SideMenuItem(getString(R.string.game_list), 0)); + dir.add(new SideMenuItem(getString(R.string.browse_folder), 1)); + dir.add(new SideMenuItem(getString(R.string.settings), 2)); + dir.add(new SideMenuItem(getString(R.string.gamepad_config), 3)); + dir.add(new SideMenuItem(getString(R.string.about), 4)); mDrawerAdapter = new SideMenuAdapter(this, R.layout.sidemenu, dir); mDrawerList.setAdapter(mDrawerAdapter); @@ -179,7 +179,7 @@ public class GameListActivity extends Activity break; case 1: { - Toast.makeText(mMe, "Loading up the browser", Toast.LENGTH_SHORT).show(); + Toast.makeText(mMe, getString(R.string.loading_browser), Toast.LENGTH_SHORT).show(); mCurFragmentNum = 1; mCurFragment = new FolderBrowser(); FragmentManager fragmentManager = getFragmentManager(); @@ -188,7 +188,7 @@ public class GameListActivity extends Activity break; case 2: { - Toast.makeText(mMe, "Loading up settings", Toast.LENGTH_SHORT).show(); + Toast.makeText(mMe, getString(R.string.loading_settings), Toast.LENGTH_SHORT).show(); mCurFragmentNum = 2; mCurFragment = new PrefsFragment(); FragmentManager fragmentManager = getFragmentManager(); @@ -197,7 +197,7 @@ public class GameListActivity extends Activity break; case 3: { - Toast.makeText(mMe, "Loading up gamepad config", Toast.LENGTH_SHORT).show(); + Toast.makeText(mMe, getString(R.string.loading_gamepad), Toast.LENGTH_SHORT).show(); mCurFragmentNum = 3; mCurFragment = new InputConfigFragment(); FragmentManager fragmentManager = getFragmentManager(); @@ -206,7 +206,7 @@ public class GameListActivity extends Activity break; case 4: { - Toast.makeText(mMe, "Loading up About", Toast.LENGTH_SHORT).show(); + Toast.makeText(mMe, getString(R.string.about), Toast.LENGTH_SHORT).show(); mCurFragmentNum = 4; mCurFragment = new AboutFragment(); FragmentManager fragmentManager = getFragmentManager(); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java index 152c18662b..efcee489a8 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java @@ -63,7 +63,7 @@ public class GameListFragment extends Fragment if(!entry.isDirectory()) { if (exts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.')))) - fls.add(new GameListItem(mMe.getApplicationContext(), entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), true)); + fls.add(new GameListItem(mMe.getApplicationContext(), entryName, getString(R.string.file_size)+entry.length(),entry.getAbsolutePath(), true)); } } } @@ -96,7 +96,7 @@ public class GameListFragment extends Fragment public void onItemClick(AdapterView parent, View view, int position, long id) { GameListItem o = mGameAdapter.getItem(position); - if(!(o.getData().equalsIgnoreCase("folder")||o.getData().equalsIgnoreCase("parent directory"))) + if(!(o.getData().equalsIgnoreCase(getString(R.string.folder))||o.getData().equalsIgnoreCase(getString(R.string.parent_directory)))) { onFileClick(o.getPath()); } @@ -104,7 +104,7 @@ public class GameListFragment extends Fragment }; private void onFileClick(String o) { - Toast.makeText(mMe, "File Clicked: " + o, Toast.LENGTH_SHORT).show(); + Toast.makeText(mMe, getString(R.string.file_clicked) + o, Toast.LENGTH_SHORT).show(); Intent intent = new Intent(); intent.putExtra("Select", o); diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java index 91f550d2a2..b11dc4a34b 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java @@ -47,27 +47,27 @@ public class InputConfigFragment extends Fragment Bundle savedInstanceState) { List Input = new ArrayList(); - Input.add(new InputConfigItem("Draw on-screen controls", "Android-ScreenControls", "True")); - Input.add(new InputConfigItem("Button A", "Android-InputA")); - Input.add(new InputConfigItem("Button B", "Android-InputB")); - Input.add(new InputConfigItem("Button Start", "Android-InputStart")); - Input.add(new InputConfigItem("Button X", "Android-InputX")); - Input.add(new InputConfigItem("Button Y", "Android-InputY")); - Input.add(new InputConfigItem("Button Z", "Android-InputZ")); - Input.add(new InputConfigItem("D-Pad Up", "Android-DPadUp")); - Input.add(new InputConfigItem("D-Pad Down", "Android-DPadDown")); - Input.add(new InputConfigItem("D-Pad Left", "Android-DPadLeft")); - Input.add(new InputConfigItem("D-Pad Right", "Android-DPadRight")); - Input.add(new InputConfigItem("Main Stick Up", "Android-MainUp")); - Input.add(new InputConfigItem("Main Stick Down", "Android-MainDown")); - Input.add(new InputConfigItem("Main Stick Left", "Android-MainLeft")); - Input.add(new InputConfigItem("Main Stick Right", "Android-MainRight")); - Input.add(new InputConfigItem("C Stick Up", "Android-CStickUp")); - Input.add(new InputConfigItem("C Stick Down", "Android-CStickDown")); - Input.add(new InputConfigItem("C Stick Left", "Android-CStickLeft")); - Input.add(new InputConfigItem("C Stick Right", "Android-CStickRight")); - Input.add(new InputConfigItem("Trigger L", "Android-InputL")); - Input.add(new InputConfigItem("Trigger R", "Android-InputR")); + Input.add(new InputConfigItem(getString(R.string.draw_onscreen_controls), "Android-ScreenControls", "True")); + Input.add(new InputConfigItem(getString(R.string.button_a), "Android-InputA")); + Input.add(new InputConfigItem(getString(R.string.button_b), "Android-InputB")); + Input.add(new InputConfigItem(getString(R.string.button_start), "Android-InputStart")); + Input.add(new InputConfigItem(getString(R.string.button_x), "Android-InputX")); + Input.add(new InputConfigItem(getString(R.string.button_y), "Android-InputY")); + Input.add(new InputConfigItem(getString(R.string.button_z), "Android-InputZ")); + Input.add(new InputConfigItem(getString(R.string.dpad_up), "Android-DPadUp")); + Input.add(new InputConfigItem(getString(R.string.dpad_down), "Android-DPadDown")); + Input.add(new InputConfigItem(getString(R.string.dpad_left), "Android-DPadLeft")); + Input.add(new InputConfigItem(getString(R.string.dpad_right), "Android-DPadRight")); + Input.add(new InputConfigItem(getString(R.string.main_stick_up), "Android-MainUp")); + Input.add(new InputConfigItem(getString(R.string.main_stick_down), "Android-MainDown")); + Input.add(new InputConfigItem(getString(R.string.main_stick_left), "Android-MainLeft")); + Input.add(new InputConfigItem(getString(R.string.main_stick_right), "Android-MainRight")); + Input.add(new InputConfigItem(getString(R.string.c_stick_up), "Android-CStickUp")); + Input.add(new InputConfigItem(getString(R.string.c_stick_down), "Android-CStickDown")); + Input.add(new InputConfigItem(getString(R.string.c_stick_left), "Android-CStickLeft")); + Input.add(new InputConfigItem(getString(R.string.c_stick_right), "Android-CStickRight")); + Input.add(new InputConfigItem(getString(R.string.trigger_left), "Android-InputL")); + Input.add(new InputConfigItem(getString(R.string.trigger_right), "Android-InputR")); adapter = new InputConfigAdapter(m_activity, R.layout.folderbrowser, Input); View rootView = inflater.inflate(R.layout.gamelist_listview, container, false); @@ -88,12 +88,12 @@ public class InputConfigFragment extends Fragment String newBind; if (o.getBind().equals("True")) { - Toast.makeText(m_activity, "Not Drawing on screen controls", Toast.LENGTH_SHORT).show(); + Toast.makeText(m_activity, getString(R.string.not_drawing_onscreen_controls), Toast.LENGTH_SHORT).show(); newBind = "False"; } else { - Toast.makeText(m_activity, "Drawing on screen controls", Toast.LENGTH_SHORT).show(); + Toast.makeText(m_activity, getString(R.string.drawing_onscreen_controls), Toast.LENGTH_SHORT).show(); newBind = "True"; } adapter.remove(o); @@ -101,7 +101,8 @@ public class InputConfigFragment extends Fragment adapter.insert(o, position); break; default: // gamepad controls - Toast.makeText(m_activity, "Press button to configure " + o.getName(), Toast.LENGTH_SHORT).show(); + + Toast.makeText(m_activity, getString(R.string.press_button_to_config, o.getName()), Toast.LENGTH_SHORT).show(); configPosition = position; Configuring = true; firstEvent = true; @@ -136,9 +137,12 @@ public class InputConfigFragment extends Fragment if (firstEvent) { m_values.clear(); - for (InputDevice.MotionRange range : motions) { + + for (InputDevice.MotionRange range : motions) + { m_values.add(event.getAxisValue(range.getAxis())); } + firstEvent = false; } else @@ -164,7 +168,7 @@ public class InputConfigFragment extends Fragment } public boolean onKeyEvent(KeyEvent event) { - Log.w("Dolphinemu", "Got Event " + event.getAction()); + Log.w("InputConfigFragment", "Got Event " + event.getAction()); switch (event.getAction()) { case KeyEvent.ACTION_DOWN: case KeyEvent.ACTION_UP: diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java b/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java index 7511406dc9..ff8a077703 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java @@ -10,24 +10,24 @@ public class InputConfigItem implements Comparable{ private String m_Config; private String m_bind; - private void Init(String n, String c, String d) + private void Init(String name, String config, String defaultBind) { - m_name = n; - m_Config = c; + m_name = name; + m_Config = config; String ConfigValues[] = m_Config.split("-"); String Key = ConfigValues[0]; String Value = ConfigValues[1]; - m_bind = NativeLibrary.GetConfig("Dolphin.ini", Key, Value, d); + m_bind = NativeLibrary.GetConfig("Dolphin.ini", Key, Value, defaultBind); } - public InputConfigItem(String n, String c, String d) + public InputConfigItem(String name, String config, String defaultBind) { - Init(n, c, d); + Init(name, config, defaultBind); } - public InputConfigItem(String n, String c) + public InputConfigItem(String name, String config) { - Init(n, c, "None"); + Init(name, config, "None"); } public String getName() { @@ -41,9 +41,9 @@ public class InputConfigItem implements Comparable{ { return m_bind; } - public void setBind(String b) + public void setBind(String bind) { - m_bind = b; + m_bind = bind; } public int compareTo(InputConfigItem o) diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java index e16b2503c3..e56aeeb479 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java @@ -144,18 +144,18 @@ public class PrefsFragment extends PreferenceFragment { if (Build.CPU_ABI.contains("x86")) { - entries.put("Interpreter", "0"); - entries.put("JIT64 Recompiler", "1"); - entries.put("JITIL Recompiler", "2"); + entries.put(getString(R.string.interpreter), "0"); + entries.put(getString(R.string.jit64_recompiler), "1"); + entries.put(getString(R.string.jitil_recompiler), "2"); } else if (Build.CPU_ABI.contains("arm")) { - entries.put("Interpreter", "0"); - entries.put("JIT ARM Recompiler", "3"); + entries.put(getString(R.string.interpreter), "0"); + entries.put(getString(R.string.jit_arm_recompiler), "3"); } else { - entries.put("Interpreter", "0"); + entries.put(getString(R.string.interpreter), "0"); } // Convert the key/value sections to arrays respectively so the list can be set. @@ -163,8 +163,8 @@ public class PrefsFragment extends PreferenceFragment { etp.setEntries(entries.keySet().toArray(new CharSequence[entries.size()])); etp.setEntryValues(entries.values().toArray(new CharSequence[entries.size()])); etp.setKey("cpupref"); - etp.setTitle("CPU Core"); - etp.setSummary("Emulation core to use"); + etp.setTitle(getString(R.string.cpu_core)); + etp.setSummary(getString(R.string.emu_core_to_use)); PreferenceCategory mCategory = (PreferenceCategory) findPreference("cpuprefcat"); mCategory.addPreference(etp); @@ -181,11 +181,11 @@ public class PrefsFragment extends PreferenceFragment { // Add available graphics renderers to the hashmap to add to the list. entries.clear(); - entries.put("Software Renderer", "Software Renderer"); // TODO: I think this is a bug? The value shouldn't be the same as the key? + entries.put(getString(R.string.software_renderer), "Software Renderer"); videobackend.setKey("gpupref"); - videobackend.setTitle("Video Backend"); - videobackend.setSummary("Video backend to use"); + videobackend.setTitle(getString(R.string.video_backend)); + videobackend.setSummary(getString(R.string.video_backend_to_use)); videobackend.setEntries(entries.keySet().toArray(new CharSequence[entries.size()])); videobackend.setEntryValues(entries.values().toArray(new CharSequence[entries.size()]));