新增:多语言切换设置适应国际化 #378

新增:繁体中文语言包(机器转换)
This commit is contained in:
pppscn 2023-12-20 14:36:53 +08:00
parent d3fc481d0c
commit 2b4468b669
18 changed files with 2896 additions and 68 deletions

View File

@ -173,6 +173,12 @@ android {
}
}
bundle {
language {
enableSplit = false
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
@ -278,6 +284,8 @@ dependencies {
//https://github.com/getActivity/XXPermissions
implementation 'com.github.getActivity:XXPermissions:18.5'
//https://github.com/getActivity/MultiLanguages
implementation 'com.github.getActivity:MultiLanguages:9.3'
def mail_version = '1.6.7'
implementation "com.sun.mail:android-mail:$mail_version"
@ -307,9 +315,9 @@ dependencies {
//Java Parser For Cron Expressions: https://github.com/grahamar/cron-parser
implementation 'net.redhogs.cronparser:cron-parser-core:3.5'
// https://github.com/yarolegovich/SlidingRootNav
//https://github.com/yarolegovich/SlidingRootNav
implementation 'com.yarolegovich:sliding-root-nav:1.1.1'
// TabBarhttps://github.com/xuexiangjys/JPTabBar
//TabBarhttps://github.com/xuexiangjys/JPTabBar
// implementation 'com.github.xuexiangjys:JPTabBar:1.0.1'
}
//X-Library依赖

View File

@ -302,3 +302,6 @@
# This is generated automatically by the Android Gradle plugin.
-dontwarn org.joda.convert.**
-dontwarn org.slf4j.impl.**
# MultiLanguages
-keep class com.hjq.language.** {*;}

View File

@ -17,6 +17,8 @@ import androidx.work.Configuration
import com.gyf.cactus.Cactus
import com.gyf.cactus.callback.CactusCallback
import com.gyf.cactus.ext.cactus
import com.hjq.language.MultiLanguages
import com.hjq.language.OnLanguageListener
import com.idormy.sms.forwarder.activity.MainActivity
import com.idormy.sms.forwarder.core.Core
import com.idormy.sms.forwarder.database.AppDatabase
@ -90,7 +92,9 @@ class App : Application(), CactusCallback, Configuration.Provider by Core {
}
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
//super.attachBaseContext(base)
// 绑定语种
super.attachBaseContext(MultiLanguages.attach(base))
//解决4.x运行崩溃的问题
MultiDex.install(this)
}
@ -230,6 +234,18 @@ class App : Application(), CactusCallback, Configuration.Provider by Core {
XUpdateInit.init(this)
// 运营统计数据
UMengInit.init(this)
// 初始化语种切换框架
MultiLanguages.init(this)
// 设置语种变化监听器
MultiLanguages.setOnLanguageListener(object : OnLanguageListener {
override fun onAppLocaleChange(oldLocale: Locale, newLocale: Locale) {
Log.i(TAG, "监听到应用切换了语种,旧语种:$oldLocale,新语种:$newLocale")
}
override fun onSystemLocaleChange(oldLocale: Locale, newLocale: Locale) {
Log.i(TAG, "监听到系统切换了语种,旧语种:" + oldLocale + ",新语种:" + newLocale + ",是否跟随系统:" + MultiLanguages.isSystemLanguage(this@App))
}
})
}
@SuppressLint("CheckResult")

View File

@ -67,10 +67,6 @@ import java.io.File
class MainActivity : BaseActivity<ActivityMainBinding?>(), DrawerAdapter.OnItemSelectedListener {
private val TAG: String = MainActivity::class.java.simpleName
//private lateinit var mTitles: Array<String>
//private var logsType: String = "sms"
//private var ruleType: String = "sms"
private val POS_LOG = 0
private val POS_RULE = 1
private val POS_SENDER = 2

View File

@ -5,6 +5,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import androidx.viewbinding.ViewBinding
import com.hjq.language.MultiLanguages
import com.idormy.sms.forwarder.utils.EVENT_TOAST_ERROR
import com.idormy.sms.forwarder.utils.EVENT_TOAST_INFO
import com.idormy.sms.forwarder.utils.EVENT_TOAST_SUCCESS
@ -18,7 +19,6 @@ import com.xuexiang.xrouter.facade.service.SerializationService
import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.utils.ResUtils
import com.xuexiang.xui.widget.slideback.SlideBack
import io.github.inflationx.viewpump.ViewPumpContextWrapper
/**
* 基础容器Activity
@ -41,7 +41,10 @@ open class BaseActivity<Binding : ViewBinding?> : XPageActivity() {
override fun attachBaseContext(newBase: Context) {
//注入字体
super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
//super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase))
// 绑定语种
//super.attachBaseContext(ViewPumpContextWrapper.wrap(MultiLanguages.attach(newBase)))
super.attachBaseContext(MultiLanguages.attach(newBase))
}
override fun getCustomRootView(): View? {

View File

@ -21,11 +21,9 @@ import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory
import com.idormy.sms.forwarder.database.viewmodel.MsgViewModel
import com.idormy.sms.forwarder.databinding.FragmentLogsBinding
import com.idormy.sms.forwarder.utils.EVENT_UPDATE_LOGS_TYPE
import com.idormy.sms.forwarder.utils.FORWARD_STATUS_MAP
import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page
@ -125,7 +123,6 @@ class LogsFragment : BaseFragment<FragmentLogsBinding?>(), MsgPagingAdapter.OnIt
else -> "sms"
}
viewModel.setType(currentType)
LiveEventBus.get(EVENT_UPDATE_LOGS_TYPE, String::class.java).post(currentType)
adapter.refresh()
binding!!.recyclerView.scrollToPosition(0)
}

View File

@ -15,12 +15,10 @@ import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory
import com.idormy.sms.forwarder.database.viewmodel.RuleViewModel
import com.idormy.sms.forwarder.databinding.FragmentRulesBinding
import com.idormy.sms.forwarder.utils.EVENT_UPDATE_RULE_TYPE
import com.idormy.sms.forwarder.utils.KEY_RULE_CLONE
import com.idormy.sms.forwarder.utils.KEY_RULE_ID
import com.idormy.sms.forwarder.utils.KEY_RULE_TYPE
import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page
@ -90,7 +88,6 @@ class RulesFragment : BaseFragment<FragmentRulesBinding?>(), RulePagingAdapter.O
else -> "sms"
}
viewModel.setType(currentType)
LiveEventBus.get(EVENT_UPDATE_RULE_TYPE, String::class.java).post(currentType)
adapter.refresh()
binding!!.recyclerView.scrollToPosition(0)
}

View File

@ -23,6 +23,8 @@ import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import com.hjq.language.LocaleContract
import com.hjq.language.MultiLanguages
import com.hjq.permissions.OnPermissionCallback
import com.hjq.permissions.Permission
import com.hjq.permissions.XXPermissions
@ -167,6 +169,9 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
//纯自动任务模式
switchDirectlyToTask(binding!!.sbDirectlyToTask)
//多语言设置
switchLanguage(binding!!.rgMainLanguages)
}
override fun onResume() {
@ -982,6 +987,58 @@ class SettingsFragment : BaseFragment<FragmentSettingsBinding?>(), View.OnClickL
}
}
//多语言设置
private fun switchLanguage(rgMainLanguages: RadioGroup) {
rgMainLanguages.check(
if (MultiLanguages.isSystemLanguage(requireContext())) {
R.id.rb_main_language_auto
} else {
when (MultiLanguages.getAppLanguage(requireContext())) {
LocaleContract.getSimplifiedChineseLocale() -> R.id.rb_main_language_cn
LocaleContract.getTraditionalChineseLocale() -> R.id.rb_main_language_tw
LocaleContract.getEnglishLocale() -> R.id.rb_main_language_en
else -> R.id.rb_main_language_auto
}
}
)
rgMainLanguages.setOnCheckedChangeListener { _, checkedId ->
// 是否需要重启
val restart = when (checkedId) {
R.id.rb_main_language_auto -> {
// 跟随系统
MultiLanguages.clearAppLanguage(requireContext())
}
R.id.rb_main_language_cn -> {
// 简体中文
MultiLanguages.setAppLanguage(requireContext(), LocaleContract.getSimplifiedChineseLocale())
}
R.id.rb_main_language_tw -> {
// 繁体中文
MultiLanguages.setAppLanguage(requireContext(), LocaleContract.getTraditionalChineseLocale())
}
R.id.rb_main_language_en -> {
// 英语
MultiLanguages.setAppLanguage(requireContext(), LocaleContract.getEnglishLocale())
}
else -> false
}
// 重启应用
if (restart) {
XToastUtils.toast(R.string.multi_languages_toast)
val intent = requireActivity().baseContext.packageManager.getLaunchIntentForPackage(requireActivity().baseContext.packageName)
intent!!.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
startActivity(intent)
requireActivity().finish()
}
}
}
//获取当前手机品牌
private fun getAutoStartTips(): String {
return when (Build.BRAND.lowercase(Locale.ROOT)) {

View File

@ -15,11 +15,9 @@ import com.idormy.sms.forwarder.database.entity.Task
import com.idormy.sms.forwarder.database.viewmodel.BaseViewModelFactory
import com.idormy.sms.forwarder.database.viewmodel.TaskViewModel
import com.idormy.sms.forwarder.databinding.FragmentTasksBinding
import com.idormy.sms.forwarder.utils.EVENT_UPDATE_TASK_TYPE
import com.idormy.sms.forwarder.utils.KEY_TASK_CLONE
import com.idormy.sms.forwarder.utils.KEY_TASK_ID
import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xpage.annotation.Page
@ -80,7 +78,6 @@ class TasksFragment : BaseFragment<FragmentTasksBinding?>(), TaskPagingAdapter.O
else -> "mine"
}
viewModel.setType(currentType)
LiveEventBus.get(EVENT_UPDATE_TASK_TYPE, String::class.java).post(currentType)
adapter.refresh()
binding!!.recyclerView.scrollToPosition(0)
}

View File

@ -358,11 +358,6 @@ const val EVENT_TOAST_ERROR = "key_toast_error"
const val EVENT_TOAST_INFO = "key_toast_info"
const val EVENT_TOAST_WARNING = "key_toast_warning"
//主页监听时间
const val EVENT_UPDATE_LOGS_TYPE = "key_logs_type"
const val EVENT_UPDATE_RULE_TYPE = "key_rules_type"
const val EVENT_UPDATE_TASK_TYPE = "key_tasks_type"
const val KEY_SENDER_ID = "key_sender_id"
const val KEY_SENDER_TYPE = "key_sender_type"
const val KEY_SENDER_CLONE = "key_sender_clone"

View File

@ -1306,6 +1306,7 @@
style="@style/settingBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingEnd="15dp"
tools:ignore="RtlSymmetry">
@ -1377,6 +1378,7 @@
style="@style/settingBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingEnd="15dp"
tools:ignore="RtlSymmetry">
@ -1650,6 +1652,68 @@
</LinearLayout>
<LinearLayout
style="@style/settingBarStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false"
android:gravity="center_vertical"
android:orientation="vertical"
android:paddingEnd="15dp"
tools:ignore="RtlSymmetry">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/multi_languages"
android:textStyle="bold" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:text="@string/multi_languages_tips"
android:textSize="@dimen/text_size_mini"
tools:ignore="SmallSp" />
</LinearLayout>
<RadioGroup
android:id="@+id/rg_main_languages"
style="@style/rg_style"
android:gravity="center_horizontal"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_main_language_auto"
style="@style/rg_rb_style"
android:checked="true"
android:text="@string/follow_system" />
<RadioButton
android:id="@+id/rb_main_language_cn"
style="@style/rg_rb_style"
android:text="@string/simplified_chinese" />
<RadioButton
android:id="@+id/rb_main_language_tw"
style="@style/rg_rb_style"
android:text="@string/traditional_chinese" />
<RadioButton
android:id="@+id/rb_main_language_en"
style="@style/rg_rb_style"
android:text="@string/english" />
</RadioGroup>
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@ -57,7 +57,7 @@
android:layout_marginStart="5dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="5dp"
android:gravity="bottom"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
@ -71,8 +71,9 @@
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:text="@string/task_conditions_tips"
android:textSize="@dimen/text_size_small"
android:textSize="@dimen/text_size_mini"
tools:ignore="SmallSp" />
</LinearLayout>
<LinearLayout
@ -142,7 +143,7 @@
android:layout_marginStart="5dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="5dp"
android:gravity="bottom"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
@ -156,8 +157,9 @@
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:text="@string/task_actions_tips"
android:textSize="@dimen/text_size_small"
android:textSize="@dimen/text_size_mini"
tools:ignore="SmallSp" />
</LinearLayout>
<LinearLayout

View File

@ -1,21 +1,21 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="type_param_sms">短信</string>
<string name="type_param_call">通话</string>
<string name="type_param_app">应用</string>
<string name="status_param_option_enabled">已启用</string>
<string name="status_param_option_disabled">已禁用</string>
<string name="sms_type_option_receive">接收</string>
<string name="sms_type_option_send">发送</string>
<string name="call_type_option_missed">未接来电</string>
<string name="call_type_option_call_out">本机去电</string>
<string name="call_type_option_received">已接来电</string>
<string name="clone_type_option_network">网络模式</string>
<string name="clone_type_option_offline">离线模式</string>
<string name="app_type_option_user">用户应用</string>
<string name="app_type_option_system">系统应用</string>
<string name="task_type_option_mine">我的任务</string>
<string name="task_type_option_fixed">任务中心</string>
<string name="type_param_sms">Sms</string>
<string name="type_param_call">Call</string>
<string name="type_param_app">App</string>
<string name="status_param_option_enabled">Enabled</string>
<string name="status_param_option_disabled">Disabled</string>
<string name="sms_type_option_receive">Receive</string>
<string name="sms_type_option_send">Send</string>
<string name="call_type_option_missed">Missed</string>
<string name="call_type_option_call_out">Call Out</string>
<string name="call_type_option_received">Received</string>
<string name="clone_type_option_network">Network</string>
<string name="clone_type_option_offline">Offline</string>
<string name="app_type_option_user">User App</string>
<string name="app_type_option_system">System App</string>
<string name="task_type_option_mine">Mine</string>
<string name="task_type_option_fixed">Fixed</string>
<string name="app_browser_name">Universal Browser</string>
<string name="description_navigation_main">navigation</string>
@ -552,19 +552,19 @@
<string name="step_4">Logs</string>
<string name="todo">TODO</string>
<string name="forwarding_function">Forwarding Function</string>
<string name="forwarding_function_tips">Main switch: Enable the forwarding function as required</string>
<string name="forwarding_function_tips">Main switch: Enable the function as required</string>
<string name="extra_function">Extra Function</string>
<string name="extra_function_tips">Enable the extra function as required</string>
<string name="call_date">Call date: </string>
<string name="call_duration">Call duration: </string>
<string name="ring_duration">Ring duration: </string>
<string name="type">Type: </string>
<string name="mandatory_type">Call type: </string>
<string name="incoming_call_received">Incoming Received</string>
<string name="incoming_call_answered">Incoming Answered</string>
<string name="incoming_call_ended">Incoming Ended</string>
<string name="outgoing_call_started">Outgoing Started</string>
<string name="outgoing_call_ended">Outgoing Ended</string>
<string name="mandatory_type">Call Type: </string>
<string name="incoming_call_received">In Received</string>
<string name="incoming_call_answered">In Answered</string>
<string name="incoming_call_ended">In Ended</string>
<string name="outgoing_call_started">Out Started</string>
<string name="outgoing_call_ended">Out Ended</string>
<string name="missed_call">Missed</string>
<string name="unknown_call">Unknown</string>
<string name="optional_action">Optional: </string>
@ -693,7 +693,6 @@
<string name="toast_granted_part">Some permissions are successfully obtained, but some permissions are not granted normally, and some functions of the APP may be limited!</string>
<string name="toast_denied_never">Permanently denied authorization, go to system settings to manually grant permissions?</string>
<string name="toast_denied">Failed to obtain necessary permissions, APP function may be limited!</string>
<string name="tips_first_time" formatted="false">\n&#160;&#160;&#160;&#160;首次使用请按照1234步骤顺序设置数字点亮表示该步骤已设置(4点亮表示有成功日志)\n\n&#160;&#160;&#160;&#160;根据以往用户反馈90%的新用户最终排查结果都是手机权限设置问题5%的用户是APP保活问题其他问题排查参考Wiki中的常见问题APP右上角使用帮助入口\n\n&#160;&#160;&#160;&#160;强烈建议: 手动排查一下系统设置: 自启动、电源策略、APP的权限把所有权限打开始终允许不要“使用中允许”MIUI系统就全部变绿特别是一些国产定制系统加入隐私保护、验证码保护等例如: MIUI 系统的 空白通行证)\n\n&#160;&#160;&#160;&#160;请选择是否立即“前往系统设置”检查,或“稍后自行处理”?</string>
<string name="play_silence_music">Play Silent Music</string>
<string name="play_silence_music_tips">Play silent music to keep running in the background, which may consume more power, enable it on demand</string>
<string name="one_pixel">One Pixel</string>
@ -1011,22 +1010,22 @@
<string name="service_address_hint">E.g: http://127.0.0.1:5000</string>
<string name="features_list">Features List</string>
<string name="pure_client_mode">Directly To Client</string>
<string name="pure_client_mode_tips">When starting the APP, it will directly enter the active control client</string>
<string name="pure_client_mode_tips">When starting, it will directly enter the control client</string>
<string name="exit_pure_client_mode">Exit pure client mode</string>
<string name="enabling_pure_client_mode">Do you want to quit the app immediately and start it manually to take effect in pure client mode?</string>
<string name="pure_task_mode">Directly To Task</string>
<string name="pure_task_mode_tips">When starting the APP, it will directly enter the task center</string>
<string name="pure_task_mode_tips">When starting, it will directly enter the task center</string>
<string name="exit_pure_task_mode">Exit pure task mode</string>
<string name="enabling_pure_task_mode">Do you want to quit the app immediately and start it manually to take effect in pure task mode?</string>
<string name="optional_components">Optional:</string>
<string name="enable_cactus">Enable Cactus Keep Alive</string>
<string name="enabe_cactus_tips">Dual process foreground service/JobScheduler/WorkManager/1px/silent music</string>
<string name="enabe_cactus_tips">Dual foreground service/JobScheduler/WorkManager/1px/silent music</string>
<string name="load_app_list">Get installed app info async at startup</string>
<string name="load_app_list_tips">Used to speed up entering the application list/editing forwarding rules drop-down selection/replacement {{APP_NAME}}</string>
<string name="load_app_list_toast">A type must be selected when enabling asynchronous loading of the list of installed apps</string>
<string name="no_server_history">There is no history record, it will be added automatically after the interface test is passed</string>
<string name="select_time_period">Select Time Period</string>
<string name="silent_time_period">Disable forwarding period</string>
<string name="silent_time_period">Disable FW. Period</string>
<string name="silent_time_period_tips">If the end time is less than the start time, it will span days; if it is equal, it will be disabled</string>
<string name="download_frpc_tips">Do you want to download and restart to load!</string>
<string name="download_frpc_tips2">Download successful, do you want to restart the loading now?</string>
@ -1114,8 +1113,8 @@
<string name="accuracy">Accuracy</string>
<string name="accuracy_fine">Fine</string>
<string name="accuracy_coarse">Coarse</string>
<string name="no_requirement">No Requirement</string>
<string name="power_requirement">Power Requirement</string>
<string name="no_requirement">No Req.</string>
<string name="power_requirement">Power Needs</string>
<string name="power_requirement_low">Low</string>
<string name="power_requirement_medium">Medium</string>
<string name="power_requirement_high">High</string>
@ -1127,9 +1126,9 @@
<string name="task_name_status">Name/Status</string>
<string name="task_name">Task Name</string>
<string name="task_description">Description</string>
<string name="task_conditions">If</string>
<string name="task_conditions_tips">Influenced by the first condition, the others serve as determinants.</string>
<string name="task_actions">then execute.</string>
<string name="task_conditions">IF</string>
<string name="task_conditions_tips">Influenced by the first condition, the other condition as determinants.</string>
<string name="task_actions">THEN</string>
<string name="task_actions_tips">Allow multiple execution actions, with each execution result being independent of the others.</string>
<string name="task_last_exec_time">Last Exec Time</string>
<string name="task_next_exec_time">Next Exec Time</string>
@ -1139,12 +1138,12 @@
<string name="delete_task_title">Delete confirmation</string>
<string name="delete_task_tips">Are you sure to delete this task?</string>
<string name="delete_task_toast">The task has deleted.</string>
<string name="add_condition">添加条件</string>
<string name="add_condition_tips">例如如果电量低于20%时</string>
<string name="add_condition_continue">继续添加条件</string>
<string name="add_action">添加动作</string>
<string name="add_action_tips">例如:禁用所有转发通道</string>
<string name="add_action_continue">继续添加动作</string>
<string name="add_condition">Add Condition</string>
<string name="add_condition_tips">Example: Below 20% battery</string>
<string name="add_condition_continue">Continue to add condition</string>
<string name="add_action">Add Action</string>
<string name="add_action_tips">Example: Disable all forwarding</string>
<string name="add_action_continue">Continue to add Action</string>
<string name="select_task_trigger">Please select trigger condition</string>
<string name="select_task_condition">Please select additional condition</string>
@ -1278,4 +1277,16 @@
<string name="specified_uid">Specified Uid</string>
<string name="specified_uid_hint">Enter FRPC config UIDs, separate with commas.</string>
<string name="current_language">English</string>
<string name="current_activity_language">Current Activity language: </string>
<string name="current_application_language">Current Application language: </string>
<string name="current_system_language">Current System language: </string>
<string name="multi_languages">Multilingual</string>
<string name="multi_languages_tips">Default language shown on SmsF\'s interface at startup.</string>
<string name="multi_languages_toast">Need to restart the app to switch to your selected language.</string>
<string name="follow_system">Follow Sys.</string>
<string name="simplified_chinese">简体中文</string>
<string name="traditional_chinese">繁體中文</string>
<string name="english">English</string>
</resources>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,85 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- 拓展主题 theme. -->
<style name="XUITheme" parent="XUIBaseTheme" tools:ignore="PrivateResource">
<!--设置默认窗口的动画样式-->
<item name="android:windowAnimationStyle">@style/WindowAnimStyle</item>
</style>
<!-- Base application theme. -->
<style name="AppTheme" parent="XUITheme.Phone">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="xui_actionbar_height">?actionBarSize</item>
<!-- 解决 Android 5.1 及以上版本 Button 英文字符串自动变大写的问题 -->
<item name="android:textAllCaps">false</item>
</style>
<style name="AppTheme.Launch">
<item name="xui_config_color_splash_bg">@color/xui_config_color_white</item>
<item name="xui_config_app_logo_bottom" tools:ignore="PrivateResource">
@dimen/xui_config_app_logo_bottom
</item>
<item name="xui_config_company_logo_bottom" tools:ignore="PrivateResource">
@dimen/xui_config_company_logo_bottom
</item>
<item name="android:windowBackground">@drawable/xui_config_bg_splash</item>
<item name="android:windowFullscreen">true</item>
</style>
<!--窗体背景,这个背景能在第一时间显示, 避免启动时白屏,黑屏问题-->
<style name="AppTheme.Launch.App">
<!--注意修改图标-->
<item name="xui_config_splash_app_logo">@drawable/ic_splash_app_logo</item>
<item name="xui_config_splash_company_logo">@drawable/ic_splash_company_logo</item>
</style>
<!--DialogTheme用于将Activity作为Dialog的主题-->
<style name="DialogTheme" parent="XUITheme.Phone">
<!--设置dialog的背景此处为系统给定的透明值-->
<item name="android:windowBackground">@android:color/transparent</item>
<!--Dialog的windowFrame框为无-->
<item name="android:windowFrame">@null</item>
<!--无标题-->
<item name="android:windowNoTitle">true</item>     
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating" tools:ignore="TranslucentOrientation">true</item>
<!--是否半透明-->
<item name="android:windowIsTranslucent">true</item>
<!--是否有覆盖-->
<item name="android:windowContentOverlay">@null</item>
<!--设置Activity出现方式-->
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<!--背景是否模糊显示-->
<item name="android:backgroundDimEnabled">true</item>
</style>
<style name="SuperButton.Gray.Icon.Spacing">
<item name="android:paddingStart">15dp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/text_size_medium</item>
<item name="android:drawablePadding">0dp</item>
<item name="android:letterSpacing">0.8</item>
</style>
<style name="SuperButton.Blue.Icon.Spacing">
<item name="android:layout_marginStart">10dp</item>
<item name="android:paddingStart">15dp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/text_size_medium</item>
<item name="android:drawablePadding">0dp</item>
<item name="android:letterSpacing">0.8</item>
</style>
<style name="SuperButton.Green.Icon.Spacing">
<item name="android:layout_marginStart">10dp</item>
<item name="android:paddingStart">15dp</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/text_size_medium</item>
<item name="android:drawablePadding">0dp</item>
<item name="android:letterSpacing">0.8</item>
</style>
</resources>

File diff suppressed because it is too large Load Diff

View File

@ -694,7 +694,6 @@
<string name="toast_granted_part">获取部分权限成功但部分权限未正常授予APP部分功能可能受限</string>
<string name="toast_denied_never">被永久拒绝授权,前往系统设置手动授予权限?</string>
<string name="toast_denied">获取必需的权限失败APP功能可能受限</string>
<string name="tips_first_time" formatted="false">\n&#160;&#160;&#160;&#160;首次使用请按照1234步骤顺序设置数字点亮表示该步骤已设置(4点亮表示有成功日志)\n\n&#160;&#160;&#160;&#160;根据以往用户反馈90%的新用户最终排查结果都是手机权限设置问题5%的用户是APP保活问题其他问题排查参考Wiki中的常见问题APP右上角使用帮助入口\n\n&#160;&#160;&#160;&#160;强烈建议手动排查一下系统设置自启动、电源策略、APP的权限把所有权限打开始终允许不要“使用中允许”MIUI系统就全部变绿特别是一些国产定制系统加入隐私保护、验证码保护等例如MIUI 系统的 空白通行证)\n\n&#160;&#160;&#160;&#160;请选择是否立即“前往系统设置”检查,或“稍后自行处理”?</string>
<string name="play_silence_music">后台播放无声音乐</string>
<string name="play_silence_music_tips">【按需启用】播放无声音乐让后台一直运行,可能比较耗电</string>
<string name="one_pixel">1像素</string>
@ -1279,4 +1278,16 @@
<string name="specified_uid">指定配置</string>
<string name="specified_uid_hint">填写frpc的uid多个以半角逗号分隔</string>
<string name="current_language">跟随系统</string>
<string name="current_activity_language">当前 Activity 语种:</string>
<string name="current_application_language">当前 Application 语种:</string>
<string name="current_system_language">当前 System 语种:</string>
<string name="multi_languages">多语言设置</string>
<string name="multi_languages_tips">SmsForwarder启动时界面默认显示的语言</string>
<string name="multi_languages_toast">需要重启App以便切换到您选择的语言</string>
<string name="follow_system">跟随系统</string>
<string name="simplified_chinese">简体中文</string>
<string name="traditional_chinese">繁體中文</string>
<string name="english">English</string>
</resources>