[C] 翻译增加 Yandex.Translate

This commit is contained in:
世界 2020-04-26 10:43:38 +08:00
parent 48892e9964
commit c62f660dba
No known key found for this signature in database
GPG Key ID: CD109927C34A63C4
10 changed files with 118 additions and 18 deletions

View File

@ -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']

View File

@ -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);
}

View File

@ -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));

View File

@ -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()
}

View File

@ -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)
}
}

View File

@ -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, _ ->

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>