From d60999ed55d844870a0b95c15c3ace16d3bc7dbc Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 20 Sep 2024 05:25:02 +0300 Subject: [PATCH] Add Russian localization (#135) * Add Russian localization * Fix some mistypes and grammar * Add description for ASCII & Unicode character escapes --- public/locales/cn/translation.json | 12 +- public/locales/ru/translation.json | 125 +++++++++++++++++++ src/components/language-select/index.tsx | 1 + src/modules/editor/features/insert/index.tsx | 2 +- src/modules/editor/legends.tsx | 4 +- src/modules/graph/text.tsx | 6 +- src/modules/graph/utils.ts | 8 +- src/parser/character-class.ts | 4 +- 8 files changed, 144 insertions(+), 18 deletions(-) create mode 100644 public/locales/ru/translation.json diff --git a/public/locales/cn/translation.json b/public/locales/cn/translation.json index 787cfd6..d2406f1 100644 --- a/public/locales/cn/translation.json +++ b/public/locales/cn/translation.json @@ -8,7 +8,7 @@ "Input a regular expression": "输入一条正则表达式", "Characters": "字符", "Direct match characters": "直接匹配字符串", - "Character classes:": "字符类", + "Character classes": "字符类", "Distinguish different types of characters": "区分不同类型的字符", "Ranges": "范围", "One of": "其一", @@ -25,15 +25,15 @@ "Matches \"x\" and stores it on the groups property of the returned matches under the name specified by ": "匹配 “x” 并将其存储在返回的匹配项的groups属性中,该属性位于 指定的名称下", "Back reference": "反向引用", "A back reference to match group #1": "匹配组 #1 的反向引用", - "A back reference to match group #name": "匹配组 #name 的反向引用", + "A back reference to match group #Name": "匹配组 #Name 的反向引用", "Assertion": "断言", - "Begin with": "以...开始", - "End with": "以...结束", + "Begins with": "以...开始", + "Ends with": "以...结束", "Matches the beginning of input": "匹配输入的开头", "Followed by:": "接着:", "Not followed by:": "不接着:", - "Preceded by:": "前面是", - "Not Preceded by:": "前面不是:", + "Preceded by:": "前面是:", + "Not preceded by:": "前面不是:", "WordBoundary": "单词边界", "NonWordBoundary": "非单词边界", "Matches \"x\" only if \"x\" is followed by \"y\"": "x 被 y 跟随时匹配 x", diff --git a/public/locales/ru/translation.json b/public/locales/ru/translation.json new file mode 100644 index 0000000..0d41d6e --- /dev/null +++ b/public/locales/ru/translation.json @@ -0,0 +1,125 @@ +{ + "Home": "Главная", + "Samples": "Примеры", + "Legends": "Справка", + "Edit": "Редактор", + "You have to select nodes first": "Сначала выберите узел на графе", + "Test": "Проверка", + "You can select nodes by dragging or clicking on the graph": "Узлы на графе можно выбрать выделением или по клику", + "Input a regular expression": "Введите регулярное выражение", + "Flags: ": "Флаги: ", + "Characters": "Символы", + "Direct match characters": "Поиск буквального соответствия", + "Character classes": "Символьные классы", + "Distinguish different types of characters": "Поиск различных классов символов", + "Ranges": "Наборы и диапазоны", + "One of": "любой из:", + "Matches any one of the enclosed characters": "Любой из перечисленных в наборе или диапазоне символов", + "None of": "ни один из:", + "Matches anything that is not enclosed in the brackets": "Любой символ, не перечисленный в наборе или диапазоне", + "Choice": "Альтернация", + "Matches either \"x\" or \"y\"": "Альтернативный выбор — либо «x», либо «y»", + "Quantifier": "Квантификатор", + "Indicate numbers of characters or expressions to match": "Указывает количество повторений символа или выражения", + "Group": "Группа", + "Matches x and remembers the match": "Ищет выражение и запоминает совпадение для последующего обращения по номеру", + "Matches \"x\" but does not remember the match": "Ищет выражение, но не запоминает совпадение", + "Matches \"x\" and stores it on the groups property of the returned matches under the name specified by ": "Ищет выражение и запоминает совпадение для последующего обращения по имени", + "Back reference": "Ссылка", + "A back reference to match group #1": "Обращение к содержимому скобочной группы по номеру", + "A back reference to match group #Name": "Обращение к содержимому скобочной группы по имени", + "Assertion": "Проверки", + "Begins with": "Начало строки", + "Ends with": "Конец строки", + "Matches the beginning of input": "Ищет совпадение в начале строки", + "Matches \"x\" only if \"x\" is followed by \"y\"": "Ищет лишь такое выражение «x», после которого следует «y»", + "Followed by:": "после идёт:", + "Not followed by:": "после не идёт:", + "Preceded by:": "идёт перед:", + "Not preceded by:": "не идёт перед:", + "WordBoundary": "Граница слова", + "NonWordBoundary": "Не граница слова", + "Global search": "Глобальный поиск", + "Case-insensitive": "Игнорировать регистр", + "Multi-line": "Многострочный режим", + "Add A Case": "Добавить случай", + "Insert around": "Вставить узел", + "Group selection": "Ссылка на группу", + "Lookaround assertion": "Проверка до/после", + "Before": "Перед", + "Parallel": "Параллельно", + "After": "После", + "show more": "Дополнительно", + "show less": "Скрыть", + "Expression": "Выражение", + "Content": "Содержимое", + "An Empty Range": "Пустой диапазон", + "Capturing group": "Захватывающая группа", + "Non-capturing group": "Незахватывающая группа", + "Named capturing group": "Именованная группа", + "Capturing": "По номеру", + "Non-cap": "Нет", + "Named cap": "По имени", + "Lookahead assertion": "Опережающая", + "Lookbehind assertion": "Ретроспективная", + "Lookahead": "Опережающая", + "Lookbehind": "Ретроспективная", + "Type": "Тип", + "Value": "Значение", + "Simple string": "Cтрока", + "Character class": "Символьный класс", + "Character range": "Диапазон", + "Beginning Assertion": "Начало строки", + "End Assertion": "Конец строки", + "Word Boundary Assertion": "Граница слова", + "The input will be escaped automatically.": "Введённая строка экранируется автоматически", + "Negate": "Отрицание", + "negate": "отрицание", + "Any character": "Любой символ", + "Any digit": "Любая цифра", + "Non-digit": "Любая не цифра", + "Any alphanumeric": "Любой из [a-zA-Z0-9_]", + "Non-alphanumeric": "Любой кроме [a-zA-Z0-9_]", + "White space": "Любой пробельный символ", + "Non-white space": "Любой непробельный символ", + "Horizontal tab": "Табуляция", + "Carriage return": "Возврат каретки", + "Linefeed": "Новая строка", + "Vertical tab": "Вертикальная табуляция", + "Form-feed": "Перевод страницы", + "Backspace": "Возврат назад", + "NUL": "Символ NUL", + "\\b Backspace": "\\b Возврат назад", + "\\t Horizontal Tab": "\\t Табуляция", + "\\n Line Feed": "\\n Новая строка", + "\\v Vertical Tab": "\\v Вертикальная табуляция", + "\\f Form Feed": "\\f Перевод страницы", + "\\r Carriage Return": "\\r Возврат каретки", + "ASCII symbol": "Символ ASCII", + "Unicode symbol": "Символ Unicode", + "Class": "Класс", + "Back Reference": "Ссылка", + "Choose one": "Выбрать", + "UnGroup": "Разгруппировать", + "Cancel assertion": "Удалить проверку", + "times": "Количество повторов", + "custom": "диапазон", + "1 (default)": "1 (по умолчанию)", + "0 or 1": "0 или 1", + "0 or more": "0 или более", + "1 or more": "1 или более", + "greedy": "Жадный поиск", + "1. Whole Numbers": "1. Неотрицательные целые числа", + "2. Decimal Numbers": "2. Неотрицательные действительные числа", + "3. Whole + Decimal Numbers": "3. Неотрицательные целые и действительные числа", + "4. Negative, Positive Whole + Decimal Numbers": "4. Действительные числа", + "6. Date Format YYYY-MM-dd": "6. Дата в формате YYYY-MM-dd", + "Flag: ": "Флаги: ", + "Allows . to match newline": "Считать . символом перевода строки", + "Settings: ": "Настройки: ", + "include escape ": "добавить экранирование ", + "Copy permalink": "Скопировать ссылку", + "Permalink copied.": "Ссылка скопирована", + "Empty": "Пустой узел", + "Group's name": "Имя группы" +} diff --git a/src/components/language-select/index.tsx b/src/components/language-select/index.tsx index 584d920..5aecb50 100644 --- a/src/components/language-select/index.tsx +++ b/src/components/language-select/index.tsx @@ -21,6 +21,7 @@ export function LanguageSelect() { English 简体中文 + Русский diff --git a/src/modules/editor/features/insert/index.tsx b/src/modules/editor/features/insert/index.tsx index e63c2a8..9aec4c5 100644 --- a/src/modules/editor/features/insert/index.tsx +++ b/src/modules/editor/features/insert/index.tsx @@ -79,7 +79,7 @@ const Insert: React.FC = ({ nodes }) => { } return [ { value: 'lookahead', label: 'Lookahead' }, - { value: 'lookbehind', label: 'Lookahead' }, + { value: 'lookbehind', label: 'Lookbehind' }, ] }, [nodes]) diff --git a/src/modules/editor/legends.tsx b/src/modules/editor/legends.tsx index 9f71288..23654fa 100644 --- a/src/modules/editor/legends.tsx +++ b/src/modules/editor/legends.tsx @@ -36,7 +36,7 @@ const legends = [ name: 'Choice', infos: [ { - Icon: , + Icon: , desc: `Matches either "x" or "y"`, }, ], @@ -75,7 +75,7 @@ const legends = [ desc: 'A back reference to match group #1', }, { - Icon: '} />, + Icon: '} />, desc: `A back reference to match group #Name`, }, ], diff --git a/src/modules/graph/text.tsx b/src/modules/graph/text.tsx index aacad23..3602c65 100644 --- a/src/modules/graph/text.tsx +++ b/src/modules/graph/text.tsx @@ -24,10 +24,10 @@ type Props = { } const assertionTextMap = { - beginning: 'Begin with', - end: 'End with', + beginning: 'Begins with', + end: 'Ends with', lookahead: ['Followed by:', 'Not followed by:'], - lookbehind: ['Preceded by:', 'Not Preceded by:'], + lookbehind: ['Preceded by:', 'Not preceded by:'], word: ['WordBoundary', 'NonWordBoundary'], } diff --git a/src/modules/graph/utils.ts b/src/modules/graph/utils.ts index 32a5d16..8ddfd82 100644 --- a/src/modules/graph/utils.ts +++ b/src/modules/graph/utils.ts @@ -6,10 +6,10 @@ import type { AST, CharacterClassKey } from '@/parser' import { characterClassTextMap } from '@/parser' const assertionTextMap = { - beginning: 'Begin with', - end: 'End with', - lookahead: ['Followed by:', 'Not followed by'], - lookbehind: ['Preceded by', 'Not Preceded by'], + beginning: 'Begins with', + end: 'Ends with', + lookahead: ['Followed by:', 'Not followed by:'], + lookbehind: ['Preceded by:', 'Not preceded by:'], word: ['WordBoundary', 'NonWordBoundary'], } diff --git a/src/parser/character-class.ts b/src/parser/character-class.ts index c8bb154..478a1c5 100644 --- a/src/parser/character-class.ts +++ b/src/parser/character-class.ts @@ -19,7 +19,7 @@ export const characterClassTextMap = { '\\cK': '\\v Vertical Tab', '\\cL': '\\f Form Feed', '\\cM': '\\r Carriage Return', - '\\xhh': '', - '\\uhhhh': '', + '\\xhh': 'ASCII symbol', + '\\uhhhh': 'Unicode symbol', } export type CharacterClassKey = keyof typeof characterClassTextMap