# Conflicts:
#	crates/ui-egui/src/i18n.rs
#	crates/ui-egui/src/menus.rs
This commit is contained in:
Claude committed 2026-10-08 18:25:10 +00:00
commit 9b5e771fd8
4 files changed
+1389

No files matched your search

+122
View File
@@ -0,0 +1,122 @@
{
" ({} in Recently Deleted)": " ({} в «Недавно удалённых»)",
" · {skipped} skipped (file exists)": " · пропущено: {skipped} (файл существует)",
" · {} duplicate{} skipped": " · пропущено дубликатов: {}{:.0}",
" · {} failed: {}": " · не удалось: {}; ошибка: {}",
" · {} moved": " · перемещено: {}",
" · {} not readable": " · не читается: {}",
", {failed} file{} not readable": ", не читается файлов: {failed}{:.0}",
"Add {local_n} to My Photos": "Добавить в «Мои фото»: {local_n}",
"Add {} Photo{}": "Добавить фото: {}{:.0}",
"Add “{}” to Favorites": "Добавить «{}» в избранное",
"Added {n} photo{} to My Photos": "В «Мои фото» добавлено фото: {n}{:.0}",
"Added {n} photo{} to “{}”": "В «{1}» добавлено фото: {n}{0:.0}",
"Adding photos… {} of {}": "Добавление фото… {} из {}",
"All {n} selected photos move by the same amount.": "Все выбранные фото ({n}) сдвигаются на одно и то же значение.",
"Already in the library, in Recently Deleted: {} photo{} selected · right-click ▸ Restore, or Delete Permanently to import afresh": "Уже в библиотеке, в «Недавно удалённых»: выбрано фото: {}{:.0} · щёлкните правой кнопкой → Восстановить или Удалить навсегда, чтобы импортировать заново",
"Already in the library: {} photo{} selected in All Photos": "Уже в библиотеке: выбрано фото в разделе «Все фото»: {}{:.0}",
"Auto ({})": "Авто ({})",
"Auto Sync: edits apply to {n} photos": "Автосинхронизация: правки применяются к фото: {n}",
"Automatic ({} MB)": "Автоматически ({} МБ)",
"Build 1:1 Previews ({scope})": "Создать просмотры 1:1 ({scope})",
"Build Smart Previews ({scope})": "Создать смарт-просмотры ({scope})",
"Build Standard-Sized Previews ({scope})": "Создать просмотры стандартного размера ({scope})",
"Click {}:1": "Щелчок {}:1",
"Create {n} Virtual Copies": "Создать виртуальные копии: {n}",
"Decoder: {reason}": "Декодер: {reason}",
"Delete \"{label}\"": "Удалить «{label}»",
"Delete \"{label}\" (and the mask)": "Удалить «{label}» (и маску)",
"Delete {n} Photos": "Удалить фото: {n}",
"Delete “{current}”": "Удалить «{current}»",
"Discard Smart Previews ({scope})": "Удалить смарт-просмотры ({scope})",
"Duplicate \"{label}\"": "Дублировать «{label}»",
"Example: {example}": "Пример: {example}",
"Exported {n} photo{}": "Экспортировано фото: {n}{:.0}",
"Exported {ok} of {total} photo{}": "Экспортировано фото: {ok} из {total}{:.0}",
"Exported {} point curve preset{}": "Экспортировано пресетов точечной кривой: {}{:.0}",
"Exported {} preset{}": "Экспортировано пресетов: {}{:.0}",
"Exporting {} of {total}": "Экспорт: {} из {total}",
"Filter bar — {active} active filter{}": "Панель фильтров — активных фильтров: {active}{:.0}",
"Healed {n} dust spot{}": "Убрано пылинок: {n}{:.0}",
"Import cancelled · {} photo{} added": "Импорт отменён · добавлено фото: {}{:.0}",
"Imported {n} point curve preset{}": "Импортировано пресетов точечной кривой: {n}{:.0}",
"Imported {n} preset{}": "Импортировано пресетов: {n}{:.0}",
"Imported {n} preset{}, {f} file{} not readable": "Импортировано пресетов: {n}{:.0}, не читается файлов: {f}{:.0}",
"Imported {} photo{}": "Импортировано фото: {}{:.0}",
"Label Set: {name}": "Набор меток: {name}",
"Matches: {}": "Совпадения: {}",
"Merging… {stage} {:.0}%": "Слияние… {stage} {:.0}%",
"Move {what} to Recently Deleted?": "Переместить {what} в «Недавно удалённые»?",
"Named ({named_n})": "Именованные ({named_n})",
"Paste into {n} photo{} — only settings that were copied are pasted": "Вставка в фото: {n}{:.0} — вставляются только скопированные настройки",
"Preset: {name}": "Пресет: {name}",
"Preview only — editing the camera's embedded JPEG ({})": "Только просмотр — правка встроенного в камеру JPEG ({})",
"Preview only — {}": "Только просмотр — {}",
"Profile: {}": "Профиль: {}",
"Proof Copy ({})": "Пробная копия ({})",
"Proof Preview · {}": "Пробный просмотр · {}",
"Quick Develop · {n} photos": "Быстрая коррекция · фото: {n}",
"Quick Develop: {name}": "Быстрая коррекция: {name}",
"Rated {}": "Оценка: {}",
"Reading photos… {done} of {total}": "Чтение фото… {done} из {total}",
"Reading photos… {} of {}": "Чтение фото… {} из {}",
"Redo {}": "Повторить {}",
"Remove “{}” from Favorites": "Убрать «{}» из избранного",
"Rename {n} Photos…": "Переименовать фото: {n}…",
"Rename “{name}”": "Переименовать «{name}»",
"Rendering on the CPU: {why}": "Рендеринг на CPU: {why}",
"Reset {name}": "Сбросить: {name}",
"Reset {} Channel": "Сбросить канал: {}",
"Saved export preset “{}”": "Пресет экспорта «{}» сохранён",
"Show {hidden} hidden location{}": "Показать скрытые места: {hidden}{:.0}",
"Showing {n} of {}": "Показано {n} из {}",
"Smart album: {}": "Смарт-альбом: {}",
"Undo {}": "Отменить {}",
"Updated “{name}”": "«{name}» обновлено",
"Version {} — a clean-room, pure-Rust photo library and raw developer.": "Версия {} — независимо разработанная библиотека фото и RAW-конвертер на чистом Rust.",
"Version: {}": "Версия: {}",
"none (CPU rendering): {why}": "нет (рендеринг на CPU): {why}",
"the {n} selected photos": "выбранные {n} фото",
"the {} photos in view": "все {} фото в представлении",
"these {count} photos": "эти {count} фото",
"{count} smart preview{} · {:.1} MB": "Смарт-просмотров: {count}{:.0} · {:.1} МБ",
"{f} folders (and their subfolders)": "Папок: {f} (и их подпапок)",
"{label} Grading": "Цветокоррекция: {label}",
"{label} {d:+} on every selected photo": "{label} {d:+} для каждого выбранного фото",
"{label}, {n} photos": "{label}, фото: {n}",
"{matching} of {t} photos": "Фото: {matching} из {t}",
"{matching} photos": "Фото: {matching}",
"{mode} spot {} of {}": "{mode}: пятно {} из {}",
"{month}": "{month}",
"{month} {year}": "{month:02}.{year}",
"{msg} ({failed} failed)": "{msg} (ошибок: {failed})",
"{name} Label": "Метка: {name}",
"{name} Off": "{name}: выкл.",
"{name} On": "{name}: вкл.",
"{name} — double-click to reset it": "{name} — двойной щелчок для сброса",
"{n} change{} saved in memory but not written to disk: {e}\nLightCraft retries automatically; quitting now would lose {}.": "Не записано на диск, хранится только в памяти (изменений: {n}): {e}\nLightCraft повторяет попытку автоматически; при выходе сейчас они будут потеряны.{:.0}{:.0}",
"{n} found · {sel} selected": "Найдено: {n} · выбрано: {sel}",
"{n} photos": "Фото: {n}",
"{n} photos in {} are hidden by the filters above": "Фильтры выше скрывают фото в разделе «{}»: {n}",
"{n} photo{}": "Фото: {n}{:.0}",
"{n} photo{} match · updates automatically as photos change": "Подходящих фото: {n}{:.0} · обновляется автоматически при изменении фото",
"{n} photo{} now · updates automatically as photos change": "Сейчас фото: {n}{:.0} · обновляется автоматически при изменении фото",
"{sel_n} selected · {counted}": "Выбрано: {sel_n} · {counted}",
"{stage}… {:.0}%": "{stage}… {:.0}%",
"{verb} {n} Photo{}": "{verb} (фото: {n}){:.0}",
"{weekday}, {day}": "{weekday}, {day}",
"{weekday}, {day} {month} {year}": "{weekday}, {day:02}.{month:02}.{year}",
"{what} merge added": "{what}: слияние добавлено",
"{what} merge failed: {e}": "{what}: ошибка слияния: {e}",
"{year}": "{year}",
"{} and higher": "{} и выше",
"{} files": "Файлов: {}",
"{} files and {f} folder{}": "Файлов: {}, папок: {f}{:.0}",
"{} of 4 guides — drag along lines that should be vertical or horizontal.": "Направляющих: {} из 4 — проведите вдоль линий, которые должны быть вертикальными или горизонтальными.",
"{} photos": "Фото: {}",
"{} photo{} not readable": "Не читается фото: {}{:.0}",
"{} spot(s) on this photo": "Пятен на этом фото: {}",
"· {dups} already in the library": "· уже в библиотеке: {dups}",
"· {n} photo{}": "· фото: {n}{:.0}",
"… and {more} more": "… и ещё {more}"
}
File diff suppressed because it is too large. Load diff
+2
View File
@@ -122,6 +122,7 @@ language_table! {
Ja, "ja", "日本語", "Jpan", include_str!("../locales/ja.json");
PtBr, "pt-br", "Português (Brasil)", "Latn", include_str!("../locales/pt-br.json");
De, "de", "Deutsch", "Latn", include_str!("../locales/de.json");
Ru, "ru", "Русский", "Cyrl", include_str!("../locales/ru.json");
}
// The settings file stores the BCP-47 code (`"zh-hans"`), never the Rust variant name, so a
@@ -548,6 +549,7 @@ mod tests {
("app.language.japanese", Locale::Ja),
("app.language.portuguese", Locale::PtBr),
("app.language.german", Locale::De),
("app.language.russian", Locale::Ru),
];
// One command per language, and every command reachable from the menu table.
assert_eq!(commands.len(), Locale::ALL.len());
+2
View File
@@ -19,6 +19,7 @@ pub const LANGUAGE_COMMANDS: &[UiCommand] = &[
("app.language.japanese", crate::i18n::Locale::Ja.name(), None, "Edit>Language"),
("app.language.portuguese", crate::i18n::Locale::PtBr.name(), None, "Edit>Language"),
("app.language.german", crate::i18n::Locale::De.name(), None, "Edit>Language"),
("app.language.russian", crate::i18n::Locale::Ru.name(), None, "Edit>Language"),
];
/// Every UI command: the languages, then everything else. `xtask parity` reads both tables from
@@ -37,6 +38,7 @@ pub fn language_from_command(id: &str) -> Option<crate::i18n::Locale> {
"app.language.japanese" => Some(crate::i18n::Locale::Ja),
"app.language.portuguese" => Some(crate::i18n::Locale::PtBr),
"app.language.german" => Some(crate::i18n::Locale::De),
"app.language.russian" => Some(crate::i18n::Locale::Ru),
_ => None,
}
}