You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.7 KiB
62 lines
1.7 KiB
/// 阿里机器翻译盖不住的语种:繁体会被收成简体,乌克兰语和克罗地亚语直接被拒。
|
|
bool microsoftMtRequired(String from, String to) {
|
|
bool hit(String raw) {
|
|
switch (raw.trim().toLowerCase()) {
|
|
case 'zh-hant':
|
|
case 'zh-hant-hk':
|
|
case 'zh-tw':
|
|
case 'zh-hk':
|
|
case 'uk':
|
|
case 'uk-ua':
|
|
case 'hr':
|
|
case 'hr-hr':
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return hit(from) || hit(to);
|
|
}
|
|
|
|
/// 收成微软翻译认的码。空串留给自动检测,请求里不带 from。
|
|
String microsoftMtCode(String raw) {
|
|
final code = raw.trim();
|
|
if (code.isEmpty) return '';
|
|
switch (code.toLowerCase()) {
|
|
case 'zh-hant':
|
|
case 'zh-hant-hk':
|
|
case 'zh-tw':
|
|
case 'zh-hk':
|
|
return 'zh-Hant';
|
|
case 'zh':
|
|
case 'zh-cn':
|
|
case 'zh-hans':
|
|
return 'zh-Hans';
|
|
case 'uk':
|
|
case 'uk-ua':
|
|
return 'uk';
|
|
case 'hr':
|
|
case 'hr-hr':
|
|
return 'hr';
|
|
default:
|
|
final dash = code.indexOf('-');
|
|
if (dash > 0) return code.substring(0, dash).toLowerCase();
|
|
return code.toLowerCase();
|
|
}
|
|
}
|
|
|
|
/// 解析微软翻译 3.0 的响应。失败或空译文返回 null。
|
|
String? microsoftTranslationText(dynamic data) {
|
|
if (data is! List || data.isEmpty) return null;
|
|
final first = data.first;
|
|
if (first is! Map) return null;
|
|
final translations = first['translations'];
|
|
if (translations is! List || translations.isEmpty) return null;
|
|
final item = translations.first;
|
|
if (item is! Map) return null;
|
|
final text = item['text'];
|
|
if (text is! String) return null;
|
|
final out = text.trim();
|
|
return out.isEmpty ? null : out;
|
|
}
|
|
|