Merge pull request #657 from vector-im/feature/locales

Support Cyrillic script
This commit is contained in:
Benoit Marty 2019-11-04 14:27:24 +01:00 committed by GitHub
commit d780c74abf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 183 additions and 11 deletions

View File

@ -102,6 +102,7 @@ cp ../riot-android/vector/src/main/res/values-ro/strings.xml ./vector/src
cp ../riot-android/vector/src/main/res/values-ru/strings.xml ./vector/src/main/res/values-ru/strings.xml
cp ../riot-android/vector/src/main/res/values-sk/strings.xml ./vector/src/main/res/values-sk/strings.xml
cp ../riot-android/vector/src/main/res/values-sq/strings.xml ./vector/src/main/res/values-sq/strings.xml
cp ../riot-android/vector/src/main/res/values-sr/strings.xml ./vector/src/main/res/values-sr/strings.xml
cp ../riot-android/vector/src/main/res/values-te/strings.xml ./vector/src/main/res/values-te/strings.xml
cp ../riot-android/vector/src/main/res/values-th/strings.xml ./vector/src/main/res/values-th/strings.xml
cp ../riot-android/vector/src/main/res/values-tlh/strings.xml ./vector/src/main/res/values-tlh/strings.xml

View File

@ -21,12 +21,16 @@ import android.content.res.Configuration
import android.os.Build
import android.preference.PreferenceManager
import androidx.core.content.edit
import im.vector.riotx.BuildConfig
import im.vector.riotx.R
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import timber.log.Timber
import java.util.Locale
import kotlin.Comparator
import kotlin.collections.ArrayList
import kotlin.collections.HashSet
/**
* Object to manage the Locale choice of the user
@ -35,6 +39,7 @@ object VectorLocale {
private const val APPLICATION_LOCALE_COUNTRY_KEY = "APPLICATION_LOCALE_COUNTRY_KEY"
private const val APPLICATION_LOCALE_VARIANT_KEY = "APPLICATION_LOCALE_VARIANT_KEY"
private const val APPLICATION_LOCALE_LANGUAGE_KEY = "APPLICATION_LOCALE_LANGUAGE_KEY"
private const val APPLICATION_LOCALE_SCRIPT_KEY = "APPLICATION_LOCALE_SCRIPT_KEY"
private val defaultLocale = Locale("en", "US")
@ -106,6 +111,15 @@ object VectorLocale {
} else {
putString(APPLICATION_LOCALE_VARIANT_KEY, variant)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
val script = locale.script
if (script.isEmpty()) {
remove(APPLICATION_LOCALE_SCRIPT_KEY)
} else {
putString(APPLICATION_LOCALE_SCRIPT_KEY, script)
}
}
}
}
@ -159,24 +173,43 @@ object VectorLocale {
* @param context the context
*/
private fun initApplicationLocales(context: Context) {
val knownLocalesSet = HashSet<Pair<String, String>>()
val knownLocalesSet = HashSet<Triple<String, String, String>>()
try {
val availableLocales = Locale.getAvailableLocales()
for (locale in availableLocales) {
knownLocalesSet.add(Pair(getString(context, locale, R.string.resources_language),
getString(context, locale, R.string.resources_country_code)))
knownLocalesSet.add(
Triple(
getString(context, locale, R.string.resources_language),
getString(context, locale, R.string.resources_country_code),
getString(context, locale, R.string.resources_script)
)
)
}
} catch (e: Exception) {
Timber.e(e, "## getApplicationLocales() : failed")
knownLocalesSet.add(Pair(context.getString(R.string.resources_language), context.getString(R.string.resources_country_code)))
knownLocalesSet.add(
Triple(
context.getString(R.string.resources_language),
context.getString(R.string.resources_country_code),
context.getString(R.string.resources_script)
)
)
}
supportedLocales.clear()
knownLocalesSet.mapTo(supportedLocales) { (language, country) ->
Locale(language, country)
knownLocalesSet.mapTo(supportedLocales) { (language, country, script) ->
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Locale.Builder()
.setLanguage(language)
.setRegion(country)
.setScript(script)
.build()
} else {
Locale(language, country)
}
}
// sort by human display names
@ -190,12 +223,37 @@ object VectorLocale {
* @return the string
*/
fun localeToLocalisedString(locale: Locale): String {
var res = locale.getDisplayLanguage(locale)
return buildString {
append(locale.getDisplayLanguage(locale))
if (locale.getDisplayCountry(locale).isNotEmpty()) {
res += " (" + locale.getDisplayCountry(locale) + ")"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
&& locale.script != "Latn"
&& locale.getDisplayScript(locale).isNotEmpty()) {
append(" - ")
append(locale.getDisplayScript(locale))
}
if (locale.getDisplayCountry(locale).isNotEmpty()) {
append(" (")
append(locale.getDisplayCountry(locale))
append(")")
}
// In debug mode, also display information about the locale in the current locale.
if (BuildConfig.DEBUG) {
append("\n[")
append(locale.displayLanguage)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && locale.script != "Latn") {
append(" - ")
append(locale.displayScript)
}
if (locale.displayCountry.isNotEmpty()) {
append(" (")
append(locale.displayCountry)
append(")")
}
append("]")
}
}
return res
}
}

View File

