added languages selector

This commit is contained in:
Mariotaku Lee 2017-03-23 10:41:04 +08:00
parent 99c74f7bcb
commit fdcf02bba7
No known key found for this signature in database
GPG Key ID: 15C10F89D7C33535
9 changed files with 364 additions and 118 deletions

View File

@ -0,0 +1,42 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.ktextension
import android.annotation.TargetApi
import android.content.res.Configuration
import android.os.Build
import java.util.*
/**
* Created by mariotaku on 2017/3/23.
*/
fun Configuration.setLayoutDirectionCompat(locale: Locale?) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) return
ConfigurationExtensionsApi18.setLayoutDirectionCompat(this, locale)
}
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
private object ConfigurationExtensionsApi18 {
fun setLayoutDirectionCompat(configuration: Configuration, locale: Locale?) {
configuration.setLayoutDirection(locale)
}
}

View File

@ -23,6 +23,7 @@ import android.app.Application
import android.content.*
import android.content.SharedPreferences.OnSharedPreferenceChangeListener
import android.content.pm.PackageManager
import android.content.res.Configuration
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.os.AsyncTask
@ -36,6 +37,7 @@ import org.apache.commons.lang3.ArrayUtils
import org.mariotaku.kpreferences.KPreferences
import org.mariotaku.kpreferences.get
import org.mariotaku.kpreferences.set
import org.mariotaku.ktextension.setLayoutDirectionCompat
import org.mariotaku.mediaviewer.library.MediaDownloader
import org.mariotaku.restfu.http.RestHttpClient
import org.mariotaku.twidere.BuildConfig
@ -90,12 +92,6 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis
@Inject
lateinit internal var thumbor: ThumborWrapper
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
val sqLiteDatabase: SQLiteDatabase by lazy {
StrictModeUtils.checkDiskIO()
sqLiteOpenHelper.writableDatabase
@ -105,12 +101,24 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis
TwidereSQLiteOpenHelper(this, Constants.DATABASES_NAME, Constants.DATABASES_VERSION)
}
private val sharedPreferences: SharedPreferences by lazy {
val prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE)
prefs.registerOnSharedPreferenceChangeListener(this)
return@lazy prefs
}
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this)
}
override fun onCreate() {
instance = this
if (BuildConfig.DEBUG) {
StrictModeUtils.detectAllVmPolicy()
}
super.onCreate()
applyLanguageSettings()
startKovenant()
initializeAsyncTask()
initDebugMode()
@ -134,6 +142,77 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis
Analyzer.preferencesChanged(sharedPreferences)
}
override fun onConfigurationChanged(newConfig: Configuration?) {
applyLanguageSettings()
super.onConfigurationChanged(newConfig)
}
override fun onTrimMemory(level: Int) {
Glide.with(this).onTrimMemory(level)
super.onTrimMemory(level)
}
override fun onLowMemory() {
Glide.with(this).onLowMemory()
super.onLowMemory()
}
override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) {
when (key) {
KEY_REFRESH_INTERVAL -> {
autoRefreshController.rescheduleAll()
}
KEY_ENABLE_PROXY, KEY_PROXY_HOST, KEY_PROXY_PORT, KEY_PROXY_TYPE, KEY_PROXY_USERNAME,
KEY_PROXY_PASSWORD, KEY_CONNECTION_TIMEOUT, KEY_RETRY_ON_NETWORK_ISSUE -> {
HttpClientFactory.reloadConnectivitySettings(this)
}
KEY_DNS_SERVER, KEY_TCP_DNS_QUERY, KEY_BUILTIN_DNS_RESOLVER -> {
reloadDnsSettings()
}
KEY_CONSUMER_KEY, KEY_CONSUMER_SECRET, KEY_API_URL_FORMAT, KEY_CREDENTIALS_TYPE,
KEY_SAME_OAUTH_SIGNING_URL, KEY_THUMBOR_ENABLED, KEY_THUMBOR_ADDRESS, KEY_THUMBOR_SECURITY_KEY -> {
preferences[apiLastChangeKey] = System.currentTimeMillis()
}
KEY_EMOJI_SUPPORT -> {
externalThemeManager.reloadEmojiPreferences()
}
KEY_THUMBOR_ADDRESS, KEY_THUMBOR_ENABLED, KEY_THUMBOR_SECURITY_KEY -> {
thumbor.reloadSettings(preferences)
}
KEY_MEDIA_PRELOAD, KEY_PRELOAD_WIFI_ONLY -> {
mediaPreloader.reloadOptions(preferences)
}
KEY_NAME_FIRST, KEY_I_WANT_MY_STARS_BACK -> {
contentNotificationManager.updatePreferences()
}
streamingEnabledKey.key, streamingPowerSavingKey.key,
streamingNonMeteredNetworkKey.key -> {
val streamingIntent = Intent(this, StreamingService::class.java)
if (activityTracker.isHomeActivityLaunched) {
startService(streamingIntent)
} else {
stopService(streamingIntent)
}
}
}
Analyzer.preferencesChanged(preferences)
}
override fun onTerminate() {
super.onTerminate()
stopKovenant()
}
@Suppress("DEPRECATION")
private fun applyLanguageSettings() {
val locale = sharedPreferences[overrideLanguageKey] ?: return
Locale.setDefault(locale)
val config = resources.configuration
config.locale = locale
config.setLayoutDirectionCompat(locale)
resources.updateConfiguration(config, resources.displayMetrics)
}
private fun loadDefaultFeatures() {
val lastUpdated = kPreferences[defaultFeatureLastUpdated]
if (lastUpdated > 0 && TimeUnit.MILLISECONDS.toHours(System.currentTimeMillis() - lastUpdated) < 12) {
@ -215,68 +294,6 @@ class TwidereApplication : Application(), Constants, OnSharedPreferenceChangeLis
}
}
private val sharedPreferences: SharedPreferences by lazy {
val prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE)
prefs.registerOnSharedPreferenceChangeListener(this)
return@lazy prefs
}
override fun onTrimMemory(level: Int) {
Glide.with(this).onTrimMemory(level)
super.onTrimMemory(level)
}
override fun onLowMemory() {
Glide.with(this).onLowMemory()
super.onLowMemory()
}
override fun onSharedPreferenceChanged(preferences: SharedPreferences, key: String) {
when (key) {
KEY_REFRESH_INTERVAL -> {
autoRefreshController.rescheduleAll()
}
KEY_ENABLE_PROXY, KEY_PROXY_HOST, KEY_PROXY_PORT, KEY_PROXY_TYPE, KEY_PROXY_USERNAME,
KEY_PROXY_PASSWORD, KEY_CONNECTION_TIMEOUT, KEY_RETRY_ON_NETWORK_ISSUE -> {
HttpClientFactory.reloadConnectivitySettings(this)
}
KEY_DNS_SERVER, KEY_TCP_DNS_QUERY, KEY_BUILTIN_DNS_RESOLVER -> {
reloadDnsSettings()
}
KEY_CONSUMER_KEY, KEY_CONSUMER_SECRET, KEY_API_URL_FORMAT, KEY_CREDENTIALS_TYPE,
KEY_SAME_OAUTH_SIGNING_URL, KEY_THUMBOR_ENABLED, KEY_THUMBOR_ADDRESS, KEY_THUMBOR_SECURITY_KEY -> {
preferences[apiLastChangeKey] = System.currentTimeMillis()
}
KEY_EMOJI_SUPPORT -> {
externalThemeManager.reloadEmojiPreferences()
}
KEY_THUMBOR_ADDRESS, KEY_THUMBOR_ENABLED, KEY_THUMBOR_SECURITY_KEY -> {
thumbor.reloadSettings(preferences)
}
KEY_MEDIA_PRELOAD, KEY_PRELOAD_WIFI_ONLY -> {
mediaPreloader.reloadOptions(preferences)
}
KEY_NAME_FIRST, KEY_I_WANT_MY_STARS_BACK -> {
contentNotificationManager.updatePreferences()
}
streamingEnabledKey.key, streamingPowerSavingKey.key,
streamingNonMeteredNetworkKey.key -> {
val streamingIntent = Intent(this, StreamingService::class.java)
if (activityTracker.isHomeActivityLaunched) {
startService(streamingIntent)
} else {
stopService(streamingIntent)
}
}
}
Analyzer.preferencesChanged(preferences)
}
override fun onTerminate() {
super.onTerminate()
stopKovenant()
}
private fun reloadDnsSettings() {
(dns as? TwidereDns)?.reloadDnsSettings()
}

