diff --git a/F-Droid/res/values/no_trans.xml b/F-Droid/res/values/no_trans.xml
index 3a3a458b9..4f79a8a49 100644
--- a/F-Droid/res/values/no_trans.xml
+++ b/F-Droid/res/values/no_trans.xml
@@ -30,4 +30,45 @@
- lightWithDarkActionBar
+
+
+ - ar
+ - bg
+ - ca
+ - cs
+ - de
+ - el
+ - en-rGB
+ - eo
+ - es
+ - eu
+ - fa
+ - fi
+ - fr
+ - gl
+ - gu
+ - he
+ - hu
+ - it
+ - ja
+ - ko
+ - lt
+ - nb
+ - nl
+ - pl
+ - pt-rBR
+ - ro
+ - ru
+ - sk
+ - sl
+ - sr
+ - sv
+ - tr
+ - ug
+ - uk
+ - zh
+ - zh-rCN
+ - zh-rHK
+
+
diff --git a/F-Droid/res/values/strings.xml b/F-Droid/res/values/strings.xml
index 2ce145ddd..5cca17ead 100644
--- a/F-Droid/res/values/strings.xml
+++ b/F-Droid/res/values/strings.xml
@@ -259,6 +259,8 @@
%1$s up to %2$s
Your device is not on the same WiFi as the local repo you just added! Try joining this network: %s
Requires: %1$s
+ Language
+ System Default
App icon
Repo icon
diff --git a/F-Droid/res/xml/preferences.xml b/F-Droid/res/xml/preferences.xml
index a75b9d19c..22294e6ea 100644
--- a/F-Droid/res/xml/preferences.xml
+++ b/F-Droid/res/xml/preferences.xml
@@ -74,6 +74,10 @@
android:dependency="enableProxy" />
+
diff --git a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
index 5e1194cad..3c0431dcb 100644
--- a/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
+++ b/F-Droid/src/org/fdroid/fdroid/FDroidApp.java
@@ -31,6 +31,7 @@ import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.res.Configuration;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.Build;
@@ -39,6 +40,7 @@ import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.preference.PreferenceManager;
+import android.text.TextUtils;
import android.widget.Toast;
import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiscCache;
@@ -58,6 +60,7 @@ import org.fdroid.fdroid.net.WifiStateChangeService;
import java.io.File;
import java.security.Security;
+import java.util.Locale;
import java.util.Set;
public class FDroidApp extends Application {
@@ -130,8 +133,25 @@ public class FDroidApp extends Application {
}
}
+ public static void updateLanguage(Context c) {
+ SharedPreferences prefs = PreferenceManager
+ .getDefaultSharedPreferences(c);
+ String lang = prefs.getString("language", "");
+ updateLanguage(c, lang);
+ }
+
+ public static void updateLanguage(Context c, String lang) {
+ Configuration cfg = new Configuration();
+ if (!TextUtils.isEmpty(lang))
+ cfg.locale = new Locale(lang);
+ else
+ cfg.locale = Locale.getDefault();
+ c.getResources().updateConfiguration(cfg, null);
+ }
+
@Override
public void onCreate() {
+ updateLanguage(this);
super.onCreate();
// Needs to be setup before anything else tries to access it.
diff --git a/F-Droid/src/org/fdroid/fdroid/Preferences.java b/F-Droid/src/org/fdroid/fdroid/Preferences.java
index 6bebe7c21..ce166cc9a 100644
--- a/F-Droid/src/org/fdroid/fdroid/Preferences.java
+++ b/F-Droid/src/org/fdroid/fdroid/Preferences.java
@@ -55,6 +55,7 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi
public static final String PREF_LOCAL_REPO_BONJOUR = "localRepoBonjour";
public static final String PREF_LOCAL_REPO_NAME = "localRepoName";
public static final String PREF_LOCAL_REPO_HTTPS = "localRepoHttps";
+ public static final String PREF_LANGUAGE = "language";
public static final String PREF_ENABLE_PROXY = "enableProxy";
public static final String PREF_PROXY_HOST = "proxyHost";
public static final String PREF_PROXY_PORT = "proxyPort";
diff --git a/F-Droid/src/org/fdroid/fdroid/views/fragments/PreferencesFragment.java b/F-Droid/src/org/fdroid/fdroid/views/fragments/PreferencesFragment.java
index f64bbd77a..ad57961d6 100644
--- a/F-Droid/src/org/fdroid/fdroid/views/fragments/PreferencesFragment.java
+++ b/F-Droid/src/org/fdroid/fdroid/views/fragments/PreferencesFragment.java
@@ -10,12 +10,16 @@ import android.preference.Preference;
import android.support.v4.preference.PreferenceFragment;
import android.text.TextUtils;
+import org.fdroid.fdroid.FDroid;
+import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.Preferences;
import org.fdroid.fdroid.PreferencesActivity;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.installer.CheckRootAsyncTask;
import org.fdroid.fdroid.installer.Installer;
+import java.util.Locale;
+
public class PreferencesFragment extends PreferenceFragment
implements SharedPreferences.OnSharedPreferenceChangeListener {
@@ -33,6 +37,7 @@ public class PreferencesFragment extends PreferenceFragment
Preferences.PREF_LOCAL_REPO_BONJOUR,
Preferences.PREF_LOCAL_REPO_NAME,
Preferences.PREF_LOCAL_REPO_HTTPS,
+ Preferences.PREF_LANGUAGE,
Preferences.PREF_CACHE_APK,
Preferences.PREF_EXPERT,
Preferences.PREF_ROOT_INSTALLER,
@@ -134,6 +139,16 @@ public class PreferencesFragment extends PreferenceFragment
checkSummary(key, R.string.local_repo_https_on);
break;
+ case Preferences.PREF_LANGUAGE:
+ langSpinner(key);
+ entrySummary(key);
+ if (changing) {
+ result |= PreferencesActivity.RESULT_RESTART;
+ getActivity().setResult(result);
+ FDroidApp.updateLanguage(this.getActivity());
+ }
+ break;
+
case Preferences.PREF_CACHE_APK:
checkSummary(key, R.string.cache_downloaded_on);
break;
@@ -278,6 +293,18 @@ public class PreferencesFragment extends PreferenceFragment
});
}
+ private void langSpinner(String key) {
+ ListPreference pref = (ListPreference)findPreference(key);
+ final String[] langValues = getResources().getStringArray(R.array.languageValues);
+ String[] langNames = new String[langValues.length];
+ langNames[0] = getString(R.string.pref_language_default);
+ for (int i = 1; i < langValues.length; i++) {
+ Locale appLoc = new Locale(langValues[i]);
+ langNames[i] = appLoc.getDisplayLanguage(appLoc);
+ }
+ pref.setEntries(langNames);
+ }
+
@Override
public void onResume() {
super.onResume();