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