mirror of
https://github.com/storytold/lightcraft.git
synced 2026-10-14 19:27:01 -04:00
Merge PR #264
# Conflicts: # crates/ui-egui/src/i18n.rs # crates/ui-egui/src/menus.rs
This commit is contained in:
4 files changed
+1389
No files matched your search
@@ -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
@@ -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());
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user