Localize new strings in drawer
This commit is contained in:
@@ -42,7 +42,7 @@
|
||||
android:layout_gravity="top"
|
||||
app:srcCompat="@drawable/ic_social_share"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="Share"
|
||||
android:contentDescription="@string/share"
|
||||
android:focusable="true"
|
||||
android:nextFocusLeft="@+id/container"/>
|
||||
<android.support.v7.widget.AppCompatImageView android:id="@+id/edit"
|
||||
@@ -52,7 +52,7 @@
|
||||
android:layout_gravity="top"
|
||||
app:srcCompat="@drawable/ic_image_edit"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="Edit"
|
||||
android:contentDescription="@string/edit"
|
||||
android:focusable="true"/>
|
||||
</LinearLayout>
|
||||
<LinearLayout android:layout_width="match_parent"
|
||||
|
||||
@@ -42,7 +42,10 @@
|
||||
<string name="stopping">正在关闭……</string>
|
||||
<string name="vpn_error">后台服务启动失败:%s</string>
|
||||
<string name="reboot_required">VPN 服务启动失败。你可能需要重启设备。</string>
|
||||
<string name="yes">是</string>
|
||||
<string name="no">否</string>
|
||||
<string name="close">关闭</string>
|
||||
<string name="profile_empty">请选择配置文件</string>
|
||||
<string name="proxy_empty">代理服务器地址及密码不能为空</string>
|
||||
<string name="connect">连接</string>
|
||||
<string name="initializing">正在初始化……</string>
|
||||
@@ -59,6 +62,7 @@
|
||||
<string name="flush_dnscache_summary">只需在 NAT 模式下使用,需要 ROOT 权限</string>
|
||||
<string name="flush_dnscache_no_root">在没有 ROOT 权限的情况下无法刷新 DNS 缓存</string>
|
||||
<string name="flushing">刷新中……</string>
|
||||
<string name="edit">编辑</string>
|
||||
<string name="share">分享</string>
|
||||
<string name="share_message">扫描二维码或使用 Android Beam (NFC)</string>
|
||||
<string name="share_message_without_nfc">扫描二维码</string>
|
||||
@@ -95,6 +99,9 @@
|
||||
<string name="profile_manager_dialog_content">• 点击选择配置文件;\n• 向左/右滑动或按左删除;\n•
|
||||
长按拖动改变顺序。</string>
|
||||
<string name="gotcha">好的</string>
|
||||
<string name="profile_config">配置文件设置</string>
|
||||
<string name="unsaved_changes_prompt">保存修改吗?</string>
|
||||
<string name="delete_confirm_prompt">你是否确定要删除这个配置文件?</string>
|
||||
<string name="copy_url">复制 URL</string>
|
||||
<string name="add_profile_dialog">为影梭添加此配置文件?</string>
|
||||
<string name="add_profile_methods_scan_qr_code">扫描二维码</string>
|
||||
|
||||
@@ -43,7 +43,10 @@
|
||||
<string name="stopping">關閉中……</string>
|
||||
<string name="vpn_error">%s</string>
|
||||
<string name="reboot_required">VPN 服務啟動失敗。您或許需要重新啟動您的裝置。</string>
|
||||
<string name="yes">是</string>
|
||||
<string name="no">否</string>
|
||||
<string name="close">關閉</string>
|
||||
<string name="profile_empty">請選擇設定檔</string>
|
||||
<string name="proxy_empty">Proxy 或密碼不可以空白</string>
|
||||
<string name="connect">連線</string>
|
||||
<string name="initializing">起始中……</string>
|
||||
@@ -60,6 +63,7 @@
|
||||
<string name="flush_dnscache_summary">僅在 NAT 模式可用,需要 ROOT 權限</string>
|
||||
<string name="flush_dnscache_no_root">在無 ROOT 權限時清除 DNS 快取無法進行</string>
|
||||
<string name="flushing">清除中……</string>
|
||||
<string name="edit">編輯</string>
|
||||
<string name="share">分享</string>
|
||||
<string name="share_message">掃描 QR 碼或者使用 Android Beam (NFC)</string>
|
||||
<string name="share_message_without_nfc">掃描 QR 碼</string>
|
||||
@@ -96,6 +100,9 @@
|
||||
<string name="profile_manager_dialog_content">• 輕觸選擇一個設定檔;\n• 向左/右撥動或按左移除;\n•
|
||||
按住後上下撥動設定檔重新排序。</string>
|
||||
<string name="gotcha">我懂了!</string>
|
||||
<string name="profile_config">設定檔配置</string>
|
||||
<string name="unsaved_changes_prompt">要保存更改嗎?</string>
|
||||
<string name="delete_confirm_prompt">您確定要移除這個設定檔嗎?</string>
|
||||
<string name="copy_url">複製 URL</string>
|
||||
<string name="add_profile_dialog">為 Shadowsocks 新增此設定檔?</string>
|
||||
<string name="add_profile_methods_scan_qr_code">掃描 QR 碼</string>
|
||||
|
||||
@@ -83,9 +83,13 @@
|
||||
<string name="vpn_error">%s</string>
|
||||
<string name="reboot_required">Failed to start VPN service. You might need to reboot your device.</string>
|
||||
<string name="quick_switch">Switch</string>
|
||||
<string name="profile_invalid_input">No valid profile data found.</string>
|
||||
|
||||
<!-- alert category -->
|
||||
<string name="yes">Yes</string>
|
||||
<string name="no">No</string>
|
||||
<string name="close">Close</string>
|
||||
<string name="profile_empty">Please select a profile</string>
|
||||
<string name="proxy_empty">Proxy/Password should not be empty</string>
|
||||
<string name="connect">Connect</string>
|
||||
<string name="initializing">Initializing…</string>
|
||||
@@ -100,6 +104,7 @@
|
||||
<string name="recovery_summary">Reset all the background services</string>
|
||||
<string name="about">About</string>
|
||||
<string name="about_title">Shadowsocks %s</string>
|
||||
<string name="edit">Edit</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="share_message">Scan QR code or use Android Beam (NFC)</string>
|
||||
<string name="share_message_without_nfc">Scan QR code</string>
|
||||
@@ -123,6 +128,9 @@
|
||||
<string name="profile_manager_dialog_content">• Tap to select a profile;\n• Swipe left/right or press left
|
||||
to remove;\n• Long press to reorder profiles.</string>
|
||||
<string name="gotcha">Gotcha!</string>
|
||||
<string name="profile_config">Profile config</string>
|
||||
<string name="unsaved_changes_prompt">Changes not saved. Do you want to save?</string>
|
||||
<string name="delete_confirm_prompt">Are you sure you want to remove this profile?</string>
|
||||
<string name="add_profile_dialog">Add this Shadowsocks Profile?</string>
|
||||
<string name="add_profile_methods_scan_qr_code">Scan QR code</string>
|
||||
<string name="add_profile_methods_manual_settings">Manual Settings</string>
|
||||
|
||||
@@ -113,7 +113,7 @@ trait BaseService extends Service {
|
||||
|
||||
override def use(profileId: Int): Unit = synchronized(if (profileId < 0) stopRunner(stopService = true) else {
|
||||
val profile = app.profileManager.getProfile(profileId).orNull
|
||||
if (profile == null) stopRunner(stopService = true, "Please select a profile.") else state match { // TODO: localize
|
||||
if (profile == null) stopRunner(stopService = true, getString(R.string.profile_empty)) else state match {
|
||||
case State.STOPPED => if (checkProfile(profile)) startRunner(profile)
|
||||
case State.CONNECTED => if (profileId != BaseService.this.profile.id && checkProfile(profile)) {
|
||||
stopRunner(stopService = false)
|
||||
|
||||
@@ -99,7 +99,6 @@ class MainActivity extends Activity with ServiceBoundContext with Drawer.OnDrawe
|
||||
case _: NullPointerException =>
|
||||
}
|
||||
private def changeState(s: Int, profileName: String = null, m: String = null) {
|
||||
// TODO: localize texts for statusText in this method
|
||||
s match {
|
||||
case State.CONNECTING =>
|
||||
fab.setImageResource(R.drawable.ic_start_busy)
|
||||
@@ -314,17 +313,17 @@ class MainActivity extends Activity with ServiceBoundContext with Drawer.OnDrawe
|
||||
if (TextUtils.isEmpty(sharedStr)) return
|
||||
val profiles = Parser.findAll(sharedStr).toList
|
||||
if (profiles.isEmpty) {
|
||||
// TODO: show error msg
|
||||
Snackbar.make(findViewById(R.id.snackbar), R.string.profile_invalid_input, Snackbar.LENGTH_LONG).show()
|
||||
return
|
||||
}
|
||||
val dialog = new AlertDialog.Builder(this)
|
||||
new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.add_profile_dialog)
|
||||
.setPositiveButton("Yes", ((_, _) => // TODO
|
||||
.setPositiveButton(R.string.yes, ((_, _) =>
|
||||
profiles.foreach(app.profileManager.createProfile)): DialogInterface.OnClickListener)
|
||||
.setNegativeButton("No", null)
|
||||
.setNegativeButton(R.string.no, null)
|
||||
.setMessage(profiles.mkString("\n"))
|
||||
.create()
|
||||
dialog.show()
|
||||
.show()
|
||||
}
|
||||
|
||||
def onSharedPreferenceChanged(pref: SharedPreferences, key: String): Unit = key match {
|
||||
|
||||
@@ -35,7 +35,7 @@ class ProfileConfigActivity extends Activity {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.layout_profile_config)
|
||||
val toolbar = findViewById(R.id.toolbar).asInstanceOf[Toolbar]
|
||||
toolbar.setTitle("Profile config") // TODO
|
||||
toolbar.setTitle(R.string.profile_config)
|
||||
toolbar.setNavigationIcon(R.drawable.ic_navigation_close)
|
||||
toolbar.setNavigationOnClickListener(_ => onBackPressed())
|
||||
toolbar.inflateMenu(R.menu.profile_config_menu)
|
||||
@@ -43,9 +43,9 @@ class ProfileConfigActivity extends Activity {
|
||||
}
|
||||
|
||||
override def onBackPressed(): Unit = if (app.settings.getBoolean(Key.dirty, false)) new AlertDialog.Builder(this)
|
||||
.setTitle("Changes not saved. Do you want to save?") // TODO: localizations
|
||||
.setPositiveButton("Yes", ((_, _) => child.saveAndExit()): DialogInterface.OnClickListener)
|
||||
.setNegativeButton("No", ((_, _) => finish()): DialogInterface.OnClickListener)
|
||||
.setTitle(R.string.unsaved_changes_prompt)
|
||||
.setPositiveButton(R.string.yes, ((_, _) => child.saveAndExit()): DialogInterface.OnClickListener)
|
||||
.setNegativeButton(R.string.no, ((_, _) => finish()): DialogInterface.OnClickListener)
|
||||
.setNeutralButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
.show() else super.onBackPressed()
|
||||
|
||||
@@ -83,12 +83,12 @@ class ProfileConfigFragment extends PreferenceFragment with OnMenuItemClickListe
|
||||
override def onMenuItemClick(item: MenuItem): Boolean = item.getItemId match {
|
||||
case R.id.action_delete =>
|
||||
new AlertDialog.Builder(getActivity)
|
||||
.setTitle("Confirm?") // TODO
|
||||
.setPositiveButton("Yes", ((_, _) => {
|
||||
.setTitle(R.string.delete_confirm_prompt)
|
||||
.setPositiveButton(R.string.yes, ((_, _) => {
|
||||
app.profileManager.delProfile(profile.id)
|
||||
getActivity.finish()
|
||||
}): DialogInterface.OnClickListener)
|
||||
.setNegativeButton("No", null)
|
||||
.setNegativeButton(R.string.no, null)
|
||||
.create()
|
||||
.show()
|
||||
true
|
||||
|
||||
Reference in New Issue
Block a user