new: add russian lang
This commit is contained in:
2
.github/auto_translator.py
vendored
2
.github/auto_translator.py
vendored
@@ -44,4 +44,4 @@ if __name__ == "__main__":
|
||||
recursive_translate(src_pofile, dst_pofile, translator)
|
||||
|
||||
with open(get_path(dst), 'w') as df:
|
||||
json.dump(dst_pofile, df)
|
||||
json.dump(dst_pofile, df, ensure_ascii=False, indent=4)
|
||||
|
||||
16
.github/sync_translate.sh
vendored
16
.github/sync_translate.sh
vendored
@@ -1,9 +1,9 @@
|
||||
key="FRu3eopQWgsvWmnycBXxv2eWpbUwGOu2"
|
||||
wget -O assets/translations/strings.i18n.json "https://localise.biz/api/export/locale/en-US.json?index=id&format=i18next4&key=$key"
|
||||
wget -O assets/translations/strings_fa.i18n.json "https://localise.biz/api/export/locale/fa.json?index=id&format=i18next4&key=$key"
|
||||
# wget -O assets/translations/strings_zh.i18n.json "https://localise.biz/api/export/locale/zh.json?index=id&format=i18next4&key=$key"
|
||||
# wget -O assets/translations/strings_pt.i18n.json "https://localise.biz/api/export/locale/pt.json?index=id&format=i18next4&key=$key"
|
||||
wget -O assets/translations/strings_ru.i18n.json "https://localise.biz/api/export/locale/ru.json?index=id&format=i18next4&key=$key"
|
||||
wget -O ../assets/translations/strings.i18n.json "https://localise.biz/api/export/locale/en-US.json?index=id&format=i18next4&key=$key"
|
||||
wget -O ../assets/translations/strings_fa.i18n.json "https://localise.biz/api/export/locale/fa.json?index=id&format=i18next4&key=$key"
|
||||
# # wget -O assets/translations/strings_zh.i18n.json "https://localise.biz/api/export/locale/zh.json?index=id&format=i18next4&key=$key"
|
||||
# # wget -O assets/translations/strings_pt.i18n.json "https://localise.biz/api/export/locale/pt.json?index=id&format=i18next4&key=$key"
|
||||
wget -O ../assets/translations/strings_ru.i18n.json "https://localise.biz/api/export/locale/ru.json?index=id&format=i18next4&key=$key"
|
||||
|
||||
|
||||
pip install polib deep-translator python-i18n
|
||||
@@ -23,7 +23,7 @@ function update_localise(){
|
||||
pat="../assets/translations/strings.i18n.json"
|
||||
fi
|
||||
# curl -X POST "https://localise.biz/api/import/json?locale=$lang&key=$LOCALIZ_KEY" \
|
||||
curl "https://localise.biz/api/import/json?format=i18next4&delete-absent=false&ignore-existing=false&locale=$lang&flag-new=Provisional&key=$LOCALIZ_KEY" \
|
||||
curl "https://localise.biz/api/import/json?format=i18next4&delete-absent=true&ignore-existing=false&locale=$lang&flag-new=Provisional&key=$LOCALIZ_KEY" \
|
||||
-H 'Accept: application/json' \
|
||||
--data-binary @$pat
|
||||
}
|
||||
@@ -31,6 +31,6 @@ curl "https://localise.biz/api/import/json?format=i18next4&delete-absent=false&i
|
||||
|
||||
update_localise en
|
||||
update_localise fa
|
||||
# # update_localise zh
|
||||
# # update_localise pt
|
||||
# # # update_localise zh
|
||||
# # # update_localise pt
|
||||
update_localise ru
|
||||
4
Makefile
4
Makefile
@@ -32,8 +32,8 @@ translate:
|
||||
dart run slang
|
||||
|
||||
sync_translate:
|
||||
|
||||
|
||||
cd .github && bash sync_translate.sh
|
||||
make translate
|
||||
|
||||
|
||||
android-release: android-apk-release
|
||||
|
||||
@@ -240,15 +240,15 @@
|
||||
"profiles": {
|
||||
"unexpected": "Unexpected Error",
|
||||
"notFound": "Profile Not Found",
|
||||
"invalidUrl": "Invalid URL",
|
||||
"invalidConfig": "Invalid Configs"
|
||||
"invalidConfig": "Invalid Configs",
|
||||
"invalidUrl": "Invalid URL"
|
||||
},
|
||||
"connection": {
|
||||
"unexpected": "Unexpected connection error",
|
||||
"timeout": "Connection timeout",
|
||||
"badCertificate": "Bad certificate",
|
||||
"badResponse": "Bad response",
|
||||
"connectionError": "Connection error"
|
||||
"connectionError": "Connection error",
|
||||
"badCertificate": "Bad certificate"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,15 +240,15 @@
|
||||
"profiles": {
|
||||
"unexpected": "خطای غیرمنتظره",
|
||||
"notFound": "پروفایل یافت نشد",
|
||||
"invalidUrl": "لینک نامعتبر",
|
||||
"invalidConfig": "کانفیگ غیر معتبر"
|
||||
"invalidConfig": "کانفیگ غیر معتبر",
|
||||
"invalidUrl": "لینک نامعتبر"
|
||||
},
|
||||
"connection": {
|
||||
"unexpected": " خطای غیرمنتظره در اتصال",
|
||||
"timeout": "درخواست بیش از حد مجاز زمان برد",
|
||||
"badCertificate": "خطای اعتبار سنجی",
|
||||
"badResponse": "پاسخ نامعتبر",
|
||||
"connectionError": "خطای اتصال"
|
||||
"connectionError": "خطای اتصال",
|
||||
"badCertificate": "خطای اعتبار سنجی"
|
||||
}
|
||||
}
|
||||
}
|
||||
254
assets/translations/strings_ru.i18n.json
Normal file
254
assets/translations/strings_ru.i18n.json
Normal file
@@ -0,0 +1,254 @@
|
||||
{
|
||||
"general": {
|
||||
"appTitle": "HiddifyNext",
|
||||
"reset": "Сбросить",
|
||||
"toggle": {
|
||||
"enabled": "Включено",
|
||||
"disabled": "Неполноценный"
|
||||
},
|
||||
"state": {
|
||||
"disable": "Запрещать"
|
||||
},
|
||||
"sort": "Сортировать",
|
||||
"sortBy": "Сортировать по"
|
||||
},
|
||||
"intro": {
|
||||
"termsAndPolicyCaution(rich)": "продолжая, вы соглашаетесь с ${tap(@:about.termsAndConditions)}",
|
||||
"start": "Начинать"
|
||||
},
|
||||
"home": {
|
||||
"pageTitle": "Дом",
|
||||
"emptyProfilesMsg": "Начните с добавления профиля подписки",
|
||||
"noActiveProfileMsg": "Выберите профиль",
|
||||
"connection": {
|
||||
"tapToConnect": "Нажмите, для подключения",
|
||||
"connecting": "Подключение",
|
||||
"disconnecting": "Отключение",
|
||||
"connected": "Подключен"
|
||||
},
|
||||
"stats": {
|
||||
"traffic": "Скорость",
|
||||
"trafficTotal": "Всего",
|
||||
"uplink": "восходящая линия связи",
|
||||
"downlink": "Нисходящая линия связи"
|
||||
}
|
||||
},
|
||||
"profile": {
|
||||
"overviewPageTitle": "Профили",
|
||||
"detailsPageTitle": "Профиль",
|
||||
"activeProfileNameSemanticLabel": "Имя активного профиля: «${name}».",
|
||||
"activeProfileBtnSemanticLabel": "Посмотреть все профили.",
|
||||
"nonActiveProfileBtnSemanticLabel": "Выберите «${name}» в качестве активного профиля.",
|
||||
"subscription": {
|
||||
"traffic": "Трафик",
|
||||
"updatedTimeAgo": "Обновлено ${timeago}",
|
||||
"remainingDuration": "Осталось ${duration} дней",
|
||||
"remainingTrafficSemanticLabel": "${consumed} из ${total} потребленного трафика.",
|
||||
"expired": "Истекший",
|
||||
"noTraffic": "Больше никакого трафика"
|
||||
},
|
||||
"sortBy": {
|
||||
"lastUpdate": "Недавно обновленный",
|
||||
"name": "По алфавиту"
|
||||
},
|
||||
"add": {
|
||||
"buttonText": "Новый профиль",
|
||||
"shortBtnTxt": "Новый профиль",
|
||||
"fromClipboard": "Добавить из буфера обмена",
|
||||
"scanQr": "Сканировать QR-код",
|
||||
"manually": "Ручной ввод",
|
||||
"addingProfileMsg": "Добавление профиля",
|
||||
"failureMsg": "Не удалось добавить профиль"
|
||||
},
|
||||
"update": {
|
||||
"buttonTxt": "Обновить",
|
||||
"tooltip": "Обновить профиль",
|
||||
"failureMsg": "Ошибка обновления: ${reason}",
|
||||
"successMsg": "Профиль успешно обновлен"
|
||||
},
|
||||
"edit": {
|
||||
"buttonTxt": "Редактировать",
|
||||
"selectActiveTxt": "Выберите активный профиль"
|
||||
},
|
||||
"delete": {
|
||||
"buttonTxt": "Удалить",
|
||||
"confirmationMsg": "Удалить профиль навсегда?",
|
||||
"successMsg": "Профиль успешно удален"
|
||||
},
|
||||
"save": {
|
||||
"buttonText": "Сохранить",
|
||||
"successMsg": "Профиль успешно сохранен",
|
||||
"failureMsg": "Не удалось сохранить профиль"
|
||||
},
|
||||
"detailsForm": {
|
||||
"nameLabel": "Имя",
|
||||
"nameHint": "Имя профиля",
|
||||
"urlLabel": "URL-адрес",
|
||||
"urlHint": "Полный URL-адрес конфигурации",
|
||||
"emptyNameMsg": "Поле \"Имя\" обязательно",
|
||||
"invalidUrlMsg": "Неверная ссылка",
|
||||
"lastUpdate": "Последнее обновление",
|
||||
"updateInterval": "Автоматическое обновление",
|
||||
"updateIntervalDialogTitle": "Интервал автоматического обновления (в часах)"
|
||||
}
|
||||
},
|
||||
"proxies": {
|
||||
"pageTitle": "Прокси",
|
||||
"emptyProxiesMsg": "Нет доступных прокси",
|
||||
"delayTestTooltip": "Задержка тестирования",
|
||||
"sortTooltip": "Сортировка прокси",
|
||||
"sortOptions": {
|
||||
"unsorted": "По умолчанию",
|
||||
"name": "По алфавиту",
|
||||
"delay": "По задержке"
|
||||
}
|
||||
},
|
||||
"logs": {
|
||||
"pageTitle": "Логи",
|
||||
"clearLogsButtonText": "Очистить логи",
|
||||
"filterHint": "Фильтр",
|
||||
"allLevelsFilter": "Все",
|
||||
"shareCoreLogs": "Поделиться логами ядра",
|
||||
"shareAppLogs": "Делиться логами приложения"
|
||||
},
|
||||
"settings": {
|
||||
"pageTitle": "Настройки",
|
||||
"requiresRestartMsg": "Чтобы это вступило в силу, перезапустите приложение.",
|
||||
"general": {
|
||||
"sectionTitle": "Общий",
|
||||
"locale": "Язык",
|
||||
"region": "Регион",
|
||||
"regionMsg": "Помогает установить параметры по умолчанию для обхода внутренних адресов.",
|
||||
"regions": {
|
||||
"ir": "Иран (ir)",
|
||||
"cn": "Китай (cn)",
|
||||
"other": "Другой"
|
||||
},
|
||||
"themeMode": "Тематический режим",
|
||||
"themeModes": {
|
||||
"system": "Системная тема",
|
||||
"dark": "Темная тема",
|
||||
"light": "Светлая тема"
|
||||
},
|
||||
"enableAnalytics": "Включить аналитику",
|
||||
"enableAnalyticsMsg": "Разрешите собирать аналитику и отправлять отчеты о сбоях для улучшения приложения.",
|
||||
"trueBlack": "Чистый черный",
|
||||
"autoStart": "Запуск при загрузке",
|
||||
"silentStart": "Тихий старт",
|
||||
"openWorkingDir": "Открыть рабочий каталог",
|
||||
"ignoreBatteryOptimizations": "Отключить оптимизацию батареи",
|
||||
"ignoreBatteryOptimizationsMsg": "Снимите ограничения для оптимальной производительности VPN."
|
||||
},
|
||||
"advanced": {
|
||||
"sectionTitle": "Передовой",
|
||||
"debugMode": "Режим отладки",
|
||||
"debugModeMsg": "Перезапустите приложение, чтобы применить это изменение."
|
||||
},
|
||||
"network": {
|
||||
"perAppProxyPageTitle": "Прокси для каждого приложения",
|
||||
"perAppProxyModes": {
|
||||
"off": "Все",
|
||||
"offMsg": "Проксировать все приложения",
|
||||
"include": "Прокси",
|
||||
"includeMsg": "Проксировать только выбранные приложения",
|
||||
"exclude": "Обход",
|
||||
"excludeMsg": "Не использовать проксирование выбранных приложений"
|
||||
},
|
||||
"showSystemApps": "Показать системные приложения",
|
||||
"hideSystemApps": "Скрыть системные приложения",
|
||||
"clearSelection": "Очистить выбор"
|
||||
},
|
||||
"config": {
|
||||
"section": {
|
||||
"route": "Варианты маршрута",
|
||||
"dns": "Параметры DNS",
|
||||
"inbound": "Входящие параметры",
|
||||
"misc": "Разные параметры"
|
||||
},
|
||||
"pageTitle": "Параметры конфигурации",
|
||||
"executeConfigAsIs": "Выполнить конфигурацию как есть",
|
||||
"executeConfigAsIsMsg": "Выполняет конфигурации SingBox с минимальными изменениями.",
|
||||
"logLevel": "Уровень логов",
|
||||
"resolveDestination": "Определить пункт назначения",
|
||||
"ipv6Mode": "IPv6-маршрут",
|
||||
"ipv6Modes": {
|
||||
"disable": "Запрещать",
|
||||
"enable": "Давать возможность",
|
||||
"prefer": "Предпочтительный",
|
||||
"only": "Эксклюзивный"
|
||||
},
|
||||
"remoteDnsAddress": "Удаленный DNS",
|
||||
"remoteDnsDomainStrategy": "Стратегия удаленного домена DNS",
|
||||
"directDnsAddress": "Прямой DNS",
|
||||
"directDnsDomainStrategy": "Стратегия прямого домена DNS",
|
||||
"mixedPort": "Смешанный порт",
|
||||
"localDnsPort": "Локальный DNS-порт",
|
||||
"tunImplementation": "Реализация TUN",
|
||||
"mtu": "MTU",
|
||||
"connectionTestUrl": "URL-адрес проверки подключения",
|
||||
"urlTestInterval": "Интервал проверки URL-адреса",
|
||||
"enableClashApi": "Включить Clash API",
|
||||
"clashApiPort": "Порт Clash API",
|
||||
"enableTun": "Включить TUN",
|
||||
"setSystemProxy": "Установить системный прокси"
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
"pageTitle": "О",
|
||||
"version": "Версия",
|
||||
"sourceCode": "Исходный код",
|
||||
"telegramChannel": "Телеграм-канал",
|
||||
"checkForUpdate": "Проверить обновления",
|
||||
"privacyPolicy": "Политика конфиденциальности",
|
||||
"termsAndConditions": "Условия и положения"
|
||||
},
|
||||
"appUpdate": {
|
||||
"notAvailableMsg": "Уже пользуюсь последней версией",
|
||||
"dialogTitle": "Доступно обновление",
|
||||
"updateMsg": "Доступна новая версия @:general.appTitle. Хотите обновить сейчас?",
|
||||
"currentVersionLbl": "Текущая версия",
|
||||
"newVersionLbl": "Новая версия",
|
||||
"updateNowBtnTxt": "Обновить сейчас",
|
||||
"laterBtnTxt": "Позже",
|
||||
"ignoreBtnTxt": "Игнорировать"
|
||||
},
|
||||
"tray": {
|
||||
"dashboard": "Панель",
|
||||
"quit": "Покидать",
|
||||
"systemProxy": "Системный прокси"
|
||||
},
|
||||
"failure": {
|
||||
"unexpected": "Неожиданная ошибка",
|
||||
"clash": {
|
||||
"unexpected": "Неожиданная ошибка",
|
||||
"core": "Ошибка конфликта ${reason}"
|
||||
},
|
||||
"singbox": {
|
||||
"unexpected": "Неожиданная ошибка службы",
|
||||
"serviceNotRunning": "Служба не запущена",
|
||||
"invalidConfigOptions": "Неверные параметры конфигурации",
|
||||
"invalidConfig": "Неверная конфигурация",
|
||||
"create": "Ошибка создания сервиса",
|
||||
"start": "Ошибка запуска службы"
|
||||
},
|
||||
"connectivity": {
|
||||
"unexpected": "Неожиданный провал",
|
||||
"missingVpnPermission": "Отсутствует разрешение VPN",
|
||||
"missingNotificationPermission": "Отсутствует разрешение на уведомление",
|
||||
"core": "Основная ошибка"
|
||||
},
|
||||
"profiles": {
|
||||
"unexpected": "Неожиданная ошибка",
|
||||
"notFound": "Профиль не найден",
|
||||
"invalidConfig": "Неверная конфигурация",
|
||||
"invalidUrl": "Неверная ссылка"
|
||||
},
|
||||
"connection": {
|
||||
"unexpected": "Неожиданная ошибка подключения",
|
||||
"timeout": "Время соединения вышло",
|
||||
"badResponse": "Плохой ответ",
|
||||
"connectionError": "Ошибка подключения",
|
||||
"badCertificate": "Плохой сертификат"
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user