View File

@ -3,7 +3,9 @@ package org.mariotaku.twidere.constant
import android.content.SharedPreferences
import android.os.Build
import android.text.TextUtils
import org.apache.commons.lang3.LocaleUtils
import org.mariotaku.kpreferences.*
import org.mariotaku.ktextension.bcp47Tag
import org.mariotaku.ktextension.toLong
import org.mariotaku.twidere.BuildConfig
import org.mariotaku.twidere.Constants.*
@ -18,6 +20,7 @@ import org.mariotaku.twidere.model.account.cred.Credentials
import org.mariotaku.twidere.model.sync.SyncProviderInfo
import org.mariotaku.twidere.preference.ThemeBackgroundPreference
import org.mariotaku.twidere.util.sync.SyncProviderInfoFactory
import java.util.*
/**
* Created by mariotaku on 16/8/25.
@ -72,6 +75,19 @@ val streamingEnabledKey = KBooleanKey("streaming_enabled", false)
val streamingNonMeteredNetworkKey = KBooleanKey("streaming_non_metered_network", true)
val streamingPowerSavingKey = KBooleanKey("streaming_power_saving", true)
object overrideLanguageKey : KSimpleKey<Locale?>("override_language", null) {
override fun read(preferences: SharedPreferences): Locale? {
return preferences.getString(key, null)?.takeIf(String::isNotEmpty)?.replace('-', '_')
?.let(LocaleUtils::toLocale)
}
override fun write(editor: SharedPreferences.Editor, value: Locale?): Boolean {
editor.putString(key, value?.bcp47Tag)
return true
}
}
val themeBackgroundOptionKey = KStringKey(KEY_THEME_BACKGROUND, VALUE_THEME_BACKGROUND_DEFAULT)
object themeBackgroundAlphaKey : KSimpleKey<Int>(KEY_THEME_BACKGROUND_ALPHA, 0xFF) {

View File

@ -0,0 +1,36 @@
/*
* Twidere - Twitter client for Android
*
* Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.mariotaku.twidere.preference
import android.content.Context
import android.util.AttributeSet
/**
* Created by mariotaku on 2017/3/22.
*/
class LanguageSelectorPreference(context: Context, attrs: AttributeSet? = null) : ThemedListPreference(context, attrs) {
init {
val locales = context.assets.locales
entries = locales
entryValues = locales
}
}

View File

