i18n(ru): fix counted status agreement and font weight labels (#4787)

This commit is contained in:
Ivan · VanTan authored and GitHub committed 2026-10-13 02:49:34 -04:00
1 parent 00802b03de
commit a999ce4a77
3 files changed
+109 -17

No files matched your search

+4
View File
@@ -150,3 +150,7 @@ sync_github_name = false
[people.sssehnsuchttt]
sync_github_name = true
[people.VanTan666]
display_name = "VanTan"
sync_github_name = false
+88
View File
@@ -626,6 +626,94 @@ mod tests {
assert_eq!(trn(ru(), 111, "{n} item", "{n} items"), "111 элементов");
}
#[test]
fn russian_status_messages_agree_with_counts() {
let ru = Lang::from_code("ru").expect("ru registered");
let cases = [
(
"Exported {n} swatch to {file}",
"Exported {n} swatches to {file}",
["Экспортирован {n} образец в {file}", "Экспортированы {n} образца в {file}", "Экспортировано {n} образцов в {file}"],
),
(
"Imported {n} brush from {group}",
"Imported {n} brushes from {group}",
["Импортирована {n} кисть из {group}", "Импортированы {n} кисти из {group}", "Импортировано {n} кистей из {group}"],
),
(
"Imported {n} swatch from {file}",
"Imported {n} swatches from {file}",
["Импортирован {n} образец из {file}", "Импортированы {n} образца из {file}", "Импортировано {n} образцов из {file}"],
),
("Played {n} step", "Played {n} steps", ["Воспроизведён {n} шаг", "Воспроизведены {n} шага", "Воспроизведено {n} шагов"]),
(
"Updated {n} linked smart object changed on disk",
"Updated {n} linked smart objects changed on disk",
[
"Обновлён {n} связанный смарт-объект, изменённый на диске",
"Обновлены {n} связанных смарт-объекта, изменённых на диске",
"Обновлено {n} связанных смарт-объектов, изменённых на диске",
],
),
(
"{n} layer recorded by this comp was deleted. Update the comp, or clear the warning.",
"{n} layers recorded by this comp were deleted. Update the comp, or clear the warning.",
[
"Удалён {n} слой, записанный в этом варианте. Обновите вариант или сбросьте предупреждение.",
"Удалены {n} слоя, записанных в этом варианте. Обновите вариант или сбросьте предупреждение.",
"Удалено {n} слоёв, записанных в этом варианте. Обновите вариант или сбросьте предупреждение.",
],
),
("{n} sample point removed", "{n} sample points removed", ["Удалена {n} точка замера", "Удалены {n} точки замера", "Удалено {n} точек замера"]),
(
"Loaded {n} action from {file}",
"Loaded {n} actions from {file}",
["Загружена {n} операция из {file}", "Загружены {n} операции из {file}", "Загружено {n} операций из {file}"],
),
(
"Saved {n} action to {file}",
"Saved {n} actions to {file}",
["Сохранена {n} операция в {file}", "Сохранены {n} операции в {file}", "Сохранено {n} операций в {file}"],
),
(
"{n} step with no Photoshop equivalent left out",
"{n} steps with no Photoshop equivalent left out",
[
"Пропущен {n} шаг без эквивалента в Photoshop",
"Пропущены {n} шага без эквивалента в Photoshop",
"Пропущено {n} шагов без эквивалента в Photoshop",
],
),
];
// Include zero, teens, and compound counts as well as each basic form.
for (n, form) in [(0, 2), (1, 0), (2, 1), (3, 1), (4, 1), (5, 2), (11, 2), (12, 2), (14, 2), (21, 0), (22, 1), (25, 2), (101, 0), (112, 2)] {
for (one, other, forms) in cases {
let expected = forms[form].replace("{n}", &n.to_string());
assert_eq!(trn(ru, n, one, other), expected, "{one}, n={n}");
}
}
assert_eq!(
fmt(&trn(ru, 2, "Imported {n} brush from {group}", "Imported {n} brushes from {group}"), &[("group", "Кисти")]),
"Импортированы 2 кисти из Кисти"
);
assert_eq!(
fmt(&trn(ru, 22, "Loaded {n} action from {file}", "Loaded {n} actions from {file}"), &[("file", "actions.atn")]),
"Загружены 22 операции из actions.atn"
);
}
#[test]
fn russian_font_weights_and_reviewed_labels() {
let ru = Lang::from_code("ru").expect("ru registered");
assert_eq!(tr_ctx(ru, "fontWeight", "ExtraLight"), "Сверхтонкий");
assert_eq!(tr_ctx(ru, "fontWeight", "Light"), "Лёгкий");
assert_eq!(tr_ctx(ru, "fontWeight", "ExtraBold"), "Сверхжирный");
assert_eq!(tr_ctx(ru, "fontWeight", "Black"), "Сверхжирный (Black)");
assert_eq!(tr(ru, "Delete and Fill Selection"), "Удалить и залить выделение");
assert_eq!(tr(ru, "Discard the embedded profile (don't color manage)"), "Не использовать встроенный профиль (без управления цветом)");
assert_eq!(tr(ru, "No object found there — drag a rectangle around it"), "Объект не найден — обведите его прямоугольником");
}
#[test]
fn ukrainian_resolves_locales_and_preferences() {
let uk = Lang::from_code("uk").expect("uk registered");
+17 -17
View File
@@ -120,7 +120,7 @@
Fill… Выполнить заливку…
Stroke… Обвести…
Content-Aware Fill… Заливка с учётом содержимого…
Delete and Fill Selection Удалить и заполнить выделение
Delete and Fill Selection Удалить и залить выделение
Define Brush Preset… Определить кисть…
Define Pattern… Определить паттерн…
Define Custom Shape… Определить свою фигуру…
@@ -904,7 +904,7 @@
Assign working space Назначить рабочее пространство
Use the embedded profile (instead of the working space) Использовать встроенный профиль (вместо рабочего пространства)
Leave as is (don't color manage) Оставить как есть (без управления цветом)
Discard the embedded profile (don't color manage) Отклонить встроенный профиль (без управления цветом)
Discard the embedded profile (don't color manage) Не использовать встроенный профиль (без управления цветом)
Embed Color Profile Встроить цветовой профиль
Assign Profile… Назначить профиль…
Convert to Profile… Преобразовать в профиль…
@@ -2694,14 +2694,14 @@ cameraRaw Roughness Неровность
Its layers don't fit the GPU memory budget. Raising Memory usage in Preferences › Performance raises the budget, up to a quarter of this computer's memory. Слои не помещаются в бюджет памяти GPU. Увеличение параметра «Память» в разделе Настройки › Производительность повышает бюджет, но не больше четверти памяти этого компьютера.
The GPU compositor wasn't used: {reason} Компоновщик GPU не использовался: {reason}
fontWeight Thin Тонкий
fontWeight ExtraLight Особо светлый
fontWeight Light Светлый
fontWeight ExtraLight Сверхтонкий
fontWeight Light Лёгкий
fontWeight Regular Обычный
fontWeight Medium Средний
fontWeight SemiBold Полужирный
fontWeight Bold Жирный
fontWeight ExtraBold Особо жирный
fontWeight Black Чёрный
fontWeight ExtraBold Сверхжирный
fontWeight Black Сверхжирный (Black)
fontWeight Italic Курсив
# Pattern Stamp tool
@@ -3015,16 +3015,16 @@ curves Smooth Сгладить
The layer or its mask changed. Drag the mask onto the Trash again. Слой или его маска изменились. Перетащите маску в корзину ещё раз.
Delete the vector mask? Удалить векторную маску?
# Counted status messages and labels (#3454; adapted from PR #3821)
@plural Exported {n} swatch to {file}|Exported {n} swatches to {file} Экспортирован {n} образец в {file}|Экспортировано {n} образца в {file}|Экспортировано {n} образцов в {file}
@plural Imported {n} brush from {group}|Imported {n} brushes from {group} Импортирована {n} кисть из {group}|Импортировано {n} кисти из {group}|Импортировано {n} кистей из {group}
@plural Imported {n} swatch from {file}|Imported {n} swatches from {file} Импортирован {n} образец из {file}|Импортировано {n} образца из {file}|Импортировано {n} образцов из {file}
@plural Played {n} step|Played {n} steps Воспроизведён {n} шаг|Воспроизведено {n} шага|Воспроизведено {n} шагов
@plural Updated {n} linked smart object changed on disk|Updated {n} linked smart objects changed on disk Обновлён {n} связанный смарт-объект, изменённый на диске|Обновлено {n} связанных смарт-объекта, изменённых на диске|Обновлено {n} связанных смарт-объектов, изменённых на диске
@plural Exported {n} swatch to {file}|Exported {n} swatches to {file} Экспортирован {n} образец в {file}|Экспортированы {n} образца в {file}|Экспортировано {n} образцов в {file}
@plural Imported {n} brush from {group}|Imported {n} brushes from {group} Импортирована {n} кисть из {group}|Импортированы {n} кисти из {group}|Импортировано {n} кистей из {group}
@plural Imported {n} swatch from {file}|Imported {n} swatches from {file} Импортирован {n} образец из {file}|Импортированы {n} образца из {file}|Импортировано {n} образцов из {file}
@plural Played {n} step|Played {n} steps Воспроизведён {n} шаг|Воспроизведены {n} шага|Воспроизведено {n} шагов
@plural Updated {n} linked smart object changed on disk|Updated {n} linked smart objects changed on disk Обновлён {n} связанный смарт-объект, изменённый на диске|Обновлены {n} связанных смарт-объекта, изменённых на диске|Обновлено {n} связанных смарт-объектов, изменённых на диске
@plural Saved for Web: {n} file|Saved for Web: {n} files Сохранено для Web: {n} файл|Сохранено для Web: {n} файла|Сохранено для Web: {n} файлов
@plural {n} layer recorded by this comp was deleted. Update the comp, or clear the warning.|{n} layers recorded by this comp were deleted. Update the comp, or clear the warning. Удалён {n} слой, записанный в этом варианте. Обновите вариант или сбросьте предупреждение.|Удалено {n} слоя, записанных в этом варианте. Обновите вариант или сбросьте предупреждение.|Удалено {n} слоёв, записанных в этом варианте. Обновите вариант или сбросьте предупреждение.
@plural {n} layer recorded by this comp was deleted. Update the comp, or clear the warning.|{n} layers recorded by this comp were deleted. Update the comp, or clear the warning. Удалён {n} слой, записанный в этом варианте. Обновите вариант или сбросьте предупреждение.|Удалены {n} слоя, записанных в этом варианте. Обновите вариант или сбросьте предупреждение.|Удалено {n} слоёв, записанных в этом варианте. Обновите вариант или сбросьте предупреждение.
@plural {n} plane|{n} planes {n} плоскость|{n} плоскости|{n} плоскостей
@plural {n} preset|{n} presets {n} набор|{n} набора|{n} наборов
@plural {n} sample point removed|{n} sample points removed Удалена {n} точка замера|Удалено {n} точки замера|Удалено {n} точек замера
@plural {n} sample point removed|{n} sample points removed Удалена {n} точка замера|Удалены {n} точки замера|Удалено {n} точек замера
@plural {n} slice|{n} slices {n} фрагмент|{n} фрагмента|{n} фрагментов
@plural {n} step|{n} steps {n} шаг|{n} шага|{n} шагов
@plural {warning} (+{n} more brush preset warning)|{warning} (+{n} more brush preset warnings) {warning} (и ещё {n} предупреждение о наборах кистей)|{warning} (и ещё {n} предупреждения о наборах кистей)|{warning} (и ещё {n} предупреждений о наборах кистей)
@@ -3035,7 +3035,7 @@ curves Smooth Сгладить
Medium Blue Средне-синий
Light Gray Светло-серый
Object Finder Поиск объектов
No object found there — drag a rectangle around it Там не найден объект — обведите его прямоугольником
No object found there — drag a rectangle around it Объект не найден — обведите его прямоугольником
Remove after each stroke Удалять после каждого штриха
Apply the removal ({key}) Применить удаление ({key})
Strokes to remove: {n} (Enter applies, Esc cancels) Штрихов к удалению: {n} (Enter применяет, Esc отменяет)
@@ -3048,10 +3048,10 @@ curves Smooth Сгладить
Save Actions… Сохранить операции…
{name} (Photoshop) {name} (Photoshop)
{message} ({note}) {message} ({note})
@plural Loaded {n} action from {file}|Loaded {n} actions from {file} Загружена {n} операция из {file}|Загружено {n} операции из {file}|Загружено {n} операций из {file}
@plural Loaded {n} action from {file}|Loaded {n} actions from {file} Загружена {n} операция из {file}|Загружены {n} операции из {file}|Загружено {n} операций из {file}
@plural {n} step has no PhotoCraft equivalent yet|{n} steps have no PhotoCraft equivalent yet {n} шаг пока не имеет эквивалента в PhotoCraft|{n} шага пока не имеют эквивалента в PhotoCraft|{n} шагов пока не имеют эквивалента в PhotoCraft
@plural Saved {n} action to {file}|Saved {n} actions to {file} Сохранена {n} операция в {file}|Сохранено {n} операции в {file}|Сохранено {n} операций в {file}
@plural {n} step with no Photoshop equivalent left out|{n} steps with no Photoshop equivalent left out Пропущен {n} шаг без эквивалента в Photoshop|Пропущено {n} шага без эквивалента в Photoshop|Пропущено {n} шагов без эквивалента в Photoshop
@plural Saved {n} action to {file}|Saved {n} actions to {file} Сохранена {n} операция в {file}|Сохранены {n} операции в {file}|Сохранено {n} операций в {file}
@plural {n} step with no Photoshop equivalent left out|{n} steps with no Photoshop equivalent left out Пропущен {n} шаг без эквивалента в Photoshop|Пропущены {n} шага без эквивалента в Photoshop|Пропущено {n} шагов без эквивалента в Photoshop
# Actions panel: set folders, dialog toggle, Insert Stop
Insert Stop… Вставить остановку…
Can't render this file because it contains an unexpected character in line 6 and column 47.