android(i18n): added ukrainian translation (#245)

feat(i18n): added ukrainian translation with extracting of some string to resources. Auto generation of locale config
This commit is contained in:
Hen
2025-11-13 03:21:18 +01:00
committed by GitHub
parent 34f60699b8
commit acf2b9bea7
7 changed files with 242 additions and 17 deletions

View File

@@ -38,6 +38,9 @@ android {
compose = true
viewBinding = true
}
androidResources {
generateLocaleConfig = true
}
externalNativeBuild {
cmake {
path = file("src/main/cpp/CMakeLists.txt")

View File

@@ -160,9 +160,9 @@ fun AccessibilitySettingsScreen(navController: NavController) {
val mediaEQEnabled = remember { mutableStateOf(false) }
val pressSpeedOptions = mapOf(
0.toByte() to "Default",
1.toByte() to "Slower",
2.toByte() to "Slowest"
0.toByte() to stringResource(R.string.default_option),
1.toByte() to stringResource(R.string.slower),
2.toByte() to stringResource(R.string.slowest)
)
val selectedPressSpeedValue =
aacpManager?.controlCommandStatusList?.find { it.identifier == AACPManager.Companion.ControlCommandIdentifiers.DOUBLE_CLICK_INTERVAL }?.value?.takeIf { it.isNotEmpty() }
@@ -196,9 +196,9 @@ fun AccessibilitySettingsScreen(navController: NavController) {
}
val pressAndHoldDurationOptions = mapOf(
0.toByte() to "Default",
1.toByte() to "Slower",
2.toByte() to "Slowest"
0.toByte() to stringResource(R.string.default_option),
1.toByte() to stringResource(R.string.slower),
2.toByte() to stringResource(R.string.slowest)
)
val selectedPressAndHoldDurationValue =
aacpManager?.controlCommandStatusList?.find { it.identifier == AACPManager.Companion.ControlCommandIdentifiers.CLICK_HOLD_INTERVAL }?.value?.takeIf { it.isNotEmpty() }
@@ -234,9 +234,9 @@ fun AccessibilitySettingsScreen(navController: NavController) {
}
val volumeSwipeSpeedOptions = mapOf(
1.toByte() to "Default",
2.toByte() to "Longer",
3.toByte() to "Longest"
1.toByte() to stringResource(R.string.default_option),
2.toByte() to stringResource(R.string.longer),
3.toByte() to stringResource(R.string.longest)
)
val selectedVolumeSwipeSpeedValue =
aacpManager?.controlCommandStatusList?.find { it.identifier == AACPManager.Companion.ControlCommandIdentifiers.VOLUME_SWIPE_INTERVAL }?.value?.takeIf { it.isNotEmpty() }
@@ -322,7 +322,7 @@ fun AccessibilitySettingsScreen(navController: NavController) {
label = stringResource(R.string.press_speed),
description = stringResource(R.string.press_speed_description),
options = pressSpeedOptions.values.toList(),
selectedOption = selectedPressSpeed?: "Default",
selectedOption = selectedPressSpeed?: stringResource(R.string.default_option),
onOptionSelected = { newValue ->
selectedPressSpeed = newValue
aacpManager?.sendControlCommand(
@@ -340,7 +340,7 @@ fun AccessibilitySettingsScreen(navController: NavController) {
label = stringResource(R.string.press_and_hold_duration),
description = stringResource(R.string.press_and_hold_duration_description),
options = pressAndHoldDurationOptions.values.toList(),
selectedOption = selectedPressAndHoldDuration?: "Default",
selectedOption = selectedPressAndHoldDuration?: stringResource(R.string.default_option),
onOptionSelected = { newValue ->
selectedPressAndHoldDuration = newValue
aacpManager?.sendControlCommand(
@@ -403,7 +403,7 @@ fun AccessibilitySettingsScreen(navController: NavController) {
label = stringResource(R.string.volume_swipe_speed),
description = stringResource(R.string.volume_swipe_speed_description),
options = volumeSwipeSpeedOptions.values.toList(),
selectedOption = selectedVolumeSwipeSpeed?: "Default",
selectedOption = selectedVolumeSwipeSpeed?: stringResource(R.string.default_option),
onOptionSelected = { newValue ->
selectedVolumeSwipeSpeed = newValue
aacpManager?.sendControlCommand(

View File

@@ -384,7 +384,7 @@ fun AirPodsSettingsScreen(dev: BluetoothDevice?, service: AirPodsService,
.fillMaxWidth(0.9f)
) {
Text(
text = "Troubleshoot Connection",
text = stringResource(R.string.troubleshooting),
style = TextStyle(
fontSize = 16.sp,
fontWeight = FontWeight.Medium,

View File

@@ -186,7 +186,7 @@ fun LongPress(navController: NavController, name: String) {
listeningModeItems.add(
SelectItem(
name = stringResource(R.string.off),
description = "Turns off noise management",
description = stringResource(R.string.listening_mode_off_description),
iconRes = R.drawable.noise_cancellation,
selected = (currentByte and 0x01) != 0,
onClick = {
@@ -212,7 +212,7 @@ fun LongPress(navController: NavController, name: String) {
listeningModeItems.addAll(listOf(
SelectItem(
name = stringResource(R.string.transparency),
description = "Lets in external sounds",
description = stringResource(R.string.listening_mode_transparency_description),
iconRes = R.drawable.transparency,
selected = (currentByte and 0x04) != 0,
onClick = {
@@ -235,7 +235,7 @@ fun LongPress(navController: NavController, name: String) {
),
SelectItem(
name = stringResource(R.string.adaptive),
description = "Dynamically adjust external noise",
description = stringResource(R.string.listening_mode_adaptive_description),
iconRes = R.drawable.adaptive,
selected = (currentByte and 0x08) != 0,
onClick = {
@@ -258,7 +258,7 @@ fun LongPress(navController: NavController, name: String) {
),
SelectItem(
name = stringResource(R.string.noise_cancellation),
description = "Blocks out external sounds",
description = stringResource(R.string.listening_mode_noise_cancellation_description),
iconRes = R.drawable.noise_cancellation,
selected = (currentByte and 0x02) != 0,
onClick = {

View File

@@ -0,0 +1 @@
unqualifiedResLocale=en

View File

@@ -0,0 +1,217 @@
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="MissingTranslation">
<string name="app_name" translatable="false">LibrePods</string>
<string name="app_description">Звільніть ваші AirPods від екосистеми Apple</string>
<string name="app_widget_description">Перегляньте статус батареї ваших AirPods прямо з головного екрана!</string>
<string name="accessibility">Доступність</string>
<string name="tone_volume">Гучність Тону</string>
<string name="tone_volume_description">Налаштуйте гучність тону звукових ефектів, які відтворюються на AirPods.</string>
<string name="audio">Аудіо</string>
<string name="adaptive_audio">Адаптивний Звук</string>
<string name="customize_adaptive_audio">Налаштувати Адаптивний Звук</string>
<string name="adaptive_audio_description">Адаптивний звук динамічно реагує на ваше оточення та приглушує або пропускає зовнішній шум. Ви можете налаштувати Адаптивний Звук, щоб пропускати більше або менше шуму.</string>
<string name="buds">Навушники</string>
<string name="case_alt">Кейс</string>
<string name="test">Тест</string>
<string name="name">Назва</string>
<string name="noise_control">Режим Прослуховування</string>
<string name="off">Вимкнено</string>
<string name="transparency">Проникність</string>
<string name="adaptive">Адаптування</string>
<string name="noise_cancellation">Шумогасіння</string>
<string name="press_and_hold_airpods">Натисніть і утримуйте AirPods</string>
<string name="press_and_hold_noise_control_description">Натисніть і утримуйте ніжку, щоб перемикатися між обраними режимами прослуховування.</string>
<string name="head_gestures">Жести Головою</string>
<string name="left">Лівий</string>
<string name="right">Правий</string>
<string name="conversational_awareness">Виявлення Розмови</string>
<string name="conversational_awareness_description">Знижує гучність медіа та зменшує фоновий шум, коли ви починаєте говорити.</string>
<string name="personalized_volume">Персональна Гучність</string>
<string name="personalized_volume_description">Налаштовує гучність медіа відповідно до вашого оточення.</string>
<string name="noise_cancellation_single_airpod">Шумогасіння з одним AirPod</string>
<string name="noise_cancellation_single_airpod_description">Дозволяє вмикати режим шумогасіння на AirPods, коли лише один AirPod знаходиться у вашому вусі.</string>
<string name="volume_control">Налаштування Гучності</string>
<string name="volume_control_description">Налаштуйте гучність, проводячи вгору або вниз по сенсору, розташованому на ніжці AirPods Pro.</string>
<string name="airpods_not_connected">AirPods не підключені</string>
<string name="airpods_not_connected_description">Будь ласка, підключіть ваші AirPods, щоб отримати доступ до налаштувань.</string>
<string name="back">Назад</string>
<string name="app_settings">Персоналізація</string>
<string name="relative_conversational_awareness_volume">Відносна гучність</string>
<string name="relative_conversational_awareness_volume_description">Зменшує до відсотка від поточної гучності, а не від максимальної.</string>
<string name="conversational_awareness_pause_music">Призупинити Музику</string>
<string name="conversational_awareness_pause_music_description">Коли ви почнете говорити, музику буде призупинено.</string>
<string name="appwidget_text">ПРИКЛАД</string>
<string name="add_widget">Додати віджет</string>
<string name="noise_control_widget_description">Керуйте режимом шумоконтролю прямо з головного екрана.</string>
<string name="island_connected_text">Підключено</string>
<string name="island_connected_remote_text">Підключено до Linux</string>
<string name="island_taking_over_text">Підключено</string>
<string name="island_moved_to_remote_text">Переміщено до Linux</string>
<string name="island_moved_to_other_device_text">Переміщено до %1$s</string>
<string name="island_moved_to_other_device_reversed_text">Перепідключитися через повідомлення</string>
<string name="head_tracking">Відстеження Голови</string>
<string name="head_gestures_details">Кивніть, щоб відповісти на дзвінок, і похитайте головою, щоб відхилити.</string>
<string name="general_settings_header">Основне</string>
<string name="qs_click_behavior_title">Дія плитки швидких налаштувань</string>
<string name="qs_click_behavior_dialog_desc">Показати діалог шумоконтролю при натисканні.</string>
<string name="qs_click_behavior_cycle_desc">Перемикатися між режимами при натисканні.</string>
<string name="developer_options_header">Розробник</string>
<string name="more_settings_title">Відкрити Налаштування AirPods</string>
<string name="more_settings_subtitle">Керуйте функціями та налаштуваннями AirPods</string>
<string name="ear_detection">Автоматичне Розпізнавання Вуха</string>
<string name="auto_play">Автовідтворення</string>
<string name="auto_pause">Автопауза</string>
<string name="troubleshooting">Усунення несправностей</string>
<string name="troubleshooting_description">Зібрати логи для діагностики проблем з підключенням AirPods</string>
<string name="collect_logs">Зібрати Логи</string>
<string name="saved_logs">Збережені Логи</string>
<string name="no_logs_found">Збережені Логи не знайдено</string>
<string name="takeover_header">Налаштування авто-підключення</string>
<string name="takeover_airpods_state">Підключатися до ваших AirPods, коли їхній статус:</string>
<string name="takeover_disconnected">Відʼєднано</string>
<string name="takeover_disconnected_desc">AirPods не підключені до жодного пристрою</string>
<string name="takeover_idle">Бездіяльний</string>
<string name="takeover_idle_desc">Пристрій підключено до ваших AirPods, але не відтворює медіа і не на дзвінку</string>
<string name="takeover_music">Відтворення медіа</string>
<string name="takeover_music_desc">Пристрій відтворює медіа на ваших AirPods</string>
<string name="takeover_call">На дзвінку</string>
<string name="takeover_call_desc">Пристрій на дзвінку з вашими AirPods</string>
<string name="takeover_phone_state">Підключатися до AirPods, коли ваш телефон:</string>
<string name="takeover_ringing_call">Отримання дзвінка</string>
<string name="takeover_ringing_call_desc">Ваш телефон починає дзвонити</string>
<string name="takeover_media_start">Початок відтворення медіа</string>
<string name="takeover_media_start_desc">Ваш телефон починає відтворювати медіа</string>
<string name="undo">Скасувати</string>
<string name="customize_transparency_mode_description">Ви можете налаштувати режим проникності для ваших AirPods Pro, щоб допомогти чути, що відбувається навколо.</string>
<string name="loud_sound_reduction_description">Зменшення гучних звуків може активно зменшити вплив гучних навколишніх шумів на вас у режимах Проникності та Адаптування. Зменшення гучних звуків не активне у вимкненому режимі.</string>
<string name="loud_sound_reduction">Зменшення гучних звуків</string>
<string name="call_controls">Контроль дзвінків</string>
<string name="automatically_connect">Підключатися до цього пристрою автоматично</string>
<string name="automatically_connect_description">Коли ця опція ввімкнена, AirPods будуть автоматично підключатися до цього пристрою. Коли вимкнена, вони будуть автопідключатися лише до пристрою, до якого підключалися востаннє.</string>
<string name="sleep_detection">Призупинити медіа при засипанні</string>
<string name="off_listening_mode">Вимкнути режим прослуховування</string>
<string name="off_listening_mode_description">Коли це ввімкнено, режими прослуховування AirPods будуть включати опцію «Вимкнено». Гучні звуки не зменшуються, коли режим прослуховування встановлений на «Вимкнено».</string>
<string name="microphone">Мікрофон</string>
<string name="microphone_mode">Режим мікрофона</string>
<string name="microphone_automatic">Автоматичний</string>
<string name="microphone_always_right">Завжди правий</string>
<string name="microphone_always_left">Завжди лівий</string>
<string name="answer_call">Відповісти на дзвінок</string>
<string name="mute_unmute">Вимкнути/Увімкнути звук</string>
<string name="hang_up">Завершити Дзвінок</string>
<string name="press_once">Натиснути один раз</string>
<string name="press_twice">Натиснути двічі</string>
<string name="hearing_aid">Слуховий апарат</string>
<string name="adjustments">Налаштування</string>
<string name="swipe_to_control_amplification">Провести пальцем для керування підсиленням</string>
<string name="swipe_amplification_description">Коли в режимі Проникності і медіа не відтворюється, проведіть пальцем вгору або вниз по сенсорних елементах керування ваших AirPods Pro, щоб збільшити або зменшити підсилення навколишніх звуків.</string>
<string name="transparency_mode">Режим Проникності</string>
<string name="customize_transparency_mode">Налаштувати режим проникності</string>
<string name="press_speed">Швидкість натискання</string>
<string name="press_speed_description">Налаштуйте швидкість, необхідну для натискання два або три рази на ваших AirPods.</string>
<string name="press_and_hold_duration">Тривалість натискання і утримування</string>
<string name="press_and_hold_duration_description">Налаштуйте тривалість, необхідну для натискання і утримування на ваших AirPods.</string>
<string name="volume_swipe_speed">Швидкість проведення пальцем для гучності</string>
<string name="volume_swipe_speed_description">Щоб запобігти ненавмисним налаштуванням гучності, виберіть бажаний час очікування між проведеннями пальцем.</string>
<string name="equalizer">Еквалайзер</string>
<string name="apply_eq_to">Застосувати EQ до</string>
<string name="phone">Телефон</string>
<string name="media">Медіа</string>
<string name="band_label">Смуга %d</string>
<string name="default_option">За замовчуванням</string>
<string name="slower">Повільніше</string>
<string name="slowest">Найповільніше</string>
<string name="longer">Довше</string>
<string name="longest">Найдовше</string>
<string name="darker">Темніше</string>
<string name="brighter">Яскравіше</string>
<string name="less">Менше</string>
<string name="more">Більше</string>
<string name="amplification">Підсилення</string>
<string name="balance">Баланс</string>
<string name="tone">Тон</string>
<string name="ambient_noise_reduction">Зменшення навколишнього шуму</string>
<string name="conversation_boost">Підсилення розмови</string>
<string name="conversation_boost_description">Підсилення розмови фокусує ваші AirPods Pro на людині, яка говорить перед вами, полегшуючи спілкування віч-на-віч.</string>
<string name="hearing_aid_description">AirPods можуть використовувати результати тесту слуху для налаштувань, які покращують чіткість голосів та звуків навколо вас.\n\nРежим слухового апарата призначений лише для людей із легким або помірним зниженням слуху.</string>
<string name="media_assist">Допомога з медіа</string>
<string name="media_assist_description">AirPods Pro можуть використовувати результати тесту слуху для налаштувань, які покращують чіткість музики, відео та дзвінків.</string>
<string name="adjust_media">Налаштувати музику та відео</string>
<string name="adjust_calls">Налаштувати дзвінки</string>
<string name="widget">Віджет</string>
<string name="show_phone_battery_in_widget">Показати заряд телефону у віджеті</string>
<string name="show_phone_battery_in_widget_description">Відображати рівень заряду вашого телефону у віджеті разом із зарядом AirPods</string>
<string name="conversational_awareness_volume">Гучність Усвідомлення Розмови</string>
<string name="quick_settings_tile">Плитка Швидких Налаштувань</string>
<string name="open_dialog_for_controlling">Відкрити діалог для керування</string>
<string name="open_dialog_for_controlling_description">Якщо вимкнено, натискання на плитку швидких налаштувань перемикатиме між режимами. Якщо ввімкнено, вона покаже діалог для керування режимом шумоконтролю та усвідомленням розмови</string>
<string name="disconnect_when_not_wearing">Відʼєднати AirPods, коли ви їх не носите</string>
<string name="disconnect_when_not_wearing_description">Ви все ще зможете керувати ними через додаток — це просто відʼєднує аудіо.</string>
<string name="advanced_options">Розширені Налаштування</string>
<string name="set_identity_resolving_key">Встановити Ключ Ідентифікації (IRK)</string>
<string name="set_identity_resolving_key_description">Вручну встановити значення IRK, що використовується для розпізнавання випадкових адрес BLE</string>
<string name="set_encryption_key">Встановити Ключ Шифрування</string>
<string name="set_encryption_key_description">Вручну встановити значення ENC_KEY, що використовується для розшифровки оголошень BLE</string>
<string name="use_alternate_head_tracking_packets">Використовувати альтернативні пакети відстеження голови</string>
<string name="use_alternate_head_tracking_packets_description">Ввімкніть це, якщо відстеження голови не працює у вас. Це надсилає різні дані до AirPods для запиту/зупинки даних відстеження голови.</string>
<string name="act_as_an_apple_device">Діяти як пристрій Apple</string>
<string name="act_as_an_apple_device_description">Увімкнює багатопристроєву з\'єднаність та функції доступності, такі як налаштування режиму проникності (підсилення, тон, зменшення навколишнього шуму, підсилення розмови та еквалайзер)</string>
<string name="act_as_an_apple_device_warning">Може бути нестабільним!! Максимум два пристрої можуть бути підключені до ваших AirPods. Якщо ви використовуєте з пристроєм Apple, таким як iPad або Mac, то спочатку підключіть цей пристрій, а потім ваш Android.</string>
<string name="reset_hook_offset">Скинути Зміщення Хука</string>
<string name="reset_hook_offset_description">Це очистить поточне зміщення хука та потребуватиме повторного налаштування. Ви впевнені, що хочете продовжити?</string>
<string name="reset">Скинути</string>
<string name="hook_offset_reset_success">Зміщення хука було скинуто. Перенаправлення до налаштування...</string>
<string name="hook_offset_reset_failure">Не вдалося скинути зміщення хука</string>
<string name="irk_set_success">IRK було успішно встановлено</string>
<string name="encryption_key_set_success">Ключ шифрування було успішно встановлено</string>
<string name="irk_hex_value">Шістнадцяткове Значення IRK</string>
<string name="enc_key_hex_value">Шістнадцяткове Значення ENC_KEY</string>
<string name="enter_irk_hex">Введіть 16-байтовий IRK як шістнадцятковий рядок (32 символи):</string>
<string name="enter_enc_key_hex">Введіть 16-байтовий ENC_KEY як шістнадцятковий рядок (32 символи):</string>
<string name="must_be_32_hex_chars">Має бути точно 32 шістнадцяткових символи</string>
<string name="error_converting_hex">Помилка перетворення шістнадцяткового числа:</string>
<string name="found_offset_restart_bluetooth">Знайдено зміщення, будь ласка, перезапустіть Bluetooth</string>
<string name="digital_assistant">Цифровий Асистент</string>
<string name="on">Увімкнено</string>
<string name="camera_remote">Дистанційне Управління Камерою</string>
<string name="camera_control">Управління Камерою</string>
<string name="camera_control_description">Зробіть фото, почніть або зупиніть запис та інше, натиснувши один раз або утримавши ніжку. Коли використовуєте AirPods для керування камерою, якщо ви оберете одне натискання, жести керування медіа будуть недоступні, а якщо утримання, режими прослуховування та жести Цифрового Асистента будуть недоступні.</string>
<string name="camera_control_app_description">Встановіть власну програму для виявлення камери</string>
<string name="set_custom_camera_package">Встановити власний ID програми камери</string>
<string name="enter_custom_camera_package">Введіть ID програми камери:</string>
<string name="custom_camera_package">Власний ID програми камери</string>
<string name="custom_camera_package_set_success">Власний ID програми камери встановлено успішно</string>
<string name="app_listener_service_label">Слухач камери</string>
<string name="app_listener_service_description">Служба слухача LibrePods для виявлення, коли камера активна, щоб активувати керування камерою на AirPods.</string>
<string name="open_source_licenses">Ліцензії Відкритого Коду</string>
<string name="hearing_test">Оновити Тест Слуху</string>
<string name="update_hearing_test">Оновити Результат Тесту Слуху</string>
<string name="att_manager_is_null_try_reconnecting">Менеджер АТТ відсутній, спробуйте перепідключитися.</string>
<string name="permissions_required">Для використання додатку потрібні наступні дозволи. Будь ласка, надайте їх, щоб продовжити.</string>
<string name="shake_your_head_or_nod">Похитайте головою або кивніть!</string>
<string name="root_access_required">Потрібен Root-доступ</string>
<string name="this_app_needs_root_access_to_hook_onto_the_bluetooth_library">Цей додаток потребує root-доступу, щоб підключитися до бібліотеки Bluetooth</string>
<string name="root_access_denied">Root-доступ було відмовлено. Будь ласка, надайте root-дозволи.</string>
<string name="troubleshooting_steps">Кроки Усунення Несправностей</string>
<string name="hearing_test_value_instruction">Будь ласка, введіть значення втрат у дБНС</string>
<string name="about">Про додаток</string>
<string name="model_name">Назва Моделі</string>
<string name="model_number">Номер Моделі</string>
<string name="serial_number">Серійний Номер</string>
<string name="version">Версія</string>
<string name="hearing_health">Здоров\'я Слуху</string>
<string name="hearing_protection">Захист Слуху</string>
<string name="workspace_use">Використання На Робочому Місці</string>
<string name="ppe">Захист EN 352</string>
<string name="workspace_use_description">Захист EN 352 обмежує максимальний рівень медіа до 82 дБА та відповідає застосовним стандартам EN 352 для особистого захисту слуху.</string>
<string name="environmental_noise">Навколишній Шум</string>
<string name="reconnect_to_last_device">Перепідключитися до останнього підключеного пристрою</string>
<string name="disconnect">Відʼєднатися</string>
<string name="support_me">Підтримати мене</string>
<string name="never_show_again">Ніколи не показувати знову</string>
<string name="support_dialog_description">Нещодавно я втратив свій лівий AirPod. Якщо LibrePods виявилися корисними для вас, розгляньте можливість підтримати мене на GitHub Sponsors, щоб я міг купити заміну та продовжити роботу над цим проектом — навіть невелика допомога має велике значення. Дякую за вашу підтримку!</string>
<string name="support_librepods">Підтримати LibrePods</string>
<string name="listening_mode_off_description">Вимикає керування шумом</string>
<string name="listening_mode_transparency_description">Пропускає зовнішні звуки</string>
<string name="listening_mode_adaptive_description">Динамічно налаштовує зовнішній шум</string>
<string name="listening_mode_noise_cancellation_description">Блокує зовнішні звуки</string>
</resources>

View File

@@ -210,4 +210,8 @@
<string name="never_show_again">Never show again</string>
<string name="support_dialog_description">I recently lost my left AirPod. If you\'ve found LibrePods useful, consider supporting me on GitHub Sponsors so I can buy a replacement and continue working on this project- even a little amount goes a long way. Thank you for your support!</string>
<string name="support_librepods">Support LibrePods</string>
<string name="listening_mode_off_description">Turns off noise management</string>
<string name="listening_mode_transparency_description">Lets in external sounds</string>
<string name="listening_mode_adaptive_description">Dynamically adjust external noise</string>
<string name="listening_mode_noise_cancellation_description">Blocks out external sounds</string>
</resources>