@ -27,6 +27,7 @@
<!-- [verb] Action for cancelling (deleting) a retweet-->
<string name="action_cancel_retweet">Encaboxar retuit</string>
<string name="action_cancelling_like">encaboxando préstame</string>
<string name="action_center">Centrar</string>
<string name="action_clear">Llimpiar</string>
<string name="action_compose">Componer</string>
<string name="action_compose_message_convert_to_status">Convertir a tuit</string>
@ -46,6 +47,7 @@
<string name="action_edit_conversation_avatar">Editar iconu</string>
<string name="action_edit_conversation_name">Editar nome</string>
<string name="action_edit_filter_rule">Editar regla</string>
<string name="action_favorite">Favoritu</string>
<string name="action_favoriting">marcando como favoritu</string>
<string name="action_filter_import_from_blocked_users">Importar d\'usuarios bloquiaos</string>
<string name="action_filter_import_from_muted_users">Importar d\'usuarios silenciaos</string>
@ -63,7 +65,9 @@
<string name="action_later">Más sero</string>
<string name="action_leave_conversation">Dexar conversación</string>
<!-- [verb] e.g. An action label on a tweet to like this tweet. Formerly Twitter favorite. -->
<string name="action_like">Préstame</string>
<string name="action_liking">prestando</string>
<string name="action_mark_as_read">Marcóse como lleíu</string>
<string name="action_modifying_lists">modificando llistaos</string>
<string name="action_mute">Silenciar</string>
<string name="action_mute_notifications">Silenciar avisos</string>
@ -75,6 +79,7 @@
<string name="action_purchase_features_pack">Mercar carauterístiques</string>
<string name="action_quote">Citar</string>
<string name="action_record_video">Grabar videu</string>
<string name="action_refresh">Refrescar</string>
<string name="action_refreshing_direct_messages">refrescando mensaxes direutos</string>
<string name="action_refreshing_home_timeline">refrescando llinia temporal d\'aniciu</string>
<string name="action_refreshing_mentions">refrescando menciones</string>
@ -139,8 +144,11 @@
<string name="action_updating_profile_banner_image">anovando imaxe de testera del perfil</string>
<string name="action_updating_profile_image">anovando imaxe de perfil</string>
<string name="action_updating_status">unviando\'l tuit</string>
<string name="action_view_map">Mapa</string>
<string name="activated_accounts">Cuentes activaes</string>
<string name="activities_about_me">Actividaes tocante a min</string>
<string name="activity_about_me_favorite"><xliff:g id="count">%s</xliff:g> marcó como favoritu</string>
<string name="activity_about_me_favorite_multi"><xliff:g id="user">%1$s</xliff:g> y <xliff:g id="other">%2$s</xliff:g> marcaron como favoritu</string>
<string name="activity_about_me_favorited_media_tagged"><xliff:g id="user">%s</xliff:g> marcó como favortiu un tuit nel que se t\'etiquetó</string>
<string name="activity_about_me_favorited_media_tagged_multi"><xliff:g id="user">%1$s</xliff:g> y <xliff:g id="other">%2$s</xliff:g> marcaron como favoritu un tuit nel que se t\'etiquetó</string>
<string name="activity_about_me_favorited_mention"><xliff:g id="user">%s</xliff:g> marcó como favortiu un tuit nel que se te mentó</string>
@ -183,6 +191,7 @@
<string name="app_restart_confirm">Twidere reaniciaráse p\'aplicar los axustes.</string>
<string name="app_terminate_confirm">Twidere colará p\'aplicar los axustes.</string>
<string name="appearance">Aspeutu</string>
<string name="auth_type_basic">Básica</string>
<string name="auth_type_oauth">OAuth</string>
<string name="auth_type_twip_o">Mou twip O</string>
<string name="auth_type_xauth">xAuth</string>
@ -366,6 +375,7 @@
<string name="hint_conversation_name">Nome de conversación</string>
<string name="hint_empty_filters_subscriptions">Nun hai soscripciones</string>
<string name="hint_error_message_no_content">Ensin conteníu</string>
<string name="hint_message_select_user">Guetar usuarios</string>
<string name="hint_no_account">Ensin cuentes</string>
<string name="hints">Conseyos</string>
<string name="home_refresh">Refrescu na llinia temporal d\'aniciu</string>
@ -398,6 +408,8 @@
<string name="label_background_operation_service">Serviciu d\'operación de fondu</string>
<string name="label_data_provider">Fornidor de base de datos Twidere</string>
<string name="label_filters_subscription">Soscripción</string>
<string name="label_location_your_coarse_location">El to allugamientu aproximáu</string>
<string name="label_media">Mediu</string>
<string name="label_original_status">Tuit orixinal</string>
<string name="label_password_sign_in">Aniciu de sesión per contraseña</string>
<string name="label_photo">Semeya</string>
@ -454,6 +466,7 @@
<string name="message_api_data_corrupted">Datos d\'API toyíos.</string>
<string name="message_api_url_format_help">[DOMINIU]: Dominiu d\'API Twitter.\nExemplu: https://[DOMINIU].twitter.com/ trocaráse por https://api.twitter.com/.</string>
<string name="message_auto_refresh_confirm">¿Habilitar l\'auto-refrescu pa consiguir tuits nuevos?</string>
<string name="message_blocked_user">Bloquióse a <xliff:g id="user">%s</xliff:g>.</string>
<string name="message_conversation_created">Creóse la conversación.</string>
<string name="message_destroy_conversation_confirm">¿Dexar esta conversación?</string>
<string name="message_direct_message_deleted">Desanicióse\'l mensaxe direutu.</string>
@ -478,6 +491,7 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="message_sync_data_connect_hint">Coneuta Twidere col almacenamientu de rede pa sincronizar datos</string>
<string name="message_sync_data_synced_with_name">Agora Twidere ta sincronizáu con <xliff:g example="ownCloud" id="name">%s</xliff:g></string>
<string name="message_sync_disconnect_from_name_confirm">¿Desconeutate de <xliff:g example="ownCloud" id="name">%s</xliff:g>?</string>
<string name="message_sync_last_synced_time">Sincronización cabera: <xliff:g example="2017/1/1 12:00" id="time">%s</xliff:g></string>
<string name="message_tab_field_is_required">Ríquese\'l campu «<xliff:g example="Field" id="name">%s</xliff:g>»</string>
<!--
~ Toast messages, according to https://material.io/guidelines/style/writing.html#writing-capitalization-punctuation ,
@ -492,7 +506,7 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="message_toast_duplicate_filter_rule">Regla duplicada</string>
<string name="message_toast_error_occurred">Asocedió un fallu. Volvi tentalo, por favor</string>
<!-- Toast message for enhanced (paid) features not purchased while trying to restore purchase -->
<string name="message_toast_extra_features_not_purchased">Ameyores non mercaes</string>
<string name="message_toast_extra_features_not_purchased">Nun se mercaron les ameyores</string>
<string name="message_toast_filters_import_hint">Primi «+» pa importar</string>
<string name="message_toast_link_copied_to_clipboard">Copióse l\'enllaz al cartafueyu</string>
<string name="message_toast_livewp_daydream_enabled_message">Equí hai un regalu pequeñu pa ti, alcuéntralu nos axustes del sistema :)</string>
@ -505,6 +519,7 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="message_toast_no_user_selected">Nun s\'esbillaron usuarios</string>
<string name="message_toast_notification_enabled_hint">El fluxu de tuits namái ta disponible cuando ta activáu pero nun ye 100% fiable.</string>
<string name="message_toast_press_again_to_close">Volvi primir pa zarrar</string>
<string name="message_toast_profile_banner_image_updated">Anovóse la imaxe de la pancarta del perfil</string>
<string name="message_toast_retweet_cancelled">Encaboxóse\'l retuit</string>
<string name="message_toast_save_media_no_storage_permission">Precísase\'l permisu d\'almacenamientu pa guardar medios</string>
<string name="message_toast_saved_to_gallery">Guardóse na galería</string>
@ -525,6 +540,8 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="message_toast_unable_to_load_more_statuses">Nun puen cargase tuits anteriores</string>
<string name="message_toast_user_filters_removed">Desanicióse de Peñeres</string>
<string name="message_toast_users_filters_added">Amestóse a peñeres</string>
<string name="message_toast_wrong_api_key">Axustes incorreutos d\'API</string>
<string name="message_toast_wrong_username_password">Nome d\'usuariu/contraseña incorreutos</string>
<string name="message_video_too_long">Videu perllargu</string>
<string name="message_video_too_short">Video percurtiu</string>
<string name="multi_select">Esbilla múltiple</string>
@ -606,7 +623,7 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="permissions_request">Solicitú de permisos</string>
<string name="permissions_request_message">L\'aplicación ta solicitando los permisos de darréu</string>
<string name="phishing_link_warning">Avisu d\'enllaz con phishing</string>
<string name="phishing_link_warning_message_1">Tas abriendo un enllaz nun mensaxe direutu que quiciabes t\'empobine a un sitiu con phishing.\n\nComprueba la direición del sitiu dos vegaes enantes d\'apurrir cualesquier informaicón personal.</string>
<string name="phishing_link_warning_message_1">Tas abriendo un enllaz nun mensaxe direutu que quiciabes t\'empobine a un sitiu con phishing.\n\nComprueba la direición del sitiu dos vegaes enantes d\'apurrir cualesquier información personal.</string>
<string name="phishing_link_warning_message_2">¿De xuru que quies siguir?</string>
<string name="phishing_link_warning_summary">Avísate cuando teas intentando abrir un enllaz sospechosu con phishing nun mensaxe direutu.</string>
<string name="photo">Semeya</string>
@ -617,13 +634,16 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="preference_filter_possibility_sensitive_statuses">Peñerar tuits sensibles</string>
<string name="preference_filter_unavailable_quote_statuses">Peñerar cites non disponibles</string>
<string name="preference_multitasking">Multi-xera</string>
<string name="preference_multitasking_summary">Abre\'l perfil y medios nuna xera nueva</string>
<string name="preference_randomize_account_name">Nome de cuenta al debalu</string>
<string name="preference_randomize_account_name_summary">Nun permite qu\'otres aplicaciones consigan el to nome lleendo les cuentes, ameyora la privacidá.</string>
<string name="preference_randomize_account_rename_accounts_confirm">¿Renomar cuentes esistentes?</string>
<string name="preference_summary_auto_refresh_compatibility_mode">Habilitar pa un intervalu de refrescu más rápidu, aumenta\'l consumu d\'enerxía n\'Android 5.0+</string>
<string name="preference_summary_auto_refresh_power_saving">Para l\'auto-refrescu tando la batería baxa</string>
<string name="preference_summary_background_streaming">Primi ANICIU en cuentes d\'ATRÁS pa caltener abiertu\'l fluxu de tuits</string>
<string name="preference_summary_chrome_custom_tab">Abre enllaces nel restolador integráu (cola potencia de Chromium)</string>
<string name="preference_summary_database_item_limit">Llende cimera d\'elementos atroxaos nes bases de datos pa cada cuenta. Afitar a un valor más pequeñu p\'aforrar espaciu y aumentar la velocidá de carga.</string>
<string name="preference_summary_media_preload_non_metered_network">Precarga medios namái en redes llibres como Wi-Fi</string>
<string name="preference_summary_streaming_non_metered_network">El fluxu de tuits namái en redes llibres como Wi-Fi</string>
<string name="preference_summary_streaming_power_saving">Fluxu de tuita namái al cargar</string>
<string name="preference_summary_trends_location">Agora pues afitar l\'allugamientu de mou separtáu na llingüeta d\'axustes.</string>
@ -649,6 +669,7 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="preference_title_streaming_power_saving">Mou d\'aforru d\'enerxía</string>
<string name="preference_title_tablet_mode">Mou tableta</string>
<string name="preference_title_text_size">Tamañu del testu</string>
<string name="preference_title_translate">Tornar</string>
<string name="preference_title_trends_location">Allugamientu de tendencies</string>
<string name="preload_wifi_only">Precargar usando namái Wi-Fi</string>
<string name="preview">Previsualización</string>
@ -760,6 +781,7 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="select_user">Esbilla d\'usuariu</string>
<string name="select_user_list">Esbillar llistáu d\'usuariu</string>
<string name="send_anyway">Unviar de toes toes</string>
<string name="send_at">Unviar en</string>
<string name="send_crash_report">Unviu d\'informe de fallu de Twidere</string>
<string name="send_direct_message">Unviar MD</string>
<string name="send_follow_request">Unviar solicitú de siguimientu</string>
@ -817,6 +839,7 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="stream_type_home">Aniciu</string>
<string name="stream_type_interactions">Interaiciones</string>
<string name="stream_type_messages">Mensaxes</string>
<string name="stream_type_notification_users">Los usuarios habilitaron los avisos</string>
<string name="streaming">Tuits en tiempu real</string>
<string name="style">Estilu</string>
<string name="subscribed_to_list">Soscribiéstite al llistáu «<xliff:g id="list">%s</xliff:g>».</string>
@ -853,6 +876,8 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="timeline_sync_service">Serviciu de sincronización de llinia temporal</string>
<string name="title_about">Tocante a</string>
<string name="title_accounts">Cuentes</string>
<string name="title_add_or_remove_from_list">Amestar o desaniciar del llistáu</string>
<string name="title_block_user">Bloquiar a <xliff:g id="name">%s</xliff:g></string>
<string name="title_blocked_users">Usuarios bloquiaos</string>
<string name="title_browser_sign_in">Aniciu de sesión col restolador</string>
<string name="title_compose">Componer</string>
@ -868,6 +893,7 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<!-- Enhanced (paid) features title -->
<string name="title_extra_features">Carauterístiques ameyoraes</string>
<!-- [noun] Twitter's favorite, in the plural -->
<string name="title_favorites">Favoritos</string>
<string name="title_filters">Peñeres</string>
<string name="title_filters_subscription_invalid">Soscripción non válida</string>
<string name="title_filters_subscription_url">URL</string>
@ -895,6 +921,8 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<string name="title_sync_settings">Axustes de sincronización</string>
<string name="title_user">Usuariu</string>
<string name="title_user_colors">Colores d\'usuariu</string>
<string name="title_user_list_memberships">Perteneces a</string>
<string name="title_user_list_ownerships">Creóse</string>
<string name="title_user_list_subscriptions">Soscripciones</string>
<string name="title_users_favorited_this">Usuarios que marcaron esto como favoritu</string>
<string name="title_users_liked_this">Usuarios que-yos prestó esto</string>
@ -940,6 +968,7 @@ Convertilu a un tuit normal amiesta una caráuter estra.</string>
<!-- User list description -->
<string name="user_list_details_description">Descripción</string>
<!-- User list is public -->
<string name="user_list_details_is_public">Públicu</string>
<!-- User list name -->
<string name="user_list_details_name">Nome</string>
<string name="user_lists">Llistaos</string>

