mirror of
https://github.com/m2049r/xmrwallet
synced 2025-05-15 20:08:12 +02:00
Improve method of enumerating available locales (#374)
* Change method of enumerating translated locales
This commit is contained in:
parent
03efedf35c
commit
ae75a34977
app
build.gradle
src/main
java/com/m2049r/xmrwallet
res
values-de
values-el
values-es
values-fr
values-hu
values-it
values-nb
values-pt
values-ro
values-ru
values-sv
values-zh-rCN
values-zh-rTW
values
@ -45,8 +45,17 @@ android {
|
|||||||
// Map for the version code that gives each ABI a value.
|
// Map for the version code that gives each ABI a value.
|
||||||
def abiCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
|
def abiCodes = ['armeabi-v7a': 1, 'arm64-v8a': 2, 'x86': 3, 'x86_64': 4]
|
||||||
|
|
||||||
|
// Enumerate translated locales
|
||||||
|
def availableLocales = ["en"]
|
||||||
|
new File("app/src/main/res/").eachFileMatch(~/^values-.*/) { file ->
|
||||||
|
def languageTag = file.name.substring(7).replace("-r", "-")
|
||||||
|
availableLocales.add(languageTag)
|
||||||
|
}
|
||||||
|
|
||||||
// APKs for the same app that all have the same version information.
|
// APKs for the same app that all have the same version information.
|
||||||
android.applicationVariants.all { variant ->
|
android.applicationVariants.all { variant ->
|
||||||
|
// Update string resource: available_locales
|
||||||
|
variant.resValue("string", "available_locales", availableLocales.join(","))
|
||||||
// Assigns a different version code for each output APK.
|
// Assigns a different version code for each output APK.
|
||||||
variant.outputs.all {
|
variant.outputs.all {
|
||||||
output ->
|
output ->
|
||||||
|
@ -966,29 +966,29 @@ public class LoginActivity extends SecureActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onChangeLocale() {
|
public void onChangeLocale() {
|
||||||
final ArrayList<Locale> translatedLocales = LocaleHelper.getAvailableLocales(LoginActivity.this);
|
final ArrayList<Locale> availableLocales = LocaleHelper.getAvailableLocales(LoginActivity.this);
|
||||||
String[] localeDisplayName = new String[1 + translatedLocales.size()];
|
String[] localeDisplayName = new String[1 + availableLocales.size()];
|
||||||
|
|
||||||
Collections.sort(translatedLocales, new Comparator<Locale>() {
|
Collections.sort(availableLocales, new Comparator<Locale>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(Locale locale1, Locale locale2) {
|
public int compare(Locale locale1, Locale locale2) {
|
||||||
String localeString1 = LocaleHelper.getLocaleString(LoginActivity.this, locale1, LocaleHelper.COMPARED_RESOURCE_ID);
|
String localeString1 = LocaleHelper.getDisplayName(locale1, true);
|
||||||
String localeString2 = LocaleHelper.getLocaleString(LoginActivity.this, locale2, LocaleHelper.COMPARED_RESOURCE_ID);
|
String localeString2 = LocaleHelper.getDisplayName(locale2, true);
|
||||||
return localeString1.compareTo(localeString2);
|
return localeString1.compareTo(localeString2);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
localeDisplayName[0] = getString(R.string.language_system_default);
|
localeDisplayName[0] = getString(R.string.language_system_default);
|
||||||
for (int i = 1; i < localeDisplayName.length; i++) {
|
for (int i = 1; i < localeDisplayName.length; i++) {
|
||||||
Locale locale = translatedLocales.get(i - 1);
|
Locale locale = availableLocales.get(i - 1);
|
||||||
localeDisplayName[i] = LocaleHelper.getLocaleString(LoginActivity.this, locale, LocaleHelper.COMPARED_RESOURCE_ID);
|
localeDisplayName[i] = LocaleHelper.getDisplayName(locale, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
int currentLocaleIndex = 0;
|
int currentLocaleIndex = 0;
|
||||||
String currentLocaleName = LocaleHelper.getLocale(LoginActivity.this);
|
String currentLocaleName = LocaleHelper.getLocale(LoginActivity.this);
|
||||||
if (!currentLocaleName.isEmpty()) {
|
if (!currentLocaleName.isEmpty()) {
|
||||||
Locale currentLocale = Locale.forLanguageTag(currentLocaleName);
|
Locale currentLocale = Locale.forLanguageTag(currentLocaleName);
|
||||||
String currentLocalizedString = LocaleHelper.getLocaleString(LoginActivity.this, currentLocale, LocaleHelper.COMPARED_RESOURCE_ID);
|
String currentLocalizedString = LocaleHelper.getDisplayName(currentLocale, true);
|
||||||
currentLocaleIndex = Arrays.asList(localeDisplayName).indexOf(currentLocalizedString);
|
currentLocaleIndex = Arrays.asList(localeDisplayName).indexOf(currentLocalizedString);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1000,7 +1000,7 @@ public class LoginActivity extends SecureActivity
|
|||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
|
|
||||||
LocaleHelper.setLocale(LoginActivity.this,
|
LocaleHelper.setLocale(LoginActivity.this,
|
||||||
(i == 0) ? "" : translatedLocales.get(i - 1).toLanguageTag());
|
(i == 0) ? "" : availableLocales.get(i - 1).toLanguageTag());
|
||||||
startActivity(getIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
|
startActivity(getIntent().addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -12,27 +12,30 @@ import java.util.HashSet;
|
|||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
public class LocaleHelper {
|
public class LocaleHelper {
|
||||||
public static final int COMPARED_RESOURCE_ID = R.string.language;
|
|
||||||
|
|
||||||
private static final String PREFERRED_LOCALE_KEY = "preferred_locale";
|
private static final String PREFERRED_LOCALE_KEY = "preferred_locale";
|
||||||
private static Locale SYSTEM_DEFAULT_LOCALE = Locale.getDefault();
|
private static Locale SYSTEM_DEFAULT_LOCALE = Locale.getDefault();
|
||||||
|
|
||||||
public static ArrayList<Locale> getAvailableLocales(Context context) {
|
public static ArrayList<Locale> getAvailableLocales(Context context) {
|
||||||
ArrayList<Locale> locales = new ArrayList<>();
|
ArrayList<Locale> locales = new ArrayList<>();
|
||||||
HashSet<String> localizedStrings = new HashSet<>();
|
String[] availableLocales = context.getString(R.string.available_locales).split(",");
|
||||||
|
|
||||||
for (String localeName : context.getAssets().getLocales()) {
|
for (String localeName : availableLocales) {
|
||||||
Locale locale = Locale.forLanguageTag(localeName);
|
locales.add(Locale.forLanguageTag(localeName));
|
||||||
String localizedString = getLocaleString(context, locale, COMPARED_RESOURCE_ID);
|
|
||||||
|
|
||||||
if (localizedStrings.add(localizedString)) {
|
|
||||||
locales.add(locale);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return locales;
|
return locales;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getDisplayName(Locale locale, boolean sentenceCase) {
|
||||||
|
String displayName = locale.getDisplayName(locale);
|
||||||
|
|
||||||
|
if (sentenceCase) {
|
||||||
|
displayName = toSentenceCase(displayName, locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
public static String getLocale(Context context) {
|
public static String getLocale(Context context) {
|
||||||
return getPreferredLocale(context);
|
return getPreferredLocale(context);
|
||||||
}
|
}
|
||||||
@ -55,10 +58,14 @@ public class LocaleHelper {
|
|||||||
SYSTEM_DEFAULT_LOCALE = locale;
|
SYSTEM_DEFAULT_LOCALE = locale;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getLocaleString(Context context, Locale locale, int resId) {
|
private static String toSentenceCase(String str, Locale locale) {
|
||||||
Configuration configuration = context.getResources().getConfiguration();
|
if (str.isEmpty()) {
|
||||||
configuration.setLocale(locale);
|
return str;
|
||||||
return context.createConfigurationContext(configuration).getString(resId);
|
}
|
||||||
|
|
||||||
|
int firstCodePointLen = str.offsetByCodePoints(0, 1);
|
||||||
|
return str.substring(0, firstCodePointLen).toUpperCase(locale)
|
||||||
|
+ str.substring(firstCodePointLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getPreferredLocale(Context context) {
|
private static String getPreferredLocale(Context context) {
|
||||||
|
@ -319,7 +319,6 @@
|
|||||||
<string name="tx_subaddress">Subadresse #%1$d</string>
|
<string name="tx_subaddress">Subadresse #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Öffentliche Subadresse #%1$d</string>
|
<string name="generate_address_label_sub">Öffentliche Subadresse #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Deutsch</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -318,7 +318,6 @@
|
|||||||
<string name="tx_subaddress">Subaddress #%1$d</string>
|
<string name="tx_subaddress">Subaddress #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Ελληνικά</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -304,7 +304,6 @@
|
|||||||
<string name="tx_subaddress">Subaddress #%1$d</string>
|
<string name="tx_subaddress">Subaddress #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Español</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -322,7 +322,6 @@
|
|||||||
<string name="tx_subaddress">Subaddress #%1$d</string>
|
<string name="tx_subaddress">Subaddress #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Français</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -320,7 +320,6 @@
|
|||||||
<string name="tx_subaddress">Alcím #%1$d</string>
|
<string name="tx_subaddress">Alcím #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Nyilvános alcím #%1$d</string>
|
<string name="generate_address_label_sub">Nyilvános alcím #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Magyar</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -320,7 +320,6 @@
|
|||||||
<string name="tx_subaddress">Subaddress #%1$d</string>
|
<string name="tx_subaddress">Subaddress #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Subaddress pubblico #%1$d</string>
|
<string name="generate_address_label_sub">Subaddress pubblico #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Italiano</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -318,7 +318,6 @@
|
|||||||
<string name="tx_subaddress">Subaddress #%1$d</string>
|
<string name="tx_subaddress">Subaddress #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Norsk bokmål</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -322,7 +322,6 @@
|
|||||||
<string name="tx_subaddress">Subaddress #%1$d</string>
|
<string name="tx_subaddress">Subaddress #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Português</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -318,7 +318,6 @@
|
|||||||
<string name="tx_subaddress">Subaddress #%1$d</string>
|
<string name="tx_subaddress">Subaddress #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Română</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -321,7 +321,6 @@
|
|||||||
<string name="tx_subaddress">Субадрес #%1$d</string>
|
<string name="tx_subaddress">Субадрес #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Публичный субадрес #%1$d</string>
|
<string name="generate_address_label_sub">Публичный субадрес #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Русский</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -303,7 +303,6 @@
|
|||||||
<string name="tx_subaddress">Subaddress #%1$d</string>
|
<string name="tx_subaddress">Subaddress #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
||||||
|
|
||||||
<string name="language">Svenska</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -316,7 +316,6 @@
|
|||||||
<string name="tx_subaddress">附属地址 #%1$d</string>
|
<string name="tx_subaddress">附属地址 #%1$d</string>
|
||||||
<string name="generate_address_label_sub">附属公开地址 #%1$d</string>
|
<string name="generate_address_label_sub">附属公开地址 #%1$d</string>
|
||||||
|
|
||||||
<string name="language">中文(中国)</string>
|
|
||||||
<string name="menu_language">语言</string>
|
<string name="menu_language">语言</string>
|
||||||
<string name="language_system_default">使用系统语言</string>
|
<string name="language_system_default">使用系统语言</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -317,7 +317,6 @@
|
|||||||
<string name="tx_subaddress">子地址 #%1$d</string>
|
<string name="tx_subaddress">子地址 #%1$d</string>
|
||||||
<string name="generate_address_label_sub">公開子地址 #%1$d</string>
|
<string name="generate_address_label_sub">公開子地址 #%1$d</string>
|
||||||
|
|
||||||
<string name="language">中文(台灣)</string>
|
|
||||||
<string name="menu_language">語言</string>
|
<string name="menu_language">語言</string>
|
||||||
<string name="language_system_default">使用系統語言</string>
|
<string name="language_system_default">使用系統語言</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -366,7 +366,6 @@
|
|||||||
<string name="tx_subaddress">Subaddress #%1$d</string>
|
<string name="tx_subaddress">Subaddress #%1$d</string>
|
||||||
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
<string name="generate_address_label_sub">Public Subaddress #%1$d</string>
|
||||||
|
|
||||||
<string name="language">English</string>
|
|
||||||
<string name="menu_language">Language</string>
|
<string name="menu_language">Language</string>
|
||||||
<string name="language_system_default">Use System Language</string>
|
<string name="language_system_default">Use System Language</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user