@ -0,0 +1,113 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="resources_language">sr</string>
<string name="resources_country_code">RS</string>
<string name="resources_script">Cyrl</string>
<string name="light_theme">Светла тема</string>
<string name="dark_theme">Тамна тема</string>
<string name="black_them">Црна тема</string>
<string name="status_theme">Status.im тема</string>
<string name="notification_sync_init">Иницијализација сервиса</string>
<string name="notification_sync_in_progress">Синхронизација у току…</string>
<string name="notification_noisy_notifications">Бучна обавештења</string>
<string name="notification_silent_notifications">Тиха обавештења</string>
<string name="title_activity_home">Поруке</string>
<string name="title_activity_room">Соба</string>
<string name="title_activity_settings">Подешавања</string>
<string name="title_activity_member_details">Подаци о члану</string>
<string name="title_activity_historical">Историјски</string>
<string name="title_activity_bug_report">Пријава грешке</string>
<string name="title_activity_choose_sticker">Пошаљи налепницу</string>
<string name="title_activity_keys_backup_setup">Резервна копија кључева</string>
<string name="title_activity_keys_backup_restore">Користи резервну копију кључева</string>
<string name="title_activity_verify_device">Верификуј уређај</string>
<string name="keys_backup_is_not_finished_please_wait">Креирање резервне копије кључева се није завршило, молим сачекајте…</string>
<string name="sign_out_bottom_sheet_warning_no_backup">Изгубићете ваше шифроване поруке ако се сад одјавите</string>
<string name="sign_out_bottom_sheet_warning_backing_up">Креирање резервне копије кључева је у току. Ако се одјавите сад, изгубићете приступ вашим шифрованим порукама.</string>
<string name="sign_out_bottom_sheet_warning_backup_not_active">Сигурносна копија кључева би требало да буде активна на свим вашим уређајима како би избегли губитак приступа вашим шифрованим порукама.</string>
<string name="sign_out_bottom_sheet_dont_want_secure_messages">Не желим моје шифроване поруке</string>
<string name="sign_out_bottom_sheet_backing_up_keys">Прављење резервне копије кључева у току…</string>
<string name="keys_backup_activate">Користи резервну копију кључева</string>
<string name="are_you_sure">Да ли сте сигурни\?</string>
<string name="sign_out_bottom_sheet_will_lose_secure_messages">Изгубићете приступ вашим шифрованим порукама уколико не направите резервну копију кључева пре него што се одјавите.</string>
<string name="loading">Учитавање…</string>
<string name="ok">У реду</string>
<string name="cancel">Откажи</string>
<string name="save">Сачувај</string>
<string name="leave">Напусти</string>
<string name="stay">Остани</string>
<string name="send">Пошаљи</string>
<string name="copy">Копирај</string>
<string name="resend">Пошаљи поново</string>
<string name="redact">Уклони</string>
<string name="share">Подели</string>
<string name="accept">Прихвати</string>
<string name="skip">Прескочи</string>
<string name="done">Готово</string>
<string name="abort">Обустави</string>
<string name="ignore">Игнориши</string>
<string name="review">Прегледај</string>
<string name="decline">Одбаци</string>
<string name="action_exit">Изађи</string>
<string name="actions">Акције</string>
<string name="action_sign_out">Одјави се</string>
<string name="action_sign_out_confirmation_simple">Да ли сте сигурни да желите да се одјавите\?</string>
<string name="action_voice_call">Гласовни позив</string>
<string name="action_video_call">Видео позив</string>
<string name="action_global_search">Глобална претрага</string>
<string name="action_mark_all_as_read">Означи све као прочитано</string>
<string name="action_quick_reply">Брзи одговор</string>
<string name="action_mark_room_read">Означи као прочитано</string>
<string name="action_open">Отвори</string>
<string name="action_close">Затвори</string>
<string name="disable">Онемогући</string>
<string name="dialog_title_confirmation">Потврда</string>
<string name="dialog_title_warning">Упозорење</string>
<string name="dialog_title_error">Грешка</string>
<string name="bottom_action_favourites">Омиљено</string>
<string name="bottom_action_people">Људи</string>
<string name="bottom_action_rooms">Собе</string>
<string name="invitations_header">Позивнице</string>
<string name="low_priority_header">Низак приоритет</string>
<string name="direct_chats_header">Разговори</string>
<string name="local_address_book_header">Локални адресар</string>
<string name="user_directory_header">Листа корисника</string>
<string name="matrix_only_filter">Само Matrix контакти</string>
<string name="no_result_placeholder">Нема резултата</string>
<string name="people_no_identity_server">Нема подешених сервера идентитета.</string>
<string name="rooms_header">Собе</string>
<string name="rooms_directory_header">Листа соба</string>
<string name="no_room_placeholder">Нема соба</string>
<string name="groups_invite_header">Пошаљи позивницу</string>
<string name="send_bug_report_placeholder">Опишите ваш проблем овде</string>
<string name="read_receipt">Прочитај</string>
<string name="join_room">Придружи се соби</string>
<string name="username">Корисничко име</string>
<string name="create_account">Направи налог</string>
<string name="login">Пријави се</string>
<string name="logout">Одјави се</string>
<string name="option_send_sticker">Пошаљи налепницу</string>
<string name="option_take_photo_video">Направи фотографију или видео снимак</string>
<string name="option_take_photo">Направи фотографију</string>
<string name="option_take_video">Направи видео снимак</string>
<string name="auth_login">Пријави се</string>
<string name="auth_login_sso">Пријави се помоћу single sign-on</string>
<string name="auth_register">Направи налог</string>
<string name="auth_skip">Прескочи</string>
<string name="auth_user_id_placeholder">Адреса електронске поште или корисничко име</string>
<string name="auth_password_placeholder">Лозинка</string>
<string name="auth_new_password_placeholder">Нова лозинка</string>
<string name="auth_user_name_placeholder">Корисничко име</string>
</resources>