View File

@ -8,7 +8,7 @@
<string name="account_type_fanfou">Fanfou</string>
<string name="account_type_twitter">Twitter</string>
<string name="action_accept_friend_request">Setuju</string>
<string name="action_accept_permission_request">同意並授權</string>
<string name="action_accept_permission_request">Setuju</string>
<string name="action_accepting_follow_request">menyetujui permintaa mengikuti</string>
<string name="action_add">Tambahkan</string>
<string name="action_add_conversation_participant">Tambah Anggota</string>
@ -16,8 +16,6 @@
<string name="action_add_filter_rule">Tambah aturan</string>
<string name="action_add_member">Tambah Anggota</string>
<string name="action_add_tab">Tambah tab</string>
<string name="action_add_to_filter">新增到過濾器</string>
<string name="action_add_to_list">新增到列表</string>
<string name="action_adding_member">menambahkan anggota</string>
<!-- [verb] Action for blocking user -->
<string name="action_block">Blok</string>
@ -34,7 +32,6 @@
<string name="action_deleting">menghapus</string>
<string name="action_deleting_search">menghapus pencarian</string>
<string name="action_denying_follow_request">tolak permintaan mengikuti</string>
<string name="action_dont_restart">不重啟</string>
<!-- [verb] Edit image/settings etc. -->
<string name="action_edit">Sunting</string>
<string name="action_favorite">Favorit</string>
@ -81,10 +78,8 @@
<!-- [verb] Save settings/files etc. -->
<string name="action_save">Simpan</string>
<string name="action_saving_search">menyimpan pencarian</string>
<string name="action_search">搜尋</string>
<string name="action_select_all">Pilih semua</string>
<string name="action_select_none">Tidak memilih</string>
<string name="action_select_user">選擇使用者</string>
<!-- [verb] Send tweet/message -->
<string name="action_send">Kirim</string>
<string name="action_sending_direct_message">Mengirim pesan langsung</string>
@ -277,7 +272,7 @@
<string name="filter_type_keywords">Kata kunci</string>
<string name="filter_type_links">Tautan</string>
<string name="filter_type_sources">Sumber</string>
<string name="filter_type_users">使用者</string>
<string name="filter_type_users">Pengguna</string>
<string name="filter_user_confirm_message">Tambahkan <xliff:g example="Username" id="name"/> pada penyaringan?</string>
<string name="follow_request_sent">Permintaan mengikuti terkirim</string>
<string name="followed_user"><xliff:g id="user">%s</xliff:g> diikuti.</string>
@ -311,7 +306,6 @@
<string name="highlight_and_underline">Sorot dan garis bawah</string>
<string name="hint_accounts_dashboard_message">Geser dari ujung layar untuk membuka panel akun.</string>
<string name="hint_accounts_dashboard_title">Panel Akun</string>
<string name="hint_error_message_no_content">沒有內容</string>
<string name="hint_no_account">Tidak ada akun</string>
<string name="hints">Petunjuk</string>
<string name="home_refresh">Segarkan pada timeline</string>
@ -343,9 +337,7 @@
<string name="label_background_operation_service">Latar Belakang layanan operasi</string>
<string name="label_data_provider">Penyedia database Twidere</string>
<string name="label_location_your_coarse_location">Lokasi anda secara kasar</string>
<string name="label_media">媒體</string>
<string name="label_original_status">Cuit asli</string>
<string name="label_photo">照片</string>
<string name="label_poll">Pemungutan suara</string>
<string name="label_refresh_and_sync_service">Muat ulang &amp; Menyinkronisasikan layanan</string>
<string name="label_refresh_service">Segarkan layanan</string>
@ -357,7 +349,7 @@
<string name="large">Banyak</string>
<string name="leftside_compose_button">Tombol susun di kiri</string>
<string name="leftside_compose_button_summary">Pasang tombol susun di kiri.</string>
<string name="light">亮色</string>
<string name="light">Terang</string>
<string name="link_highlight_option">Opsi menyoroti link</string>
<string name="link_to_quoted_status">Tautan ke kutipan twit</string>
<string name="list_members">Daftarkan anggota</string>
@ -423,7 +415,7 @@
<string name="message_toast_login_verification_failed">Gagal Menverifikasi Login.</string>
<!-- Toast message for network errors -->
<string name="message_toast_network_error">Masalah Jaringan.</string>
<string name="message_toast_no_account">沒有帳號</string>
<string name="message_toast_no_account">Tidak ada akun</string>
<string name="message_toast_no_account_selected">Tidak ada akun yang dipilih.</string>
<string name="message_toast_no_user_selected">Tidak ada pengguna yang dipilih</string>
<string name="message_toast_press_again_to_close">Tekan sekali lagi untuk keluar</string>
@ -457,7 +449,7 @@
<string name="name_and_count_retweeted"><xliff:g id="user_name">%1$s</xliff:g> dan <xliff:g id="retweet_count">%2$d</xliff:g> lainnya me-retweet</string>
<string name="name_first">Tampilkan nama lebih dahulu</string>
<string name="name_first_summary_off">Tampilkan @screenname dahulu</string>
<string name="name_first_summary_on">優先顯示名字</string>
<string name="name_first_summary_on">Tampilkan nama depan</string>
<string name="name_not_set"><xliff:g id="name">%s</xliff:g> tidak diatur</string>
<string name="name_retweeted"><xliff:g id="user_name">%s</xliff:g> me-retweet</string>
<string name="name_with_nickname"><xliff:g id="name">%1$s</xliff:g> (<xliff:g id="nickname">%2$s</xliff:g>)</string>
@ -469,8 +461,8 @@
<string name="new_document_api_summary">Buka profil dan media pada tugas baru</string>
<string name="new_user_list">Daftar baru</string>
<!-- Next item (tweet, user etc.) -->
<string name="next_item">下一條</string>
<string name="next_step">下一步</string>
<string name="next_item">Lanjutkan</string>
<string name="next_step">Lanjut</string>
<string name="next_tab">Tab berikutnya</string>
<string name="no_close_after_status_updated">Tetap \"Menulis\" terbuka setelah tweet terkirim</string>
<string name="no_close_after_status_updated_summary">Sebuah hadiah kecil untuk chatterbox</string>
@ -479,7 +471,7 @@
<string name="no_rule">Tak ada aturan</string>
<string name="no_status_content_text">Tidak ada konten</string>
<string name="no_tab">Tidak terdapat tab</string>
<string name="no_tab_hint">沒有標籤頁</string>
<string name="no_tab_hint">Tidak ada tab</string>
<string name="no_thanks">Tidak, terima kasih</string>
<string name="no_user_found">Tidak menemukan pengguna</string>
<string name="no_version_suffix">Tidak ada akhiran versi</string>
@ -493,8 +485,6 @@
<string name="notification_ringtone">Nada dering</string>
<string name="notification_status">Tweet baru oleh <xliff:g id="user">%s</xliff:g></string>
<string name="notification_status_multiple">Tweet baru oleh <xliff:g id="user">%1$s</xliff:g> dan <xliff:g id="count">%2$d</xliff:g> lainnya</string>
<string name="notification_type_home">首頁</string>
<string name="notification_type_interactions">互動</string>
<string name="notification_type_messages">Pesan</string>
<string name="notifications">Notifikasi</string>
<string name="notifications_type">Jenis pemberitahuan</string>
@ -541,7 +531,6 @@
<string name="preference_randomize_account_name">Hasilkan nama akun secara acak</string>
<string name="preference_randomize_account_name_summary">Menghalau aplikasi lain untuk mengambil nama Anda dengan cara membaca akun, meningkatkan privasi.</string>
<string name="preference_randomize_account_rename_accounts_confirm">Ganti nama akun yang ada?</string>
<string name="preference_summary_auto_refresh_power_saving">電量低時停止自動更新</string>
<string name="preference_summary_database_item_limit">Batas atas item yang disimpan pada database untuk tiap akun, berikan nilai kecil untuk menghemat ruang dan meningkatkan kecepatan muat.</string>
<string name="preference_title_accounts">Akun</string>
<string name="preference_title_advanced">Lanjutan</string>
@ -551,9 +540,8 @@
<string name="preference_title_landscape">Lanskap</string>
<string name="preference_title_portrait">Layar Tegak</string>
<string name="preference_title_storage">Penyimpanan</string>
<string name="preference_title_streaming_enabled">啟用實時流</string>
<string name="preference_title_text_size">Ukuran teks</string>
<string name="preference_title_translate">翻譯</string>
<string name="preference_title_translate">Terjemahkan</string>
<string name="preference_title_trends_location">Lokasi tren</string>
<string name="preload_wifi_only">Preload menggunakan Wi-Fi saja</string>
<string name="preview">Pratinjau</string>
@ -580,7 +568,7 @@
<!-- Normally you don't need to translate this -->
<string name="provider_default">Twidere</string>
<!-- Fanfou is a Chinese micro blogging website http://fanfou.com/ -->
<string name="provider_fanfou">飯否</string>
<string name="provider_fanfou">Fanfou</string>
<string name="provider_gnusocial_de">GNU Social.de</string>
<string name="provider_gnusocial_net">GNU Social.net</string>
<string name="provider_loadaverage_org">LoadAverage.org</string>
@ -612,8 +600,6 @@
<string name="refresh_interval">Interval refresh</string>
<string name="refresh_on_start">Muat ulang di awal</string>
<string name="refresh_on_start_summary">Muat ulang timeline dan mention saat memulai.</string>
<string name="refresh_type_home">首頁</string>
<string name="refresh_type_interactions">互動</string>
<string name="refresh_type_messages">Pesan</string>
<string name="refresh_type_trends">Tren</string>
<string name="register">Registrasi</string>
@ -655,7 +641,7 @@
<string name="search_hint">Pencarian tweets atau pengguna</string>
<string name="search_statuses">Cari Kicauan</string>
<string name="search_type_statuses">Kicauan</string>
<string name="search_type_users">用戶</string>
<string name="search_type_users">Pengguna</string>
<string name="security_key">Kunci keamanan</string>
<string name="select_account">Pilih akun</string>
<string name="select_accounts">Pilih akun</string>
@ -675,8 +661,7 @@
<string name="settings">Pengaturan</string>
<string name="settings_interface">Antarmuka</string>
<string name="settings_notifications">Notifikasi</string>
<string name="settings_refresh">更新</string>
<string name="settings_streaming">實時流</string>
<string name="settings_refresh">Segarkan</string>
<string name="share_format">Bagikan format</string>
<string name="share_format_summary">\"[TITLE]\" = Konten title\n\"[TEXT]\" = Teks konten</string>
<string name="share_link">Bagikan tautan</string>
@ -716,9 +701,7 @@
<string name="status_shortener">Penyingkat tweet</string>
<string name="status_shortener_default">Tidak ada (Batal mengirim)</string>
<!-- [noun] Accessibility label for retweet icon -->
<string name="status_type_retweet">轉推</string>
<string name="stream_type_home">首頁</string>
<string name="stream_type_interactions">互動</string>
<string name="status_type_retweet">Retweet</string>
<string name="stream_type_messages">Pesan</string>
<string name="streaming">Streaming</string>
<string name="style">Gaya</string>
@ -731,7 +714,7 @@
<string name="tab_display_option_icon">Ikon</string>
<string name="tab_display_option_icon_and_label">Gambar dan tanda</string>
<string name="tab_display_option_label">Tanda</string>
<string name="tab_editor_hint_name">名字</string>
<string name="tab_editor_hint_name">Nama</string>
<string name="tabs">Tab</string>
<string name="tcp_dns_query">TCP DNS Query</string>
<string name="tcp_dns_query_summary">Gunakan Protokol TCP untuk membuat permintaan DNS untuk menghindari DNS spoofing.</string>
@ -747,18 +730,17 @@
<string name="theme_dark">Gelap</string>
<string name="theme_dark_actionbar">Bar aksi gelap</string>
<string name="theme_font_family">Tema font keluarga</string>
<string name="theme_light">燈光</string>
<string name="theme_light">Terang</string>
<string name="thumbor_integration">Integrasi dengan Thumbor</string>
<string name="time_source"><xliff:g id="time">%1$s</xliff:g> · <xliff:g id="source">%2$s</xliff:g></string>
<string name="timeline_streaming_running">Timeline streaming yang berjalan</string>
<string name="timeline_sync_service">Layanan sinkronisasi timeline</string>
<string name="title_about">Tentang</string>
<string name="title_accounts">帳號</string>
<string name="title_add_or_remove_from_list">從列表新增或移除</string>
<string name="title_accounts">Akun</string>
<string name="title_block_user">Blok <xliff:g id="name">%s</xliff:g></string>
<string name="title_blocked_users">Pengguna diblokir</string>
<string name="title_browser_sign_in">Masuk melalui browser</string>
<string name="title_compose">撰寫</string>
<string name="title_compose">Susun</string>
<string name="title_conversation">Percakapan</string>
<string name="title_dialog_sync_connect_to">Menghubungkan ke&#8230;</string>
<string name="title_direct_messages">Pesan</string>
@ -777,25 +759,22 @@
<string name="title_home">Beranda</string>
<!-- [noun] Like, Formerly Twitter's favorite, in the plural -->
<string name="title_likes">Suka</string>
<string name="title_manage_filter_subscriptions">過濾器訂閱</string>
<string name="title_manage_filter_subscriptions">Menyaring langganan</string>
<string name="title_mentions">Menyebutkan</string>
<string name="title_nicknames">Nama panggilan</string>
<string name="title_open_source_license">Lisensi Open Source</string>
<string name="title_premium_features_name">Twidere ∞</string>
<string name="title_search">搜尋</string>
<string name="title_select_users">Pilih pengguna</string>
<string name="title_set_nickname">設定暱稱</string>
<string name="title_set_nickname">Tentukan nama panggilan</string>
<string name="title_status">Tweet</string>
<string name="title_statuses">推文</string>
<string name="title_streaming">實時流</string>
<string name="title_subscription_name">名稱</string>
<string name="title_subscription_url">網址</string>
<string name="title_statuses">Kicauan</string>
<string name="title_subscription_name">Nama</string>
<string name="title_subscription_url">Alamat web</string>
<string name="title_summary_line_format"><xliff:g id="title">%1$s </xliff:g>: <xliff:g id="summary">%2$s </xliff:g></string>
<string name="title_sync">Sinkronasi Data</string>
<string name="title_sync_settings">Sinkronisasi pengaturan</string>
<string name="title_user">Pengguna</string>
<string name="title_user_colors">Warna pengguna</string>
<string name="title_user_list_memberships">屬於</string>
<string name="title_users_favorited_this">Disukai para pengguna</string>
<string name="title_users_liked_this">Pengguna menyukai ini</string>
<string name="title_users_retweeted_this">Pengguna yang me-retweet ini</string>
@ -842,14 +821,14 @@
<!-- User list is public -->
<string name="user_list_details_is_public">Publik</string>
<!-- User list name -->
<string name="user_list_details_name">名字</string>
<string name="user_lists">列表</string>
<string name="user_list_details_name">Nama</string>
<string name="user_lists">Daftar-dafar</string>
<string name="user_mentioned_you"><xliff:g id="nama">%s</xliff:g> me-mention anda</string>
<string name="user_mentions">Mention pengguna</string>
<string name="user_profile_description">簡介</string>
<string name="user_profile_description">Deskripsi</string>
<string name="user_profile_location">Lokasi</string>
<string name="user_profile_name">名字</string>
<string name="user_profile_url">網址</string>
<string name="user_profile_name">Nama</string>
<string name="user_profile_url">Alamat web</string>
<string name="user_protected_summary">Anda perlu mengirim permintaan mengikuti kepada pengguna yang diproteksi ini untuk melihat tweetnya</string>
<string name="user_type_protected">Dilindungi</string>
<string name="user_type_verified">Diverifikasi</string>

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Twidere - Twitter client for Android
~
~ Copyright (C) 2012-2017 Mariotaku Lee <mariotaku.lee@gmail.com>
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<array name="entries_app_languages">
<item>""</item>
<item>af</item>
<item>an</item>
<item>ar</item>
<item>ast</item>
<item>ca</item>
<item>cs</item>
<item>da</item>
<item>de</item>
<item>el</item>
<item>en_GB</item>
<item>es</item>
<item>fa</item>
<item>fi</item>
<item>fr</item>
<item>gl</item>
<item>hi</item>
<item>hr</item>
<item>hu</item>
<item>in</item>
<item>it</item>
<item>iw</item>
<item>ja</item>
<item>ko</item>
<item>lo</item>
<item>ms</item>
<item>nl</item>
<item>no</item>
<item>pl</item>
<item>pt</item>
<item>ro</item>
<item>ru</item>
<item>sk</item>
<item>sr</item>
<item>sv</item>
<item>ta</item>
<item>te</item>
<item>th</item>
<item>tr</item>
<item>uk</item>
<item>vi</item>
<item>zh</item>
<item>zh_CN</item>
<item>zh_HK</item>
<item>zu</item>
</array>
<array name="values_app_languages">
<item>System Default</item>
<item>Afrikaans</item>
<item>Aragonese</item>
<item>Arabic</item>
<item>Asturian</item>
<item>Catalan</item>
<item>Czech</item>
<item>Danish</item>
<item>German</item>
<item>Greek</item>
<item>English (UK)</item>
<item>Spanish</item>
<item>Persian</item>
<item>Finnish</item>
<item>French</item>
<item>Galician</item>
<item>Hindi</item>
<item>Croatian</item>
<item>Hungarian</item>
<item>Indonesian</item>
<item>Italian</item>
<item>Hebrew</item>
<item>Japanese</item>
<item>Korean</item>
<item>Lao</item>
<item>Malay</item>
<item>Dutch</item>
<item>Norwegian</item>
<item>Polish</item>
<item>Portuguese</item>
<item>Romanian</item>
<item>Russian</item>
<item>Slovak</item>
<item>Serbian</item>
<item>Swedish</item>
<item>Tamil</item>
<item>Telugu</item>
<item>Thai</item>
<item>Turkish</item>
<item>Ukrainian</item>
<item>Vietnamese</item>
<item>Chinese</item>
<item>Chinese (Simplified)</item>
<item>Chinese (Hong Kong)</item>
<item>Zulu</item>
</array>
</resources>

View File

@ -807,6 +807,7 @@
<string name="preference_title_media_preload_non_metered_network">Preload on free network</string>
<string name="preference_title_multi_column_tab_width">Multi column tab width</string>
<string name="preference_title_multi_column_tabs">Multi column tabs</string>
<string name="preference_title_override_language">Override language</string>
<string name="preference_title_portrait">Portrait</string>
<string name="preference_title_storage">Storage</string>
<string name="preference_title_streaming_content">Streaming content</string>

View File

@ -32,5 +32,15 @@
android:name="should_recreate"
android:value="true"/>
</SwitchPreferenceCompat>
<org.mariotaku.twidere.preference.EntrySummaryListPreference
android:defaultValue=""
android:entries="@array/values_app_languages"
android:entryValues="@array/entries_app_languages"
android:key="override_language"
android:title="@string/preference_title_override_language">
<extra
android:name="should_terminate"
android:value="true"/>
</org.mariotaku.twidere.preference.EntrySummaryListPreference>
</PreferenceScreen>