mirror of https://github.com/NekoX-Dev/NekoX.git
[C] 翻译增加 Yandex.Translate
This commit is contained in:
parent
48892e9964
commit
c62f660dba
|
@ -62,7 +62,7 @@ android {
|
|||
minSdkVersion 16
|
||||
targetSdkVersion 28
|
||||
|
||||
versionName "6.1.0.0-rc1"
|
||||
versionName "6.1.0.1"
|
||||
versionCode = 25
|
||||
|
||||
vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi']
|
||||
|
|
|
@ -156,6 +156,7 @@ public class NekoConfig {
|
|||
hidePublicProxy = preferences.getBoolean("hide_public_proxy", false);
|
||||
useDefaultTheme = preferences.getBoolean("use_default_theme", false);
|
||||
showIdAndDc = preferences.getBoolean("show_id_and_dc", false);
|
||||
|
||||
googleCloudTranslateKey = preferences.getString("google_cloud_translate_key",null);
|
||||
|
||||
}
|
||||
|
|
|
@ -430,6 +430,7 @@ public class NekoSettingsActivity extends BaseFragment {
|
|||
builder.setItems(new String[]{
|
||||
LocaleController.getString("ProviderGoogleTranslate", R.string.ProviderGoogleTranslate),
|
||||
LocaleController.getString("ProviderGoogleTranslateCN", R.string.ProviderGoogleTranslateCN),
|
||||
LocaleController.getString("ProviderYandex",R.string.ProviderYandex),
|
||||
LocaleController.getString("ProviderLingocloud", R.string.ProviderLingocloud),
|
||||
|
||||
LocaleController.getString("ProviderGoogleTranslateWeb", R.string.ProviderGoogleTranslateWeb),
|
||||
|
@ -452,17 +453,20 @@ public class NekoSettingsActivity extends BaseFragment {
|
|||
case 2:
|
||||
target = 3;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
target = 4;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
target = -1;
|
||||
break;
|
||||
case 4:
|
||||
case 6:
|
||||
target = -2;
|
||||
break;
|
||||
case 5:
|
||||
case 7:
|
||||
target = -3;
|
||||
break;
|
||||
case 6:
|
||||
case 8:
|
||||
target = -4;
|
||||
}
|
||||
|
||||
|
@ -1197,6 +1201,9 @@ public class NekoSettingsActivity extends BaseFragment {
|
|||
case 3:
|
||||
value = LocaleController.getString("ProviderLingocloud", R.string.ProviderLingocloud);
|
||||
break;
|
||||
case 4:
|
||||
value = LocaleController.getString("ProviderYandex", R.string.ProviderYandex);
|
||||
break;
|
||||
default:
|
||||
value = "Unknown";
|
||||
}
|
||||
|
@ -1284,7 +1291,7 @@ public class NekoSettingsActivity extends BaseFragment {
|
|||
headerCell.setText(LocaleController.getString("Connection", R.string.Connection));
|
||||
} else if (position == chatRow) {
|
||||
headerCell.setText(LocaleController.getString("Chat", R.string.Chat));
|
||||
} else if (position == trans2Row) {
|
||||
} else if (position == transRow) {
|
||||
headerCell.setText(LocaleController.getString("Translate", R.string.Translate));
|
||||
} else if (position == experimentRow) {
|
||||
headerCell.setText(LocaleController.getString("Experiment", R.string.Experiment));
|
||||
|
|
|
@ -20,7 +20,7 @@ interface Translator {
|
|||
|
||||
var toLang = to.language
|
||||
|
||||
if (NekoConfig.translationProvider < 3 || NekoConfig.translationProvider == 4) {
|
||||
if (NekoConfig.translationProvider < 3) {
|
||||
|
||||
if (to.language == "zh" && (to.country.toUpperCase() == "CN" || to.country.toUpperCase() == "TW")) {
|
||||
toLang = to.language + "-" + to.country.toUpperCase()
|
||||
|
@ -33,6 +33,7 @@ interface Translator {
|
|||
val translator = when (NekoConfig.translationProvider) {
|
||||
in 1..2 -> GoogleWebTranslator
|
||||
3 -> LingoTranslator
|
||||
4 -> YandexTranslator
|
||||
else -> throw IllegalArgumentException()
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
package tw.nekomimi.nekogram.transtale.source
|
||||
|
||||
import cn.hutool.core.lang.UUID
|
||||
import okhttp3.FormBody
|
||||
import okhttp3.Request
|
||||
import org.json.JSONObject
|
||||
import tw.nekomimi.nekogram.NekoConfig
|
||||
import tw.nekomimi.nekogram.transtale.Translator
|
||||
import tw.nekomimi.nekogram.utils.HttpUtil
|
||||
import tw.nekomimi.nekogram.utils.applyUserAgent
|
||||
|
||||
object YandexTranslator : Translator {
|
||||
|
||||
val uuid = UUID.fastUUID().toString(true)
|
||||
|
||||
override fun doTranslate(from: String, to: String, query: String): String {
|
||||
|
||||
val uuid2 = UUID.fastUUID().toString(true)
|
||||
|
||||
val request = Request.Builder()
|
||||
.url("https://translate.yandex.net/api/v1/tr.json/translate?srv=android&uuid=$uuid&id=$uuid2-9-0")
|
||||
.applyUserAgent()
|
||||
.post(FormBody.Builder()
|
||||
.add("text", query)
|
||||
.add("lang", if (from == "auto") to else "$from-$to")
|
||||
.build()).build()
|
||||
|
||||
val response = runCatching {
|
||||
HttpUtil.okHttpClient.newCall(request).execute()
|
||||
}.recoverCatching {
|
||||
HttpUtil.okHttpClientWithCurrProxy.newCall(request).execute()
|
||||
}.getOrThrow()
|
||||
|
||||
if (response.code != 200) {
|
||||
|
||||
error("HTTP ${response.code} : ${response.body?.string()}")
|
||||
|
||||
}
|
||||
|
||||
val respObj = JSONObject(response.body!!.string())
|
||||
|
||||
if (respObj.optInt("code",-1) != 200) error(respObj.toString(4))
|
||||
|
||||
return respObj.getJSONArray("text").getString(0)
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,17 +1,12 @@
|
|||
package tw.nekomimi.nekogram.utils
|
||||
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.widget.LinearLayout
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import org.telegram.messenger.AndroidUtilities
|
||||
import org.telegram.messenger.ApplicationLoader
|
||||
import org.telegram.messenger.LocaleController
|
||||
import org.telegram.messenger.R
|
||||
import org.telegram.ui.ActionBar.AlertDialog
|
||||
import org.telegram.ui.ActionBar.Theme
|
||||
import org.telegram.ui.Cells.TextCell
|
||||
import org.telegram.ui.Components.EditTextBoldCursor
|
||||
import org.telegram.ui.Components.NumberPicker
|
||||
import tw.nekomimi.nekogram.BottomBuilder
|
||||
|
@ -53,9 +48,9 @@ object AlertUtil {
|
|||
|
||||
@JvmOverloads
|
||||
@JvmStatic
|
||||
fun showProgress(ctx: Context,text: String = LocaleController.getString("Loading",R.string.Loading)): AlertDialog {
|
||||
fun showProgress(ctx: Context, text: String = LocaleController.getString("Loading", R.string.Loading)): AlertDialog {
|
||||
|
||||
return AlertDialog.Builder(ctx,1).apply {
|
||||
return AlertDialog.Builder(ctx, 1).apply {
|
||||
|
||||
setMessage(text)
|
||||
|
||||
|
@ -63,7 +58,7 @@ object AlertUtil {
|
|||
|
||||
}
|
||||
|
||||
fun showInput(ctx: Context, title: String, hint: String, onInput: (AlertDialog.Builder, String) -> String) = UIUtil.runOnUIThread( Runnable {
|
||||
fun showInput(ctx: Context, title: String, hint: String, onInput: (AlertDialog.Builder, String) -> String) = UIUtil.runOnUIThread(Runnable {
|
||||
|
||||
val builder = AlertDialog.Builder(ctx)
|
||||
|
||||
|
@ -79,7 +74,7 @@ object AlertUtil {
|
|||
|
||||
@JvmStatic
|
||||
@JvmOverloads
|
||||
fun showConfirm(ctx: Context, title: String, text: String? = null,icon: Int, button: String, red: Boolean, listener: Runnable) = UIUtil.runOnUIThread(Runnable {
|
||||
fun showConfirm(ctx: Context, title: String, text: String? = null, icon: Int, button: String, red: Boolean, listener: Runnable) = UIUtil.runOnUIThread(Runnable {
|
||||
|
||||
/*
|
||||
|
||||
|
@ -109,11 +104,11 @@ object AlertUtil {
|
|||
|
||||
} else {
|
||||
|
||||
builder.addTitle(title,false)
|
||||
builder.addTitle(title, false)
|
||||
|
||||
}
|
||||
|
||||
builder.addItem(button, icon,red) {
|
||||
builder.addItem(button, icon, red) {
|
||||
|
||||
builder.dismiss()
|
||||
|
||||
|
@ -151,6 +146,7 @@ object AlertUtil {
|
|||
popup.setItems(arrayOf(
|
||||
LocaleController.getString("ProviderGoogleTranslate", R.string.ProviderGoogleTranslate),
|
||||
LocaleController.getString("ProviderGoogleTranslateCN", R.string.ProviderGoogleTranslateCN),
|
||||
LocaleController.getString("ProviderYandex", R.string.ProviderYandex),
|
||||
LocaleController.getString("ProviderLingocloud", R.string.ProviderLingocloud)
|
||||
)) { item, _ ->
|
||||
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
<string name="CustomApiInput">手动输入</string>
|
||||
<string name="AllowFlashCall">允许电话呼叫</string>
|
||||
<string name="ChangeTranslateProvider">修改翻译源</string>
|
||||
<string name="GoogleCloudTransKey">Google 云翻译密钥</string>
|
||||
<string name="GoogleCloudTransKeyNotice">如果您设置了一个谷歌云密钥: 云翻译API将被调用,而不是模拟表单提交到网页版 (快速、稳定和节省流量)。</string>
|
||||
<string name="NekoXUpdatesChannel">NekoX 更新频道</string>
|
||||
<string name="ShowIdAndDc">在个人资料中显示 ID/ DC</string>
|
||||
<string name="UseDefaultTheme">使用默认主题 *</string>
|
||||
|
|
|
@ -1,13 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="CustomApi">自定義API</string>
|
||||
<string name="UseCustomApiNotice">使用自定義api登錄,如果您無法註冊或登錄,這可能會有所幫助。\n\n注意:如果您正在使用 release 版本,谷歌云推送將不起作用。</string>
|
||||
<string name="CustomApiNo">不要使用自定義API</string>
|
||||
<string name="CustomApiOffical">Telegram Android</string>
|
||||
<string name="CustomApiTGX">Telegram Android X</string>
|
||||
<string name="CustomApiInput">手動輸入</string>
|
||||
<string name="AllowFlashCall">允許通話</string>
|
||||
<string name="ChangeTranslateProvider">修改翻譯源</string>
|
||||
<string name="GoogleCloudTransKey">Google 云翻譯密鑰</string>
|
||||
<string name="GoogleCloudTransKeyNotice">如果您設置了 Google 云翻譯密鑰,則將在翻譯時調用雲翻譯API,而不是向網頁版本提交假表格(更快,穩定並節省流量)。</string>
|
||||
<string name="NekoXUpdatesChannel">NekoX 更新頻道</string>
|
||||
<string name="ShowIdAndDc">在個人資料中顯示ID / DC</string>
|
||||
<string name="UseDefaultTheme">使用默認主題 *</string>
|
||||
<string name="NightMode">夜間模式</string>
|
||||
<string name="PrivacyNotice">隱私警告</string>
|
||||
<string name="PrivacyNoticePhoneVisible">檢測到您的手機號碼對任何人都可見, 這可能會導致政府控制的黑客找到您的真實身份,請關閉它!</string>
|
||||
<string name="PrivacyNoticeAddByPhone">檢測到您沒有被關閉“允許通過電話號碼找到我”設置, 這可能會導致政府控制的黑客找到您的真實身份,請關閉它!</string>
|
||||
<string name="PrivacyNoticeP2p">檢測到您沒有關閉“允許 P2p 通話”設置, 這可能會導致政府控制的黑客找到您的真實身份,請關閉它!</string>
|
||||
<string name="PrivacyNotice2fa">檢測到您尚未設置密碼,這可能導致政府控制的黑客找到您的真實身份,請設置一個!</string>
|
||||
<string name="ApplySuggestion">應用</string>
|
||||
<string name="DoNotRemindAgain">不再提醒</string>
|
||||
<string name="RemoveTitleEmoji">移除標題中的表情</string>
|
||||
|
@ -16,6 +27,7 @@
|
|||
<string name="DisableChatAction">不要發送我的輸入狀態</string>
|
||||
<string name="FakeScreenshot">假裝截屏</string>
|
||||
<string name="SaveCacheToSdcard">保存緩存到存儲卡*</string>
|
||||
<string name="Import">導入</string>
|
||||
<string name="FilterNameUsers">用戶</string>
|
||||
<string name="FilterNameUsersDescription">僅來自私聊的消息</string>
|
||||
<string name="FilterNameContacts">聯係人</string>
|
||||
|
@ -85,6 +97,16 @@
|
|||
<string name="ExportProxies">導出伺服器列表到文件</string>
|
||||
<string name="ImportProxies">從文件導入伺服器列表</string>
|
||||
<string name="ImportProxyList">導入代理伺服器列表</string>
|
||||
<string name="ProxySubscription">代理訂閱</string>
|
||||
<string name="ProxySubDetails">訂閱詳情</string>
|
||||
<string name="SubscriptionUrls">鏈接列表</string>
|
||||
<string name="SubscriptionUpdating">正更新訂閱</string>
|
||||
<string name="SubscriptionDelete">刪除訂閱</string>
|
||||
<string name="ExportStickers">導出貼紙集</string>
|
||||
<string name="ImportStickers">從文件導入貼紙集</string>
|
||||
<string name="ImportStickersList">導入貼紙集</string>
|
||||
<string name="StickerSets">貼紙集</string>
|
||||
<string name="InvalidStickersFile">無效的貼紙集文件: </string>
|
||||
<string name="InvalidProxyFile">無效的代理列表文件: </string>
|
||||
<string name="ImportedProxies">已導入的代理伺服器列表: </string>
|
||||
<string name="ErrorsInImport">導入出錯: </string>
|
||||
|
|
|
@ -1,13 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="CustomApi">自定義API</string>
|
||||
<string name="UseCustomApiNotice">使用自定義api登錄,如果您無法註冊或登錄,這可能會有所幫助。\n\n注意:如果您正在使用 release 版本,谷歌云推送將不起作用。</string>
|
||||
<string name="CustomApiNo">不要使用自定義API</string>
|
||||
<string name="CustomApiOffical">Telegram Android</string>
|
||||
<string name="CustomApiTGX">Telegram Android X</string>
|
||||
<string name="CustomApiInput">手動輸入</string>
|
||||
<string name="AllowFlashCall">允許通話</string>
|
||||
<string name="ChangeTranslateProvider">修改翻譯源</string>
|
||||
<string name="GoogleCloudTransKey">Google 云翻譯密鑰</string>
|
||||
<string name="GoogleCloudTransKeyNotice">如果您設置了 Google 云翻譯密鑰,則將在翻譯時調用雲翻譯API,而不是向網頁版本提交假表格(更快,穩定並節省流量)。</string>
|
||||
<string name="NekoXUpdatesChannel">NekoX 更新頻道</string>
|
||||
<string name="ShowIdAndDc">在個人資料中顯示ID / DC</string>
|
||||
<string name="UseDefaultTheme">使用默認主題 *</string>
|
||||
<string name="NightMode">夜間模式</string>
|
||||
<string name="PrivacyNotice">隱私警告</string>
|
||||
<string name="PrivacyNoticePhoneVisible">檢測到您的手機號碼對任何人都可見, 這可能會導致政府控制的黑客找到您的真實身份,請關閉它!</string>
|
||||
<string name="PrivacyNoticeAddByPhone">檢測到您沒有被關閉“允許通過電話號碼找到我”設置, 這可能會導致政府控制的黑客找到您的真實身份,請關閉它!</string>
|
||||
<string name="PrivacyNoticeP2p">檢測到您沒有關閉“允許 P2p 通話”設置, 這可能會導致政府控制的黑客找到您的真實身份,請關閉它!</string>
|
||||
<string name="PrivacyNotice2fa">檢測到您尚未設置密碼,這可能導致政府控制的黑客找到您的真實身份,請設置一個!</string>
|
||||
<string name="ApplySuggestion">套用</string>
|
||||
<string name="DoNotRemindAgain">不再提醒</string>
|
||||
<string name="RemoveTitleEmoji">移除標題中的表情</string>
|
||||
|
@ -16,6 +27,7 @@
|
|||
<string name="DisableChatAction">不要發送我的輸入狀態</string>
|
||||
<string name="FakeScreenshot">假裝截屏</string>
|
||||
<string name="SaveCacheToSdcard">保存緩存到存儲卡*</string>
|
||||
<string name="Import">導入</string>
|
||||
<string name="FilterNameUsers">用戶</string>
|
||||
<string name="FilterNameUsersDescription">僅來自私聊的消息</string>
|
||||
<string name="FilterNameContacts">聯絡人</string>
|
||||
|
@ -85,6 +97,16 @@
|
|||
<string name="ExportProxies">導出伺服器列表到文件</string>
|
||||
<string name="ImportProxies">從文件導入伺服器列表</string>
|
||||
<string name="ImportProxyList">導入代理伺服器列表</string>
|
||||
<string name="ProxySubscription">代理訂閱</string>
|
||||
<string name="ProxySubDetails">訂閱詳情</string>
|
||||
<string name="SubscriptionUrls">鏈接列表</string>
|
||||
<string name="SubscriptionUpdating">正更新訂閱</string>
|
||||
<string name="SubscriptionDelete">刪除訂閱</string>
|
||||
<string name="ExportStickers">導出貼紙集</string>
|
||||
<string name="ImportStickers">從文件導入貼紙集</string>
|
||||
<string name="ImportStickersList">導入貼紙集</string>
|
||||
<string name="StickerSets">貼紙集</string>
|
||||
<string name="InvalidStickersFile">無效的貼紙集文件: </string>
|
||||
<string name="InvalidProxyFile">無效的代理列表文件: </string>
|
||||
<string name="ImportedProxies">已導入的代理伺服器列表: </string>
|
||||
<string name="ErrorsInImport">導入出錯: </string>
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
<string name="AllowFlashCall">Allow flash call</string>
|
||||
|
||||
<string name="ChangeTranslateProvider">Change Provider</string>
|
||||
<string name="ProviderYandex">Yandex.Translate</string>
|
||||
<string name="GoogleCloudTransKey">Google Cloud Translate Key</string>
|
||||
<string name="GoogleCloudTransKeyNotice">If you set up a Google Cloud Trans Key, the cloud translation API will be called instead of submitting a fake form to the web version when translating (faster, stable and saving traffic).</string>
|
||||
|
||||
|
|
Loading…
Reference in New Issue