Add preference to change locale
This commit is contained in:
parent
d31d02491b
commit
1fb99684ea
6 changed files with 68 additions and 2 deletions
|
@ -1,5 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="system_locale">Системная</string>
|
||||
<string name="preferred_locale_descr">Изменить язык программы</string>
|
||||
<string name="preferred_locale">Локализация</string>
|
||||
<string name="tip_map_switch">Источник карты</string>
|
||||
<string name="tip_map_switch_t">Наиболее быстрый способ изменить источник карты и слои \'Меню\'->\'Слои\'.
|
||||
\n\tПод \'Карта источник...\' вы можете выбрать из предопределенных типов или собственных, созданных OsmAndMapCreator на PC.
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<resources>
|
||||
<string name="system_locale">System</string>
|
||||
<string name="preferred_locale_descr">Change display language</string>
|
||||
<string name="preferred_locale">Preferred locale</string>
|
||||
<string name="tip_map_switch">Map source</string>
|
||||
<string name="tip_map_switch_t">The fastest way to change map source and layers is pressing \'Menu\'->\'Layers\' on map.
|
||||
\n\tUnder \'Map source...\' you can choose predefined tile sources or manually created using OsmAndMapCreator on PC.
|
||||
|
|
|
@ -53,6 +53,7 @@
|
|||
<EditTextPreference android:title="@string/application_dir" android:key="external_storage_dir"></EditTextPreference>
|
||||
<ListPreference android:key="default_metric_system" android:title="@string/unit_of_length" android:summary="@string/unit_of_length_descr"></ListPreference>
|
||||
<ListPreference android:key="position_on_map" android:title="@string/position_on_map" android:summary="@string/position_on_map_descr"></ListPreference>
|
||||
<ListPreference android:key="preferred_locale" android:title="@string/preferred_locale" android:summary="@string/preferred_locale_descr"></ListPreference>
|
||||
<CheckBoxPreference android:key="use_trackball_for_movements" android:title="@string/use_trackball" android:summary="@string/use_trackball_descr"></CheckBoxPreference>
|
||||
|
||||
</PreferenceScreen>
|
||||
|
|
|
@ -233,11 +233,21 @@ public class OsmandSettings {
|
|||
return prefs.edit().putBoolean(SHOW_TRANSPORT_OVER_MAP, val).commit();
|
||||
}
|
||||
|
||||
|
||||
// this value string is synchronized with settings_pref.xml preference name
|
||||
public static final String PREFERRED_LOCALE = "preferred_locale"; //$NON-NLS-1$
|
||||
public static final String PREFERRED_LOCALE_DEF = ""; //$NON-NLS-1$
|
||||
|
||||
public static String getPreferredLocale(SharedPreferences prefs) {
|
||||
return prefs.getString(PREFERRED_LOCALE, PREFERRED_LOCALE_DEF); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
// this value string is synchronized with settings_pref.xml preference name
|
||||
public static final String USER_NAME = "user_name"; //$NON-NLS-1$
|
||||
public static final String USER_NAME_DEF = "NoName"; //$NON-NLS-1$
|
||||
|
||||
public static String getUserName(SharedPreferences prefs) {
|
||||
return prefs.getString(USER_NAME, "NoName"); //$NON-NLS-1$
|
||||
return prefs.getString(USER_NAME, USER_NAME_DEF);
|
||||
}
|
||||
|
||||
public static boolean setUserName(Context ctx, String name) {
|
||||
|
|
|
@ -7,6 +7,7 @@ import java.io.FileWriter;
|
|||
import java.io.PrintStream;
|
||||
import java.lang.Thread.UncaughtExceptionHandler;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import net.osmand.Algoritms;
|
||||
import net.osmand.LogUtil;
|
||||
|
@ -25,6 +26,8 @@ import android.app.AlertDialog.Builder;
|
|||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Handler;
|
||||
import android.text.format.DateFormat;
|
||||
import android.util.Log;
|
||||
|
@ -48,6 +51,7 @@ public class OsmandApplication extends Application {
|
|||
private DayNightHelper daynightHelper;
|
||||
private NavigationService navigationService;
|
||||
private boolean applicationInitializing = false;
|
||||
private Locale prefferedLocale = null;
|
||||
|
||||
|
||||
public void onCreate(){
|
||||
|
@ -56,6 +60,7 @@ public class OsmandApplication extends Application {
|
|||
manager = new ResourceManager(this);
|
||||
daynightHelper = new DayNightHelper(this);
|
||||
uiHandler = new Handler();
|
||||
checkPrefferedLocale();
|
||||
startApplication();
|
||||
}
|
||||
|
||||
|
@ -87,6 +92,29 @@ public class OsmandApplication extends Application {
|
|||
manager.onLowMemory();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
if (prefferedLocale != null) {
|
||||
newConfig.locale = prefferedLocale;
|
||||
Locale.setDefault(prefferedLocale);
|
||||
getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
|
||||
}
|
||||
}
|
||||
|
||||
public void checkPrefferedLocale() {
|
||||
SharedPreferences settings = OsmandSettings.getSharedPreferences(this);
|
||||
Configuration config = getBaseContext().getResources().getConfiguration();
|
||||
String lang = OsmandSettings.getPreferredLocale(settings);
|
||||
if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) {
|
||||
prefferedLocale = new Locale(lang);
|
||||
Locale.setDefault(prefferedLocale);
|
||||
config.locale = prefferedLocale;
|
||||
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public ProgressDialog checkApplicationIsBeingInitialized(Context uiContext){
|
||||
// start application if it was previously closed
|
||||
startApplication();
|
||||
|
|
|
@ -99,6 +99,7 @@ public class SettingsActivity extends PreferenceActivity implements OnPreference
|
|||
private ListPreference mapScreenOrientation;
|
||||
private ListPreference voicePreference;
|
||||
private ListPreference metricPreference;
|
||||
private ListPreference preferredLocale;
|
||||
private ListPreference rendererPreference;
|
||||
private ListPreference routeServiceInterval;
|
||||
private ListPreference routeServiceWaitInterval;
|
||||
|
@ -176,6 +177,8 @@ public class SettingsActivity extends PreferenceActivity implements OnPreference
|
|||
voicePreference.setOnPreferenceChangeListener(this);
|
||||
metricPreference = (ListPreference) screen.findPreference(OsmandSettings.DEFAULT_METRIC_SYSTEM);
|
||||
metricPreference.setOnPreferenceChangeListener(this);
|
||||
preferredLocale = (ListPreference) screen.findPreference(OsmandSettings.PREFERRED_LOCALE);
|
||||
preferredLocale.setOnPreferenceChangeListener(this);
|
||||
rendererPreference =(ListPreference) screen.findPreference(OsmandSettings.RENDERER);
|
||||
rendererPreference.setOnPreferenceChangeListener(this);
|
||||
routeServiceInterval =(ListPreference) screen.findPreference(OsmandSettings.SERVICE_OFF_INTERVAL);
|
||||
|
@ -315,6 +318,16 @@ public class SettingsActivity extends PreferenceActivity implements OnPreference
|
|||
}
|
||||
fill(metricPreference, names, values, entry);
|
||||
|
||||
String[] locales = //getResources().getAssets().getLocales();
|
||||
new String [] { "en", "cs", "de", "es", "fr", "hu", "it", "pt", "ru", "sk"};
|
||||
values = new String[locales.length + 1];
|
||||
names = new String[locales.length + 1] ;
|
||||
values[0] = OsmandSettings.PREFERRED_LOCALE_DEF;
|
||||
names[0] = getString(R.string.system_locale);
|
||||
System.arraycopy(locales, 0, names, 1, locales.length);
|
||||
System.arraycopy(locales, 0, values, 1, locales.length);
|
||||
fill(preferredLocale, names, values, OsmandSettings.getPreferredLocale(prefs));
|
||||
|
||||
// read available voice data
|
||||
File extStorage = OsmandSettings.extendOsmandPath(getApplicationContext(), ResourceManager.VOICE_PATH);
|
||||
Set<String> setFiles = new LinkedHashSet<String>();
|
||||
|
@ -539,6 +552,14 @@ public class SettingsActivity extends PreferenceActivity implements OnPreference
|
|||
} else if (preference == metricPreference) {
|
||||
MetricsConstants mc = MetricsConstants.valueOf((String) newValue);
|
||||
OsmandSettings.setDefaultMetricConstants(edit, mc);
|
||||
} else if (preference == preferredLocale) {
|
||||
edit.putString(OsmandSettings.PREFERRED_LOCALE, (String) newValue);
|
||||
edit.commit();
|
||||
// restart activity
|
||||
getMyApplication().checkPrefferedLocale();
|
||||
Intent intent = getIntent();
|
||||
finish();
|
||||
startActivity(intent);
|
||||
} else if (preference == tileSourcePreference) {
|
||||
if(VECTOR_MAP.equals((String) newValue)){
|
||||
edit.putBoolean(OsmandSettings.MAP_VECTOR_DATA, true);
|
||||
|
|
Loading…
Reference in a new issue