@terrafirmagreg-team/translate 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@terrafirmagreg-team/translate",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "type": "module",
5
5
  "description": "Localization runtime and catalogs",
6
6
  "license": "LGPL-3.0-only",
@@ -11,6 +11,7 @@
11
11
  "./create": "./src/create.ts",
12
12
  "./config": "./src/config.ts",
13
13
  "./server": "./src/server.ts",
14
+ "./locales": "./src/locales.ts",
14
15
  "./hooks": "./src/hooks/index.ts",
15
16
  "./hooks/*": [
16
17
  "./src/hooks/*.ts",
@@ -9,27 +9,15 @@ export function createLocaleCatalog(
9
9
  );
10
10
  }
11
11
 
12
- export function createLocaleCatalogs(
12
+ export function createNamespacedLocaleCatalogs(
13
13
  modules: Record<string, unknown>,
14
14
  ): Record<string, Record<string, unknown>> {
15
15
  const catalogs: Record<string, Record<string, unknown>> = {};
16
16
  for (const [path, messages] of Object.entries(modules)) {
17
- const dir = path.slice(0, path.lastIndexOf('/'));
18
- const catalog = dir.slice(dir.lastIndexOf('/') + 1);
17
+ const ns = path.slice(0, path.lastIndexOf('/'));
19
18
  const lang = path.slice(path.lastIndexOf('/') + 1, -'.json'.length);
20
- (catalogs[catalog] ??= {})[lang] = messages;
19
+ (catalogs[ns.slice(ns.lastIndexOf('/') + 1)] ??= {})[lang] = messages;
21
20
  }
22
21
  return catalogs;
23
22
  }
24
23
 
25
- export function createMergedLocaleCatalog(
26
- modules: Record<string, unknown>,
27
- ): Record<string, unknown> {
28
- const merged: Record<string, Record<string, unknown>> = {};
29
- for (const [path, messages] of Object.entries(modules)) {
30
- const lang = path.slice(path.lastIndexOf('/') + 1, -'.json'.length);
31
- Object.assign(merged[lang] ??= {}, messages);
32
- }
33
- return merged;
34
- }
35
-
@@ -0,0 +1,3 @@
1
+ {
2
+ "Views(ui.views)": "Views"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "Views(ui.views)": "Просмотры"
3
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "Changelog(sections.changelog)": "Changelog",
3
+ "Release history and version notes(sections.desc.changelog)": "Release history and version notes"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "Changelog(sections.changelog)": "Список изменений",
3
+ "Release history and version notes(sections.desc.changelog)": "История релизов и заметки к версиям"
4
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "A player joined the game(chat.anonymousJoin)": "A player joined the game",
3
+ "A player left the game(chat.anonymousQuit)": "A player left the game",
4
+ "Chat(chat.title)": "Chat",
5
+ "Close(common.close)": "Close",
6
+ "Log in(chat.login)": "Log in",
7
+ "Message(chat.placeholder)": "Message",
8
+ "Name(chat.nameLabel)": "Name",
9
+ "Name(chat.namePlaceholder)": "Name",
10
+ "No messages yet(chat.noMessages)": "No messages yet",
11
+ "Send(chat.send)": "Send",
12
+ "Servers offline(servers.offline)": "Servers offline",
13
+ "Unknown error(chat.errorUnknown)": "Unknown error",
14
+ "{playername} joined the game(chat.playerJoin)": "{playername} joined the game",
15
+ "{playername} left the game(chat.playerQuit)": "{playername} left the game"
16
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "A player joined the game(chat.anonymousJoin)": "Игрок зашёл в игру",
3
+ "A player left the game(chat.anonymousQuit)": "Игрок вышел из игры",
4
+ "Chat(chat.title)": "Чат",
5
+ "Close(common.close)": "Закрыть",
6
+ "Log in(chat.login)": "Войти",
7
+ "Message(chat.placeholder)": "Сообщение",
8
+ "Name(chat.nameLabel)": "Имя",
9
+ "Name(chat.namePlaceholder)": "Имя",
10
+ "No messages yet(chat.noMessages)": "Пока нет сообщений",
11
+ "Send(chat.send)": "Отправить",
12
+ "Servers offline(servers.offline)": "Серверы недоступны",
13
+ "Unknown error(chat.errorUnknown)": "Неизвестная ошибка",
14
+ "{playername} joined the game(chat.playerJoin)": "{playername} зашёл в игру",
15
+ "{playername} left the game(chat.playerQuit)": "{playername} вышел из игры"
16
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "Bad(ui.feedback.bad)": "Bad",
3
+ "Close(ui.feedback.close)": "Close",
4
+ "Context(ui.feedback.context)": "Context",
5
+ "Feedback(ui.feedback.tooltip)": "Feedback",
6
+ "Good(ui.feedback.good)": "Good",
7
+ "How is this page?(ui.feedback.question)": "How is this page?",
8
+ "Leave your feedback…(ui.feedback.placeholder)": "Leave your feedback…",
9
+ "Submit Again(ui.feedback.submit_again)": "Submit Again",
10
+ "Submit(ui.feedback.submit)": "Submit",
11
+ "Thank you for your feedback!(ui.feedback.thanks)": "Thank you for your feedback!",
12
+ "View on GitHub(ui.feedback.view_on_github)": "View on GitHub",
13
+ "1 Reply(replies)": "1 Reply",
14
+ "Add emoji(emoji picker)(aria-label)": "Add emoji",
15
+ "Add link(comment editor)": "Add link",
16
+ "Attach your own image to the comment.(image upload)": "Attach your own image to the comment.",
17
+ "Close(dialog)(aria-label)": "Close",
18
+ "Comments(replies)": "Comments",
19
+ "Copied(code block)(aria-label)": "Copied",
20
+ "Copy(comment menu)": "Copy",
21
+ "Delete(comment menu)": "Delete",
22
+ "Dislike(comment actions)(aria-label)": "Dislike",
23
+ "Edit comment(comment menu)": "Edit comment",
24
+ "Edit message(edit comment form)": "Edit message",
25
+ "Edit the content of your comment.(comment menu)": "Edit the content of your comment.",
26
+ "Edit(comment menu)": "Edit",
27
+ "Image preview(image upload)(image alt text)": "Image preview",
28
+ "Insert code block(code block editor)": "Insert code block",
29
+ "Insert emoji(emoji picker)": "Insert emoji",
30
+ "Insert(link editor)": "Insert",
31
+ "Leave comment(comment form)": "Leave comment",
32
+ "Like(comment actions)(aria-label)": "Like",
33
+ "Link(link editor)": "Link",
34
+ "Load more(comment list)": "Load more",
35
+ "Loading(mention picker)": "Loading",
36
+ "Loading...(emoji picker)": "Loading...",
37
+ "My link (optional)(link editor)": "My link (optional)",
38
+ "Name(link editor)": "Name",
39
+ "No comments(comment list)": "No comments",
40
+ "No emoji found.(emoji picker)": "No emoji found.",
41
+ "No language found.(code block editor)": "No language found.",
42
+ "No results(mention picker)": "No results",
43
+ "Open menu(comment menu)(aria-label)": "Open menu",
44
+ "Reply to comment(reply form)": "Reply to comment",
45
+ "Reply(reply form)(aria-label)": "Reply",
46
+ "Replying to {name}(comment actions)": "Replying to {name}",
47
+ "Save edit(edit comment form)(aria-label)": "Save edit",
48
+ "Save(link editor)": "Save",
49
+ "Search emoji...(emoji picker)": "Search emoji...",
50
+ "Search language...(code block editor)": "Search language...",
51
+ "Send(comment form)(aria-label)": "Send",
52
+ "Sign In(auth button)": "Sign In",
53
+ "Today(timestamp)": "Today",
54
+ "Toggle bold(comment editor)(aria-label)": "Toggle bold",
55
+ "Toggle code block(code block editor)(aria-label)": "Toggle code block",
56
+ "Toggle inline code(comment editor)(aria-label)": "Toggle inline code",
57
+ "Toggle italic(comment editor)(aria-label)": "Toggle italic",
58
+ "Toggle link(comment editor)(aria-label)": "Toggle link",
59
+ "Toggle strikethrough(comment editor)(aria-label)": "Toggle strikethrough",
60
+ "Unset(link editor)": "Unset",
61
+ "Upload image(image upload)(aria-label)": "Upload image",
62
+ "Uploaded image(image upload)(image alt text)": "Uploaded image",
63
+ "Uploading(image upload)": "Uploading",
64
+ "{count} Replies(replies)": "{count} Replies"
65
+ }
@@ -0,0 +1,65 @@
1
+ {
2
+ "Bad(ui.feedback.bad)": "Плохо",
3
+ "Close(ui.feedback.close)": "Закрыть",
4
+ "Context(ui.feedback.context)": "Контекст",
5
+ "Feedback(ui.feedback.tooltip)": "Отзыв",
6
+ "Good(ui.feedback.good)": "Хорошо",
7
+ "How is this page?(ui.feedback.question)": "Как вам эта страница?",
8
+ "Leave your feedback…(ui.feedback.placeholder)": "Оставьте отзыв…",
9
+ "Submit Again(ui.feedback.submit_again)": "Отправить снова",
10
+ "Submit(ui.feedback.submit)": "Отправить",
11
+ "Thank you for your feedback!(ui.feedback.thanks)": "Спасибо за отзыв!",
12
+ "View on GitHub(ui.feedback.view_on_github)": "Смотреть на GitHub",
13
+ "1 Reply(replies)": "1 ответ",
14
+ "Add emoji(emoji picker)(aria-label)": "Добавить эмодзи",
15
+ "Add link(comment editor)": "Добавить ссылку",
16
+ "Attach your own image to the comment.(image upload)": "Прикрепите изображение к комментарию.",
17
+ "Close(dialog)(aria-label)": "Закрыть",
18
+ "Comments(replies)": "Комментарии",
19
+ "Copied(code block)(aria-label)": "Скопировано",
20
+ "Copy(comment menu)": "Копировать",
21
+ "Delete(comment menu)": "Удалить",
22
+ "Dislike(comment actions)(aria-label)": "Не нравится",
23
+ "Edit comment(comment menu)": "Редактировать комментарий",
24
+ "Edit message(edit comment form)": "Редактировать сообщение",
25
+ "Edit the content of your comment.(comment menu)": "Отредактируйте текст вашего комментария.",
26
+ "Edit(comment menu)": "Редактировать",
27
+ "Image preview(image upload)(image alt text)": "Просмотр изображения",
28
+ "Insert code block(code block editor)": "Вставить блок кода",
29
+ "Insert emoji(emoji picker)": "Вставить эмодзи",
30
+ "Insert(link editor)": "Вставить",
31
+ "Leave comment(comment form)": "Оставить комментарий",
32
+ "Like(comment actions)(aria-label)": "Нравится",
33
+ "Link(link editor)": "Ссылка",
34
+ "Load more(comment list)": "Загрузить ещё",
35
+ "Loading(mention picker)": "Загрузка",
36
+ "Loading...(emoji picker)": "Загрузка...",
37
+ "My link (optional)(link editor)": "Моя ссылка (необязательно)",
38
+ "Name(link editor)": "Имя",
39
+ "No comments(comment list)": "Нет комментариев",
40
+ "No emoji found.(emoji picker)": "Эмодзи не найдены.",
41
+ "No language found.(code block editor)": "Язык не найден.",
42
+ "No results(mention picker)": "Нет результатов",
43
+ "Open menu(comment menu)(aria-label)": "Открыть меню",
44
+ "Reply to comment(reply form)": "Ответить на комментарий",
45
+ "Reply(reply form)(aria-label)": "Ответить",
46
+ "Replying to {name}(comment actions)": "Ответ для {name}",
47
+ "Save edit(edit comment form)(aria-label)": "Сохранить правку",
48
+ "Save(link editor)": "Сохранить",
49
+ "Search emoji...(emoji picker)": "Поиск эмодзи...",
50
+ "Search language...(code block editor)": "Поиск языка...",
51
+ "Send(comment form)(aria-label)": "Отправить",
52
+ "Sign In(auth button)": "Войти",
53
+ "Today(timestamp)": "Сегодня",
54
+ "Toggle bold(comment editor)(aria-label)": "Жирный",
55
+ "Toggle code block(code block editor)(aria-label)": "Блок кода",
56
+ "Toggle inline code(comment editor)(aria-label)": "Строчный код",
57
+ "Toggle italic(comment editor)(aria-label)": "Курсив",
58
+ "Toggle link(comment editor)(aria-label)": "Ссылка",
59
+ "Toggle strikethrough(comment editor)(aria-label)": "Зачёркнутый",
60
+ "Unset(link editor)": "Сбросить",
61
+ "Upload image(image upload)(aria-label)": "Загрузить изображение",
62
+ "Uploaded image(image upload)(image alt text)": "Загруженное изображение",
63
+ "Uploading(image upload)": "Загружается",
64
+ "{count} Replies(replies)": "Ответов: {count}"
65
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "Docs(sections.docs)": "Docs",
3
+ "Documentation(sections.desc.docs)": "Documentation"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "Docs(sections.docs)": "Документация",
3
+ "Documentation(sections.desc.docs)": "Техническая документация"
4
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "Copy NBT(ui.entry.copy_nbt)": "Copy NBT",
3
+ "Copy id(ui.entry.copy)": "Copy id",
4
+ "Copy stack id(ui.entry.copy_stack)": "Copy stack id"
5
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "Copy NBT(ui.entry.copy_nbt)": "Копировать NBT",
3
+ "Copy id(ui.entry.copy)": "Копировать id",
4
+ "Copy stack id(ui.entry.copy_stack)": "Копировать id стака"
5
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "Entity preview unavailable(guide.entity_unavailable)": "Entity preview unavailable",
3
+ "Entry not found(guide.entry_missing)": "Entry not found",
4
+ "Gameplay guide(sections.desc.guide)": "Gameplay guide",
5
+ "Guide(sections.guide)": "Guide",
6
+ "No recipes(guide.recipe_empty)": "No recipes",
7
+ "Objective(guide.objective)": "Objective",
8
+ "Open(guide.link)": "Open",
9
+ "Quest(guide.quest)": "Quest",
10
+ "Related(guide.related)": "Related",
11
+ "Select book(ui.select_book)": "Select book",
12
+ "{count} entries(guide.entry_count)": "{count} entries",
13
+ "{count} pages(guide.page_count)": "{count} pages"
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "Entity preview unavailable(guide.entity_unavailable)": "Превью сущности недоступно",
3
+ "Entry not found(guide.entry_missing)": "Запись не найдена",
4
+ "Gameplay guide(sections.desc.guide)": "Игровой гайд",
5
+ "Guide(sections.guide)": "Гайды",
6
+ "No recipes(guide.recipe_empty)": "Нет рецептов",
7
+ "Objective(guide.objective)": "Задача",
8
+ "Open(guide.link)": "Открыть",
9
+ "Quest(guide.quest)": "Квест",
10
+ "Related(guide.related)": "Связанное",
11
+ "Select book(ui.select_book)": "Выберите книгу",
12
+ "{count} entries(guide.entry_count)": "Записей: {count}",
13
+ "{count} pages(guide.page_count)": "Страниц: {count}"
14
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "Added content(git changelog)": "Added content",
3
+ "Added(git changelog)": "Added",
4
+ "Collapse history(git changelog)": "Collapse history",
5
+ "Commit details(git changelog)": "Commit details",
6
+ "Commit(git changelog)": "Commit",
7
+ "Commits(git changelog)": "Commits",
8
+ "Contributors(git changelog)": "Contributors",
9
+ "Last edited(git changelog)": "Last edited",
10
+ "Link target changed(git changelog)": "Link target changed",
11
+ "Newest first(git changelog)": "Newest first",
12
+ "No contributors yet.(git changelog)": "No contributors yet.",
13
+ "No history yet.(git changelog)": "No history yet.",
14
+ "Oldest first(git changelog)": "Oldest first",
15
+ "Page changes are unavailable. Reconnecting automatically.(git changelog)": "Page changes are unavailable. Reconnecting automatically.",
16
+ "Page history(git changelog)": "Page history",
17
+ "Page metadata changed(git changelog)": "Page metadata changed",
18
+ "Removed content(git changelog)": "Removed content",
19
+ "Removed(git changelog)": "Removed",
20
+ "Resolve merge conflicts to view page changes.(git changelog)": "Resolve merge conflicts to view page changes.",
21
+ "The page is updating. Changes will appear when it is ready.(git changelog)": "The page is updating. Changes will appear when it is ready.",
22
+ "This page cannot be compared inline.(git changelog)": "This page cannot be compared inline.",
23
+ "Uncommitted changes(git changelog)": "Uncommitted changes",
24
+ "View full history(git changelog)": "View full history"
25
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "Added content(git changelog)": "Добавлено содержимое",
3
+ "Added(git changelog)": "Добавлено",
4
+ "Collapse history(git changelog)": "Свернуть историю",
5
+ "Commit details(git changelog)": "Детали коммита",
6
+ "Commit(git changelog)": "Коммит",
7
+ "Commits(git changelog)": "Коммиты",
8
+ "Contributors(git changelog)": "Авторы",
9
+ "Last edited(git changelog)": "Последняя правка",
10
+ "Link target changed(git changelog)": "Изменена цель ссылки",
11
+ "Newest first(git changelog)": "Сначала новые",
12
+ "No contributors yet.(git changelog)": "Пока нет авторов.",
13
+ "No history yet.(git changelog)": "Истории пока нет.",
14
+ "Oldest first(git changelog)": "Сначала старые",
15
+ "Page changes are unavailable. Reconnecting automatically.(git changelog)": "Изменения страницы недоступны. Автоматическое переподключение.",
16
+ "Page history(git changelog)": "История страницы",
17
+ "Page metadata changed(git changelog)": "Изменены метаданные страницы",
18
+ "Removed content(git changelog)": "Удалено содержимое",
19
+ "Removed(git changelog)": "Удалено",
20
+ "Resolve merge conflicts to view page changes.(git changelog)": "Разрешите конфликты слияния, чтобы увидеть изменения страницы.",
21
+ "The page is updating. Changes will appear when it is ready.(git changelog)": "Страница обновляется. Изменения появятся, когда она будет готова.",
22
+ "This page cannot be compared inline.(git changelog)": "Эту страницу нельзя сравнить встроенно.",
23
+ "Uncommitted changes(git changelog)": "Незакоммиченные изменения",
24
+ "View full history(git changelog)": "Вся история"
25
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "Failed to copy(ui.copy_error)": "Failed to copy",
3
+ "Select dataset(ui.select_dataset)": "Select dataset",
4
+ "Select section(ui.select_section)": "Select section",
5
+ "View as Markdown(ui.view_markdown)": "View as Markdown",
6
+ "latest(ui.version_latest)": "latest"
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "Failed to copy(ui.copy_error)": "Не удалось скопировать",
3
+ "Select dataset(ui.select_dataset)": "Выберите набор данных",
4
+ "Select section(ui.select_section)": "Выберите раздел",
5
+ "View as Markdown(ui.view_markdown)": "Просмотр Markdown",
6
+ "latest(ui.version_latest)": "последняя"
7
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "Close(quest.close)": "Close",
3
+ "No quests in this chapter.(quest.empty)": "No quests in this chapter.",
4
+ "None(quest.none)": "None",
5
+ "Open in guide(quest.guide)": "Open in guide",
6
+ "Optional(quest.optional)": "Optional",
7
+ "Prerequisites are hidden.(quest.prerequisites_hidden)": "Prerequisites are hidden.",
8
+ "Prerequisites(quest.prerequisites)": "Prerequisites",
9
+ "Quest chapters and objectives(sections.desc.quest)": "Quest chapters and objectives",
10
+ "Quests(sections.quest)": "Quests",
11
+ "Rewards(quest.rewards)": "Rewards",
12
+ "Search quests(quest.search)": "Search quests",
13
+ "Tasks(quest.tasks)": "Tasks",
14
+ "Unlocks(quest.dependents)": "Unlocks"
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "Close(quest.close)": "Закрыть",
3
+ "No quests in this chapter.(quest.empty)": "В этой главе нет квестов.",
4
+ "None(quest.none)": "Нет",
5
+ "Open in guide(quest.guide)": "Открыть в гайде",
6
+ "Optional(quest.optional)": "Необязательно",
7
+ "Prerequisites are hidden.(quest.prerequisites_hidden)": "Требования скрыты.",
8
+ "Prerequisites(quest.prerequisites)": "Требования",
9
+ "Quest chapters and objectives(sections.desc.quest)": "Главы и задания квестбука",
10
+ "Quests(sections.quest)": "Квесты",
11
+ "Rewards(quest.rewards)": "Награды",
12
+ "Search quests(quest.search)": "Поиск квестов",
13
+ "Tasks(quest.tasks)": "Задания",
14
+ "Unlocks(quest.dependents)": "Открывает"
15
+ }
@@ -0,0 +1,172 @@
1
+ {
2
+ "Actions(recipe.calc.help.sec_actions)": "Actions",
3
+ "Add 1(recipe.alloy.step.up)": "Add 1",
4
+ "Add card(recipe.calc.add.goal)": "Add card",
5
+ "Add just enough metal to bring every share into its range(recipe.alloy.hint.fix)": "Add just enough metal to bring every share into its range",
6
+ "Add to calculator(recipe.calc.add.title)": "Add to calculator",
7
+ "Add to favorites(recipe.add_favorite)": "Add to favorites",
8
+ "All items(recipe.all_items)": "All items",
9
+ "Allowed window(recipe.alloy.range_allowed)": "Allowed window",
10
+ "Alloy(recipe.alloy.result)": "Alloy",
11
+ "Alloys(recipe.alloy.title)": "Alloys",
12
+ "Apply the recipe ratio multiplied(recipe.alloy.hint.mult)": "Apply the recipe ratio multiplied",
13
+ "Apply(recipe.alloy.apply)": "Apply",
14
+ "Arrows flow from ingredient to product(recipe.calc.help.edges)": "Arrows flow from ingredient to product",
15
+ "Auto layout(recipe.calc.relayout)": "Auto layout",
16
+ "Blocks(recipe.tags_block)": "Blocks",
17
+ "Calculator help(recipe.calc.help.title)": "Calculator help",
18
+ "Calculator(recipe.calculator)": "Calculator",
19
+ "Card view(recipe.calc.mode.normal)": "Card view",
20
+ "Cards when zoomed out(recipe.calc.far.title)": "Cards when zoomed out",
21
+ "Cards(recipe.calc.view.modes)": "Cards",
22
+ "Catalyst: needed but not consumed; wire it or click to pick a supplier(recipe.calc.help.port_cat)": "Catalyst: needed but not consumed; wire it or click to pick a supplier",
23
+ "Catalyst: required by the recipe but not consumed(recipe.calc.hint.catalyst)": "Catalyst: required by the recipe but not consumed",
24
+ "Catalysts(recipe.calc.catalysts)": "Catalysts",
25
+ "Categories(recipe.axis_type)": "Categories",
26
+ "Choose recipe(recipe.calc.select)": "Choose recipe",
27
+ "Choose tag member(recipe.calc.member.title)": "Choose tag member",
28
+ "Clear(recipe.calc.clear.title)": "Clear",
29
+ "Click an item in the catalog to add a card.(recipe.calc.empty)": "Click an item in the catalog to add a card.",
30
+ "Close scheme(recipe.calc.close_tab)": "Close scheme",
31
+ "Collapse(recipe.calc.collapse)": "Collapse",
32
+ "Compact view(recipe.calc.mode.mini)": "Compact view",
33
+ "Copied(recipe.copied)": "Copied",
34
+ "Copied(recipe.forge.copied)": "Copied",
35
+ "Copy NBT(recipe.copy_nbt)": "Copy NBT",
36
+ "Copy id(recipe.calc.copy_id)": "Copy id",
37
+ "Copy id(recipe.copy)": "Copy id",
38
+ "Copy recipe id(recipe.copy_recipe_id)": "Copy recipe id",
39
+ "Copy stack id(recipe.copy_stack)": "Copy stack id",
40
+ "Copy steps(recipe.forge.copy)": "Copy steps",
41
+ "Copy the mix as text(recipe.alloy.copy_mix)": "Copy the mix as text",
42
+ "Could not load recipes. Reload the page to retry.(recipe.alloy.load_error)": "Could not load recipes. Reload the page to retry.",
43
+ "Could not load recipes. Reload the page to retry.(recipe.forge.load_error)": "Could not load recipes. Reload the page to retry.",
44
+ "Covered by another card output(recipe.calc.help.satisfied)": "Covered by another card output",
45
+ "Crafting and processing recipes(sections.desc.recipe)": "Crafting and processing recipes",
46
+ "Crafts(recipe.calc.crafts.title)": "Crafts",
47
+ "Current work(recipe.forge.current)": "Current work",
48
+ "Default recipe(recipe.calc.auto.title)": "Default recipe",
49
+ "Done(recipe.forge.done)": "Done",
50
+ "Drag port to port to link; drag a wire end to retarget(recipe.calc.help.edge_link)": "Drag port to port to link; drag a wire end to retarget",
51
+ "Edges(recipe.calc.help.sec_edges)": "Edges",
52
+ "Enter a positive total amount.(recipe.alloy.invalid_total)": "Enter a positive total amount.",
53
+ "Expand(recipe.expand)": "Expand",
54
+ "Favorites(recipe.favorites)": "Favorites",
55
+ "Fewer crafts(recipe.calc.crafts.down)": "Fewer crafts",
56
+ "Fill by recipe(recipe.alloy.fill)": "Fill by recipe",
57
+ "Fill fields with the recipe ratio in whole ingots(recipe.alloy.hint.apply)": "Fill fields with the recipe ratio in whole ingots",
58
+ "Flow on a wire - shows on hover; click to cap the amount(recipe.calc.help.edge_flow)": "Flow on a wire - shows on hover; click to cap the amount",
59
+ "Focused node(recipe.calc.help.focus)": "Focused node",
60
+ "Forging(recipe.forge.title)": "Forging",
61
+ "Full card(recipe.calc.far.full)": "Full card",
62
+ "Group sidebar by mod(recipe.sidebar_group_mod)": "Group sidebar by mod",
63
+ "Hidden ports - scroll the rail or click the arrow(recipe.calc.help.port_more)": "Hidden ports - scroll the rail or click the arrow",
64
+ "Hide unused(recipe.hide_unused)": "Hide unused",
65
+ "Hide(recipe.calc.far.hidden)": "Hide",
66
+ "History(recipe.calc.history)": "History",
67
+ "Incoming edges(recipe.calc.help.edge_in)": "Incoming edges",
68
+ "Ingots: 1 ingot = 144 mB(recipe.alloy.hint.ingot)": "Ingots: 1 ingot = 144 mB",
69
+ "Input port: click to pick a supplier or drag a wire(recipe.calc.help.port_in)": "Input port: click to pick a supplier or drag a wire",
70
+ "Inputs(recipe.calc.inputs)": "Inputs",
71
+ "Items(recipe.items)": "Items",
72
+ "Items(recipe.tags_item)": "Items",
73
+ "Keep as external source(recipe.calc.supply.source)": "Keep as external source",
74
+ "Loading recipe…(recipe.loading)": "Loading recipe…",
75
+ "Millibuckets (mB)(recipe.alloy.hint.mb)": "Millibuckets (mB)",
76
+ "Minimize(recipe.alloy.economize)": "Minimize",
77
+ "More crafts(recipe.calc.crafts.up)": "More crafts",
78
+ "NBT(recipe.nbt)": "NBT",
79
+ "New card with recipe(recipe.calc.supply.recipe)": "New card with recipe",
80
+ "New scheme(recipe.calc.new_tab)": "New scheme",
81
+ "No favorites yet.(recipe.favorites_empty)": "No favorites yet.",
82
+ "No items match with Hide unused enabled. Turn it off to browse the full catalog.(recipe.hide_unused_empty)": "No items match with Hide unused enabled. Turn it off to browse the full catalog.",
83
+ "No matching items.(recipe.empty_items)": "No matching items.",
84
+ "No matching recipes in this dump.(recipe.alloy.empty)": "No matching recipes in this dump.",
85
+ "No matching recipes in this dump.(recipe.forge.empty)": "No matching recipes in this dump.",
86
+ "No recipe dump for this dataset. Run export to generate data.(recipe.no_dump)": "No recipe dump for this dataset. Run export to generate data.",
87
+ "No recipe image in dump.(recipe.no_image)": "No recipe image in dump.",
88
+ "No recipe: taken from remainders or gathered externally(recipe.calc.hint.source)": "No recipe: taken from remainders or gathered externally",
89
+ "No recipe; raw material(recipe.calc.help.source)": "No recipe; raw material",
90
+ "No recipes of this type.(recipe.empty_type)": "No recipes of this type.",
91
+ "No results found(recipe.search_empty)": "No results found",
92
+ "No sequence reaches this target under these rules. Reset the workpiece and try another target.(recipe.forge.no_solution)": "No sequence reaches this target under these rules. Reset the workpiece and try another target.",
93
+ "No tags for this item.(recipe.empty_tags)": "No tags for this item.",
94
+ "Node context menu(recipe.calc.help.ctx)": "Node context menu",
95
+ "Nodes(recipe.calc.help.sec_nodes)": "Nodes",
96
+ "Open calculator(recipe.calc.open.title)": "Open calculator",
97
+ "Open item page(recipe.calc.open.item)": "Open item page",
98
+ "Outgoing edges(recipe.calc.help.edge_out)": "Outgoing edges",
99
+ "Output port: click to pick a recipe or drag a wire(recipe.calc.help.port_out)": "Output port: click to pick a recipe or drag a wire",
100
+ "Outputs(recipe.calc.outputs)": "Outputs",
101
+ "Outside allowed ranges(recipe.alloy.invalid)": "Outside allowed ranges",
102
+ "Overdrawn: more is wired out than produced(recipe.calc.overdrawn)": "Overdrawn: more is wired out than produced",
103
+ "Pan and zoom(recipe.calc.help.nav)": "Pan and zoom",
104
+ "Pick a recipe(recipe.calc.pick.title)": "Pick a recipe",
105
+ "Pick icon(recipe.calc.pick.icon)": "Pick icon",
106
+ "Pin as default recipe(recipe.calc.set_default)": "Pin as default recipe",
107
+ "Plan(recipe.calc.plan)": "Plan",
108
+ "Ports(recipe.calc.help.sec_ports)": "Ports",
109
+ "Preview(recipe.calc.far.preview)": "Preview",
110
+ "Products(recipe.calc.products)": "Products",
111
+ "Quick totals(recipe.alloy.presets)": "Quick totals",
112
+ "Recipe cycle: the recipe needs itself upstream(recipe.calc.hint.cycle)": "Recipe cycle: the recipe needs itself upstream",
113
+ "Recipe cycle(recipe.calc.help.cycle)": "Recipe cycle",
114
+ "Recipe not found in this dump. Select another alloy.(recipe.alloy.missing)": "Recipe not found in this dump. Select another alloy.",
115
+ "Recipe not found in this dump. Select another recipe.(recipe.forge.missing)": "Recipe not found in this dump. Select another recipe.",
116
+ "Recipe preview(recipe.calc.help.hover)": "Recipe preview",
117
+ "Recipe ratio in ingots(recipe.alloy.ratio_ingots)": "Recipe ratio in ingots",
118
+ "Recipe view(recipe.calc.mode.detailed)": "Recipe view",
119
+ "Recipe/tag member: open picker(recipe.calc.help.chip)": "Recipe/tag member: open picker",
120
+ "Recipes(recipe.pane_recipes)": "Recipes",
121
+ "Recipes(sections.recipe)": "Recipes",
122
+ "Remove 1(recipe.alloy.step.down)": "Remove 1",
123
+ "Remove card(recipe.calc.remove.title)": "Remove card",
124
+ "Remove from favorites(recipe.remove_favorite)": "Remove from favorites",
125
+ "Remove from history(recipe.calc.remove.history)": "Remove from history",
126
+ "Remove recipe(recipe.calc.remove.recipe)": "Remove recipe",
127
+ "Rename(recipe.calc.rename)": "Rename",
128
+ "Reset the workpiece(recipe.forge.reset)": "Reset the workpiece",
129
+ "Reset to recipe ratio(recipe.alloy.reset)": "Reset to recipe ratio",
130
+ "Resolved with a recipe(recipe.calc.help.recipe)": "Resolved with a recipe",
131
+ "Restore the recipe-ratio mix(recipe.alloy.hint.reset)": "Restore the recipe-ratio mix",
132
+ "Round each metal to whole ingots, staying inside the ranges(recipe.alloy.hint.snap)": "Round each metal to whole ingots, staying inside the ranges",
133
+ "Scales the current mix to this total as you type(recipe.alloy.hint.scale)": "Scales the current mix to this total as you type",
134
+ "Schemes(recipe.calc.trees)": "Schemes",
135
+ "Search alloys(recipe.alloy.search)": "Search alloys",
136
+ "Search items(recipe.search)": "Search items",
137
+ "Search member…(recipe.calc.member.search)": "Search member…",
138
+ "Search recipes(recipe.forge.search)": "Search recipes",
139
+ "Set this metal to the lower bound of its range; others keep the recipe ratio(recipe.alloy.hint.economize)": "Set this metal to the lower bound of its range; others keep the recipe ratio",
140
+ "Settings(recipe.settings)": "Settings",
141
+ "Share(recipe.calc.share)": "Share",
142
+ "Shift + hover a wire shows x - click to delete it(recipe.calc.help.edge_cut)": "Shift + hover a wire shows x - click to delete it",
143
+ "Show all steps(recipe.forge.expand_steps)": "Show all steps",
144
+ "Snap to whole ingots(recipe.alloy.snap_ingots)": "Snap to whole ingots",
145
+ "Solve(recipe.forge.solve)": "Solve",
146
+ "Solving…(recipe.forge.solving)": "Solving…",
147
+ "Split the target total between metals by the recipe ratio(recipe.alloy.hint.fill)": "Split the target total between metals by the recipe ratio",
148
+ "Tags(recipe.pane_tags)": "Tags",
149
+ "Target total(recipe.alloy.total)": "Target total",
150
+ "Target(recipe.forge.target)": "Target",
151
+ "The dump contains missing or unrecognized forging rules. A safe solution cannot be calculated.(recipe.forge.unsupported)": "The dump contains missing or unrecognized forging rules. A safe solution cannot be calculated.",
152
+ "Top up to minimum(recipe.alloy.fix)": "Top up to minimum",
153
+ "Total(recipe.alloy.total_in)": "Total",
154
+ "Trim to this step(recipe.forge.trim_to)": "Trim to this step",
155
+ "Undo last action(recipe.forge.undo)": "Undo last action",
156
+ "Unpin default recipe(recipe.calc.clear.default)": "Unpin default recipe",
157
+ "Untitled scheme(recipe.calc.tab.untitled)": "Untitled scheme",
158
+ "Use an existing card(recipe.calc.supply.existing)": "Use an existing card",
159
+ "Uses(recipe.pane_uses)": "Uses",
160
+ "Valid alloy(recipe.alloy.valid)": "Valid alloy",
161
+ "View modes(recipe.calc.help.modes)": "View modes",
162
+ "View settings(recipe.calc.view.title)": "View settings",
163
+ "Work is above the target, use Draw or lighter hits to come back.(recipe.forge.over_target)": "Work is above the target, use Draw or lighter hits to come back.",
164
+ "Work ruler(recipe.forge.ruler)": "Work ruler",
165
+ "Work(recipe.forge.work)": "Work",
166
+ "ing.(recipe.alloy.unit.ingot)": "ing.",
167
+ "input(recipe.calc.port.in)": "input",
168
+ "mB(recipe.alloy.unit.mb)": "mB",
169
+ "output(recipe.calc.port.out)": "output",
170
+ "units(recipe.alloy.units)": "units",
171
+ "{page}/{pages}(recipe.page_of)": "{page}/{pages}"
172
+ }
@@ -0,0 +1,172 @@
1
+ {
2
+ "Actions(recipe.calc.help.sec_actions)": "Действия",
3
+ "Add 1(recipe.alloy.step.up)": "Добавить 1",
4
+ "Add card(recipe.calc.add.goal)": "Добавить карточку",
5
+ "Add just enough metal to bring every share into its range(recipe.alloy.hint.fix)": "Долить минимум металла, чтобы все доли попали в диапазоны",
6
+ "Add to calculator(recipe.calc.add.title)": "В калькулятор",
7
+ "Add to favorites(recipe.add_favorite)": "Добавить в избранное",
8
+ "All items(recipe.all_items)": "Все предметы",
9
+ "Allowed window(recipe.alloy.range_allowed)": "Допустимое окно",
10
+ "Alloy(recipe.alloy.result)": "Сплав",
11
+ "Alloys(recipe.alloy.title)": "Сплавы",
12
+ "Apply the recipe ratio multiplied(recipe.alloy.hint.mult)": "Подставить соотношение рецепта с множителем",
13
+ "Apply(recipe.alloy.apply)": "Подставить",
14
+ "Arrows flow from ingredient to product(recipe.calc.help.edges)": "Стрелки идут от ингредиента к продукту",
15
+ "Auto layout(recipe.calc.relayout)": "Раскладка",
16
+ "Blocks(recipe.tags_block)": "Блоки",
17
+ "Calculator help(recipe.calc.help.title)": "Справка калькулятора",
18
+ "Calculator(recipe.calculator)": "Калькулятор",
19
+ "Card view(recipe.calc.mode.normal)": "Карточки",
20
+ "Cards when zoomed out(recipe.calc.far.title)": "Карточки при отдалении",
21
+ "Cards(recipe.calc.view.modes)": "Карточки",
22
+ "Catalyst: needed but not consumed; wire it or click to pick a supplier(recipe.calc.help.port_cat)": "Катализатор: нужен, но не расходуется; провод или клик выбрать поставщика",
23
+ "Catalyst: required by the recipe but not consumed(recipe.calc.hint.catalyst)": "Катализатор: нужен рецепту, но не расходуется",
24
+ "Catalysts(recipe.calc.catalysts)": "Катализаторы",
25
+ "Categories(recipe.axis_type)": "Категории",
26
+ "Choose recipe(recipe.calc.select)": "Выбрать рецепт",
27
+ "Choose tag member(recipe.calc.member.title)": "Выбрать член тега",
28
+ "Clear(recipe.calc.clear.title)": "Очистить",
29
+ "Click an item in the catalog to add a card.(recipe.calc.empty)": "Кликните по предмету в каталоге, чтобы добавить карточку.",
30
+ "Close scheme(recipe.calc.close_tab)": "Закрыть схему",
31
+ "Collapse(recipe.calc.collapse)": "Свернуть",
32
+ "Compact view(recipe.calc.mode.mini)": "Компактный вид",
33
+ "Copied(recipe.copied)": "Скопировано",
34
+ "Copied(recipe.forge.copied)": "Скопировано",
35
+ "Copy NBT(recipe.copy_nbt)": "Копировать NBT",
36
+ "Copy id(recipe.calc.copy_id)": "Копировать id",
37
+ "Copy id(recipe.copy)": "Копировать id",
38
+ "Copy recipe id(recipe.copy_recipe_id)": "Копировать id рецепта",
39
+ "Copy stack id(recipe.copy_stack)": "Копировать id стака",
40
+ "Copy steps(recipe.forge.copy)": "Копировать шаги",
41
+ "Copy the mix as text(recipe.alloy.copy_mix)": "Скопировать смесь текстом",
42
+ "Could not load recipes. Reload the page to retry.(recipe.alloy.load_error)": "Не удалось загрузить рецепты. Обновите страницу для повторной попытки.",
43
+ "Could not load recipes. Reload the page to retry.(recipe.forge.load_error)": "Не удалось загрузить рецепты. Обновите страницу для повторной попытки.",
44
+ "Covered by another card output(recipe.calc.help.satisfied)": "Покрыто выходом другой карточки",
45
+ "Crafting and processing recipes(sections.desc.recipe)": "Крафт и переработка",
46
+ "Crafts(recipe.calc.crafts.title)": "Крафты",
47
+ "Current work(recipe.forge.current)": "Текущая работа",
48
+ "Default recipe(recipe.calc.auto.title)": "Рецепт по умолчанию",
49
+ "Done(recipe.forge.done)": "Готово",
50
+ "Drag port to port to link; drag a wire end to retarget(recipe.calc.help.edge_link)": "Тяните от порта к порту; конец линии можно перетащить на другой порт",
51
+ "Edges(recipe.calc.help.sec_edges)": "Связи",
52
+ "Enter a positive total amount.(recipe.alloy.invalid_total)": "Введите положительное количество металла.",
53
+ "Expand(recipe.expand)": "Развернуть",
54
+ "Favorites(recipe.favorites)": "Избранное",
55
+ "Fewer crafts(recipe.calc.crafts.down)": "Меньше крафтов",
56
+ "Fill by recipe(recipe.alloy.fill)": "Заполнить по рецепту",
57
+ "Fill fields with the recipe ratio in whole ingots(recipe.alloy.hint.apply)": "Подставить соотношение рецепта в целых слитках",
58
+ "Flow on a wire - shows on hover; click to cap the amount(recipe.calc.help.edge_flow)": "Число на линии - поток; видно при наведении, клик ограничивает",
59
+ "Focused node(recipe.calc.help.focus)": "Сфокусированный узел",
60
+ "Forging(recipe.forge.title)": "Ковка",
61
+ "Full card(recipe.calc.far.full)": "Полная карточка",
62
+ "Group sidebar by mod(recipe.sidebar_group_mod)": "Группировать сайдбар по модам",
63
+ "Hidden ports - scroll the rail or click the arrow(recipe.calc.help.port_more)": "Скрытые порты - прокрутите колесом или стрелкой",
64
+ "Hide unused(recipe.hide_unused)": "Скрывать неиспользуемые",
65
+ "Hide(recipe.calc.far.hidden)": "Скрыть",
66
+ "History(recipe.calc.history)": "История",
67
+ "Incoming edges(recipe.calc.help.edge_in)": "Входящие связи",
68
+ "Ingots: 1 ingot = 144 mB(recipe.alloy.hint.ingot)": "Слитки: 1 слиток = 144 мБ",
69
+ "Input port: click to pick a supplier or drag a wire(recipe.calc.help.port_in)": "Вход: клик выбрать поставщика или протянуть провод",
70
+ "Inputs(recipe.calc.inputs)": "Входы",
71
+ "Items(recipe.items)": "Предметы",
72
+ "Items(recipe.tags_item)": "Предметы",
73
+ "Keep as external source(recipe.calc.supply.source)": "Оставить внешним источником",
74
+ "Loading recipe…(recipe.loading)": "Загрузка рецепта…",
75
+ "Millibuckets (mB)(recipe.alloy.hint.mb)": "Миллибакеты (мБ)",
76
+ "Minimize(recipe.alloy.economize)": "Минимум",
77
+ "More crafts(recipe.calc.crafts.up)": "Больше крафтов",
78
+ "NBT(recipe.nbt)": "NBT",
79
+ "New card with recipe(recipe.calc.supply.recipe)": "Новая карточка с рецептом",
80
+ "New scheme(recipe.calc.new_tab)": "Новая схема",
81
+ "No favorites yet.(recipe.favorites_empty)": "Пока ничего не добавлено.",
82
+ "No items match with Hide unused enabled. Turn it off to browse the full catalog.(recipe.hide_unused_empty)": "С включённым «Скрывать неиспользуемые» предметов не найдено. Отключите фильтр, чтобы открыть весь каталог.",
83
+ "No matching items.(recipe.empty_items)": "Нет подходящих предметов.",
84
+ "No matching recipes in this dump.(recipe.alloy.empty)": "В этом дампе нет подходящих рецептов.",
85
+ "No matching recipes in this dump.(recipe.forge.empty)": "В этом дампе нет подходящих рецептов.",
86
+ "No recipe dump for this dataset. Run export to generate data.(recipe.no_dump)": "Нет дампа рецептов для этого пака. Запустите экспорт, чтобы сгенерировать данные.",
87
+ "No recipe image in dump.(recipe.no_image)": "В дампе нет изображения рецепта.",
88
+ "No recipe: taken from remainders or gathered externally(recipe.calc.hint.source)": "Нет рецепта: берётся из остатков или добывается",
89
+ "No recipe; raw material(recipe.calc.help.source)": "Рецепта нет; сырьё",
90
+ "No recipes of this type.(recipe.empty_type)": "Нет рецептов этого типа.",
91
+ "No results found(recipe.search_empty)": "Ничего не найдено",
92
+ "No sequence reaches this target under these rules. Reset the workpiece and try another target.(recipe.forge.no_solution)": "Для этой цели нет последовательности с такими правилами. Сбросьте заготовку и попробуйте другую цель.",
93
+ "No tags for this item.(recipe.empty_tags)": "У этого предмета нет тегов.",
94
+ "Node context menu(recipe.calc.help.ctx)": "Меню узла",
95
+ "Nodes(recipe.calc.help.sec_nodes)": "Узлы",
96
+ "Open calculator(recipe.calc.open.title)": "Открыть калькулятор",
97
+ "Open item page(recipe.calc.open.item)": "Открыть страницу предмета",
98
+ "Outgoing edges(recipe.calc.help.edge_out)": "Исходящие связи",
99
+ "Output port: click to pick a recipe or drag a wire(recipe.calc.help.port_out)": "Выход: клик выбрать рецепт или протянуть провод",
100
+ "Outputs(recipe.calc.outputs)": "Выходы",
101
+ "Outside allowed ranges(recipe.alloy.invalid)": "Вне допустимых диапазонов",
102
+ "Overdrawn: more is wired out than produced(recipe.calc.overdrawn)": "Перерасход: соединено больше, чем производится",
103
+ "Pan and zoom(recipe.calc.help.nav)": "Панорама и зум",
104
+ "Pick a recipe(recipe.calc.pick.title)": "Выбрать рецепт",
105
+ "Pick icon(recipe.calc.pick.icon)": "Выбрать иконку",
106
+ "Pin as default recipe(recipe.calc.set_default)": "Запомнить рецепт",
107
+ "Plan(recipe.calc.plan)": "План",
108
+ "Ports(recipe.calc.help.sec_ports)": "Порты",
109
+ "Preview(recipe.calc.far.preview)": "Превью",
110
+ "Products(recipe.calc.products)": "Продукты",
111
+ "Quick totals(recipe.alloy.presets)": "Готовые итоги",
112
+ "Recipe cycle: the recipe needs itself upstream(recipe.calc.hint.cycle)": "Цикл: рецепт требует сам себя выше по цепочке",
113
+ "Recipe cycle(recipe.calc.help.cycle)": "Цикл в рецептах",
114
+ "Recipe not found in this dump. Select another alloy.(recipe.alloy.missing)": "Рецепт не найден в этом дампе. Выберите другой сплав.",
115
+ "Recipe not found in this dump. Select another recipe.(recipe.forge.missing)": "Рецепт не найден в этом дампе. Выберите другой рецепт.",
116
+ "Recipe preview(recipe.calc.help.hover)": "Превью рецепта",
117
+ "Recipe ratio in ingots(recipe.alloy.ratio_ingots)": "Соотношение рецепта в слитках",
118
+ "Recipe view(recipe.calc.mode.detailed)": "Рецепты",
119
+ "Recipe/tag member: open picker(recipe.calc.help.chip)": "Рецепт/член тега: выбор",
120
+ "Recipes(recipe.pane_recipes)": "Рецепты",
121
+ "Recipes(sections.recipe)": "Рецепты",
122
+ "Remove 1(recipe.alloy.step.down)": "Убрать 1",
123
+ "Remove card(recipe.calc.remove.title)": "Убрать карточку",
124
+ "Remove from favorites(recipe.remove_favorite)": "Убрать из избранного",
125
+ "Remove from history(recipe.calc.remove.history)": "Удалить из истории",
126
+ "Remove recipe(recipe.calc.remove.recipe)": "Убрать рецепт",
127
+ "Rename(recipe.calc.rename)": "Переименовать",
128
+ "Reset the workpiece(recipe.forge.reset)": "Сбросить заготовку",
129
+ "Reset to recipe ratio(recipe.alloy.reset)": "Сброс к соотношению",
130
+ "Resolved with a recipe(recipe.calc.help.recipe)": "Узел разрешён рецептом",
131
+ "Restore the recipe-ratio mix(recipe.alloy.hint.reset)": "Вернуть смесь по соотношению рецепта",
132
+ "Round each metal to whole ingots, staying inside the ranges(recipe.alloy.hint.snap)": "Округлить каждый металл до целых слитков, оставаясь в диапазонах",
133
+ "Scales the current mix to this total as you type(recipe.alloy.hint.scale)": "Масштабирует текущую смесь под этот итог по мере ввода",
134
+ "Schemes(recipe.calc.trees)": "Схемы",
135
+ "Search alloys(recipe.alloy.search)": "Поиск сплавов",
136
+ "Search items(recipe.search)": "Поиск предметов",
137
+ "Search member…(recipe.calc.member.search)": "Найти член тега…",
138
+ "Search recipes(recipe.forge.search)": "Поиск рецептов",
139
+ "Set this metal to the lower bound of its range; others keep the recipe ratio(recipe.alloy.hint.economize)": "Поставить металл на нижнюю границу диапазона; остальные по пропорции рецепта",
140
+ "Settings(recipe.settings)": "Настройки",
141
+ "Share(recipe.calc.share)": "Поделиться",
142
+ "Shift + hover a wire shows x - click to delete it(recipe.calc.help.edge_cut)": "Shift + наведение на линию показывает x - клик удаляет её",
143
+ "Show all steps(recipe.forge.expand_steps)": "Показать все шаги",
144
+ "Snap to whole ingots(recipe.alloy.snap_ingots)": "Округлить до слитков",
145
+ "Solve(recipe.forge.solve)": "Решить",
146
+ "Solving…(recipe.forge.solving)": "Решается…",
147
+ "Split the target total between metals by the recipe ratio(recipe.alloy.hint.fill)": "Распределить целевой итог по металлам в пропорции рецепта",
148
+ "Tags(recipe.pane_tags)": "Теги",
149
+ "Target total(recipe.alloy.total)": "Целевой итог",
150
+ "Target(recipe.forge.target)": "Цель",
151
+ "The dump contains missing or unrecognized forging rules. A safe solution cannot be calculated.(recipe.forge.unsupported)": "В дампе отсутствуют или не распознаны правила ковки. Безопасное решение рассчитать нельзя.",
152
+ "Top up to minimum(recipe.alloy.fix)": "Долить до минимума",
153
+ "Total(recipe.alloy.total_in)": "Всего",
154
+ "Trim to this step(recipe.forge.trim_to)": "Обрезать до этого шага",
155
+ "Undo last action(recipe.forge.undo)": "Отменить действие",
156
+ "Unpin default recipe(recipe.calc.clear.default)": "Забыть рецепт",
157
+ "Untitled scheme(recipe.calc.tab.untitled)": "Схема без названия",
158
+ "Use an existing card(recipe.calc.supply.existing)": "Взять существующую карточку",
159
+ "Uses(recipe.pane_uses)": "Используется",
160
+ "Valid alloy(recipe.alloy.valid)": "Сплав верный",
161
+ "View modes(recipe.calc.help.modes)": "Режимы вида",
162
+ "View settings(recipe.calc.view.title)": "Настройки вида",
163
+ "Work is above the target, use Draw or lighter hits to come back.(recipe.forge.over_target)": "Работа выше цели, вернитесь протяжкой или лёгкими ударами.",
164
+ "Work ruler(recipe.forge.ruler)": "Шкала работы",
165
+ "Work(recipe.forge.work)": "Работа",
166
+ "ing.(recipe.alloy.unit.ingot)": "сл.",
167
+ "input(recipe.calc.port.in)": "вход",
168
+ "mB(recipe.alloy.unit.mb)": "мБ",
169
+ "output(recipe.calc.port.out)": "выход",
170
+ "units(recipe.alloy.units)": "ед.",
171
+ "{page}/{pages}(recipe.page_of)": "{page}/{pages}"
172
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "Everywhere(ui.search_everywhere)": "Everywhere"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "Everywhere(ui.search_everywhere)": "Везде"
3
+ }
@@ -0,0 +1,110 @@
1
+ {
2
+ "3D model(ui.viewer.label)": "3D model",
3
+ "A ranged slider to choose the maximum width of the content column(ui.readability.content_width.slider.help)": "A ranged slider to choose the maximum width of the content column",
4
+ "A ranged slider to choose the maximum width of the page layout(ui.readability.page_width.slider.help)": "A ranged slider to choose the maximum width of the page layout",
5
+ "A solid background under the hovered block shows where the cursor is(ui.readability.spotlight.under.help)": "A solid background under the hovered block shows where the cursor is",
6
+ "A solid line beside the hovered element shows where the cursor is(ui.readability.spotlight.aside.help)": "A solid line beside the hovered element shows where the cursor is",
7
+ "Adjust how the spotlight highlight is drawn(ui.readability.spotlight.styles.help)": "Adjust how the spotlight highlight is drawn",
8
+ "Adjust the maximum width of the page layout to fit different reading needs and screens(ui.readability.page_width.help)": "Adjust the maximum width of the page layout to fit different reading needs and screens",
9
+ "Adjust the maximum width of the text column to fit different reading needs and screens(ui.readability.content_width.help)": "Adjust the maximum width of the text column to fit different reading needs and screens",
10
+ "Adjust the site layout to fit different reading needs and screens(ui.readability.layout.help)": "Adjust the site layout to fit different reading needs and screens",
11
+ "Adjustable page and content(ui.readability.layout.both)": "Adjustable page and content",
12
+ "Adjustable page width(ui.readability.layout.sidebar)": "Adjustable page width",
13
+ "Aside(ui.readability.spotlight.aside)": "Aside",
14
+ "Autoplay speed(ui.viewer.autoplay_speed)": "Autoplay speed",
15
+ "Autoplay(ui.viewer.autoplay)": "Autoplay",
16
+ "Back(ui.back)": "Back",
17
+ "Both sliders apply: page block width and the text column inside(ui.readability.layout.both.help)": "Both sliders apply: page block width and the text column inside",
18
+ "Choose a language(ui.choose_language)": "Choose a language",
19
+ "Close Banner(ui.banner_close)": "Close Banner",
20
+ "Close Search(ui.search_close)": "Close Search",
21
+ "Close Sidebar(ui.sidebar_close)": "Close Sidebar",
22
+ "Close(ui.close)": "Close",
23
+ "Collapse Sidebar(ui.sidebar_collapse)": "Collapse Sidebar",
24
+ "Content width slider(ui.readability.content_width.slider)": "Content width slider",
25
+ "Content width(ui.readability.content_width)": "Content width",
26
+ "Copied Anchor Link(ui.copied_anchor)": "Copied Anchor Link",
27
+ "Copied Link(ui.copied_link)": "Copied Link",
28
+ "Copied Markdown(ui.copied_markdown)": "Copied Markdown",
29
+ "Copied Text(ui.copied_text)": "Copied Text",
30
+ "Copy Anchor Link(ui.copy_anchor)": "Copy Anchor Link",
31
+ "Copy Link(ui.copy_link)": "Copy Link",
32
+ "Copy Markdown(ui.copy_markdown)": "Copy Markdown",
33
+ "Copy Text(ui.copy_text)": "Copy Text",
34
+ "Dark(ui.theme_dark)": "Dark",
35
+ "Default centered page width(ui.readability.layout.original.help)": "Default centered page width",
36
+ "Default(ui.default)": "Default",
37
+ "Edit on GitHub(ui.edit_github)": "Edit on GitHub",
38
+ "Exit fullscreen(ui.canvas.exit_fullscreen)": "Exit fullscreen",
39
+ "Expand all(ui.readability.layout.full)": "Expand all",
40
+ "Fit view(ui.canvas.fit)": "Fit view",
41
+ "Fullscreen(ui.canvas.fullscreen)": "Fullscreen",
42
+ "Grid(ui.viewer.grid)": "Grid",
43
+ "Height(ui.viewer.height)": "Height",
44
+ "Highlight the line or block under the cursor to help readers stay focused(ui.readability.spotlight.help)": "Highlight the line or block under the cursor to help readers stay focused",
45
+ "Image Viewer(ui.image_viewer)": "Image Viewer",
46
+ "Image unavailable(ui.image_unavailable)": "Image unavailable",
47
+ "Input(ui.input)": "Input",
48
+ "Last updated on(ui.last_updated)": "Last updated on",
49
+ "Layout switch is not available on small screens(ui.readability.layout.unavailable)": "Layout switch is not available on small screens",
50
+ "Layout(ui.readability.layout)": "Layout",
51
+ "Light(ui.theme_light)": "Light",
52
+ "Loading…(ui.viewer.loading)": "Loading…",
53
+ "Next Image(ui.next_image)": "Next Image",
54
+ "Next Page(ui.next_page)": "Next Page",
55
+ "Next(ui.canvas.next)": "Next",
56
+ "No Headings(ui.no_headings)": "No Headings",
57
+ "No results found(ui.search_empty)": "No results found",
58
+ "Off(ui.readability.spotlight.off)": "Off",
59
+ "On this page(ui.on_this_page)": "On this page",
60
+ "On(ui.readability.spotlight.on)": "On",
61
+ "Open Search(ui.open_search)": "Open Search",
62
+ "Open Sidebar(ui.sidebar_open)": "Open Sidebar",
63
+ "Open in GitHub(ui.open_github)": "Open in GitHub",
64
+ "Open(ui.open)": "Open",
65
+ "Original width(ui.readability.layout.original)": "Original width",
66
+ "Output(ui.output)": "Output",
67
+ "Page not found(ui.not_found)": "Page not found",
68
+ "Page width slider(ui.readability.page_width.slider)": "Page width slider",
69
+ "Page width(ui.readability.page_width)": "Page width",
70
+ "Parameters(ui.parameters)": "Parameters",
71
+ "Previous Image(ui.prev_image)": "Previous Image",
72
+ "Previous Page(ui.prev_page)": "Previous Page",
73
+ "Previous(ui.canvas.prev)": "Previous",
74
+ "Prop(ui.prop)": "Prop",
75
+ "Readability(ui.readability.menu)": "Readability",
76
+ "Redirecting…(ui.redirecting)": "Redirecting…",
77
+ "Reset view(ui.viewer.reset_view)": "Reset view",
78
+ "Returns(ui.returns)": "Returns",
79
+ "Rotate speed(ui.viewer.rotate_speed)": "Rotate speed",
80
+ "Search failed(ui.search_failed)": "Search failed",
81
+ "Search failed, showing results for {query}(ui.search_failed_results)": "Search failed, showing results for {query}",
82
+ "Search(ui.search_dialog)": "Search",
83
+ "Search(ui.search_trigger)": "Search",
84
+ "Showing the English version. A translation is not available yet.(untranslated.body)": "Showing the English version. A translation is not available yet.",
85
+ "Sign in(ui.sign_in)": "Sign in",
86
+ "Sign out(ui.sign_out)": "Sign out",
87
+ "Site menu(ui.site_menu)": "Site menu",
88
+ "Some content is still shown in English.(untranslated.partial_body)": "Some content is still shown in English.",
89
+ "Spin(ui.viewer.spin)": "Spin",
90
+ "Spotlight is not available on touch screens(ui.readability.spotlight.unavailable)": "Spotlight is not available on touch screens",
91
+ "Spotlight(ui.readability.spotlight)": "Spotlight",
92
+ "Style(ui.readability.spotlight.styles)": "Style",
93
+ "System(ui.theme_system)": "System",
94
+ "The article takes the full panel width; the sidebar stays at the screen edge(ui.readability.layout.full.help)": "The article takes the full panel width; the sidebar stays at the screen edge",
95
+ "The slider narrows the whole page block: the sidebar moves with it(ui.readability.layout.sidebar.help)": "The slider narrows the whole page block: the sidebar moves with it",
96
+ "This page is not fully translated(untranslated.partial_title)": "This page is not fully translated",
97
+ "This page is not translated(untranslated.title)": "This page is not translated",
98
+ "Toggle Menu(ui.menu_toggle)": "Toggle Menu",
99
+ "Translate on Crowdin(untranslated.translate)": "Translate on Crowdin",
100
+ "Turn off Spotlight(ui.readability.spotlight.off.help)": "Turn off Spotlight",
101
+ "Turn on Spotlight(ui.readability.spotlight.on.help)": "Turn on Spotlight",
102
+ "Type(ui.type)": "Type",
103
+ "Under(ui.readability.spotlight.under)": "Under",
104
+ "Viewer settings(ui.viewer.settings)": "Viewer settings",
105
+ "Website(ui.website)": "Website",
106
+ "Width(ui.viewer.width)": "Width",
107
+ "Zoom in(ui.canvas.zoom_in)": "Zoom in",
108
+ "Zoom out(ui.canvas.zoom_out)": "Zoom out",
109
+ "Untranslated(untranslated.chip)": "Untranslated"
110
+ }
@@ -0,0 +1,110 @@
1
+ {
2
+ "3D model(ui.viewer.label)": "3D-модель",
3
+ "A ranged slider to choose the maximum width of the content column(ui.readability.content_width.slider.help)": "Ползунок для выбора максимальной ширины текстовой колонки",
4
+ "A ranged slider to choose the maximum width of the page layout(ui.readability.page_width.slider.help)": "Ползунок для выбора максимальной ширины блока страницы",
5
+ "A solid background under the hovered block shows where the cursor is(ui.readability.spotlight.under.help)": "Подложка под наведённым блоком показывает, где находится курсор",
6
+ "A solid line beside the hovered element shows where the cursor is(ui.readability.spotlight.aside.help)": "Цветная полоса у левого края блока показывает, где находится курсор",
7
+ "Adjust how the spotlight highlight is drawn(ui.readability.spotlight.styles.help)": "Как отображается подсветка",
8
+ "Adjust the maximum width of the page layout to fit different reading needs and screens(ui.readability.page_width.help)": "Максимальная ширина страницы под разные задачи чтения и экраны",
9
+ "Adjust the maximum width of the text column to fit different reading needs and screens(ui.readability.content_width.help)": "Максимальная ширина текстовой колонки под разные задачи чтения и экраны",
10
+ "Adjust the site layout to fit different reading needs and screens(ui.readability.layout.help)": "Настройка макета сайта под разные задачи чтения и экраны",
11
+ "Adjustable page and content(ui.readability.layout.both)": "Настраиваемая страница и текст",
12
+ "Adjustable page width(ui.readability.layout.sidebar)": "Настраиваемая страница",
13
+ "Aside(ui.readability.spotlight.aside)": "Сбоку",
14
+ "Autoplay speed(ui.viewer.autoplay_speed)": "Скорость автопрокрутки",
15
+ "Autoplay(ui.viewer.autoplay)": "Автопрокрутка",
16
+ "Back(ui.back)": "Назад",
17
+ "Both sliders apply: page block width and the text column inside(ui.readability.layout.both.help)": "Работают оба слайдера: ширина страницы и текстовой колонки",
18
+ "Choose a language(ui.choose_language)": "Выберите язык",
19
+ "Close Banner(ui.banner_close)": "Закрыть баннер",
20
+ "Close Search(ui.search_close)": "Закрыть поиск",
21
+ "Close Sidebar(ui.sidebar_close)": "Закрыть панель",
22
+ "Close(ui.close)": "Закрыть",
23
+ "Collapse Sidebar(ui.sidebar_collapse)": "Свернуть панель",
24
+ "Content width slider(ui.readability.content_width.slider)": "Слайдер ширины текста",
25
+ "Content width(ui.readability.content_width)": "Ширина текста",
26
+ "Copied Anchor Link(ui.copied_anchor)": "Ссылка на заголовок скопирована",
27
+ "Copied Link(ui.copied_link)": "Ссылка скопирована",
28
+ "Copied Markdown(ui.copied_markdown)": "Markdown скопирован",
29
+ "Copied Text(ui.copied_text)": "Текст скопирован",
30
+ "Copy Anchor Link(ui.copy_anchor)": "Скопировать ссылку на заголовок",
31
+ "Copy Link(ui.copy_link)": "Копировать ссылку",
32
+ "Copy Markdown(ui.copy_markdown)": "Скопировать Markdown",
33
+ "Copy Text(ui.copy_text)": "Копировать текст",
34
+ "Dark(ui.theme_dark)": "Тёмная",
35
+ "Default centered page width(ui.readability.layout.original.help)": "Стандартная центрированная ширина страницы",
36
+ "Default(ui.default)": "По умолчанию",
37
+ "Edit on GitHub(ui.edit_github)": "Редактировать на GitHub",
38
+ "Exit fullscreen(ui.canvas.exit_fullscreen)": "Выйти из полноэкранного режима",
39
+ "Expand all(ui.readability.layout.full)": "Во всю ширину",
40
+ "Fit view(ui.canvas.fit)": "По размеру",
41
+ "Fullscreen(ui.canvas.fullscreen)": "Во весь экран",
42
+ "Grid(ui.viewer.grid)": "Сетка",
43
+ "Height(ui.viewer.height)": "Высота",
44
+ "Highlight the line or block under the cursor to help readers stay focused(ui.readability.spotlight.help)": "Подсвечивает строку или блок под курсором, помогая держать фокус при чтении",
45
+ "Image Viewer(ui.image_viewer)": "Просмотр изображения",
46
+ "Image unavailable(ui.image_unavailable)": "Изображение недоступно",
47
+ "Input(ui.input)": "Исходник",
48
+ "Last updated on(ui.last_updated)": "Обновлено",
49
+ "Layout switch is not available on small screens(ui.readability.layout.unavailable)": "Недоступно на маленьких экранах",
50
+ "Layout(ui.readability.layout)": "Макет",
51
+ "Light(ui.theme_light)": "Светлая",
52
+ "Loading…(ui.viewer.loading)": "Загрузка…",
53
+ "Next Image(ui.next_image)": "Следующее изображение",
54
+ "Next Page(ui.next_page)": "Следующая",
55
+ "Next(ui.canvas.next)": "Вперёд",
56
+ "No Headings(ui.no_headings)": "Нет заголовков",
57
+ "No results found(ui.search_empty)": "Ничего не найдено",
58
+ "Off(ui.readability.spotlight.off)": "Выкл",
59
+ "On this page(ui.on_this_page)": "На этой странице",
60
+ "On(ui.readability.spotlight.on)": "Вкл",
61
+ "Open Search(ui.open_search)": "Открыть поиск",
62
+ "Open Sidebar(ui.sidebar_open)": "Открыть панель",
63
+ "Open in GitHub(ui.open_github)": "Открыть в GitHub",
64
+ "Open(ui.open)": "Открыть",
65
+ "Original width(ui.readability.layout.original)": "Обычная ширина",
66
+ "Output(ui.output)": "Результат",
67
+ "Page not found(ui.not_found)": "Страница не найдена",
68
+ "Page width slider(ui.readability.page_width.slider)": "Слайдер ширины страницы",
69
+ "Page width(ui.readability.page_width)": "Ширина страницы",
70
+ "Parameters(ui.parameters)": "Параметры",
71
+ "Previous Image(ui.prev_image)": "Предыдущее изображение",
72
+ "Previous Page(ui.prev_page)": "Предыдущая",
73
+ "Previous(ui.canvas.prev)": "Назад",
74
+ "Prop(ui.prop)": "Свойство",
75
+ "Readability(ui.readability.menu)": "Читаемость",
76
+ "Redirecting…(ui.redirecting)": "Перенаправление…",
77
+ "Reset view(ui.viewer.reset_view)": "Сбросить вид",
78
+ "Returns(ui.returns)": "Возвращает",
79
+ "Rotate speed(ui.viewer.rotate_speed)": "Скорость вращения",
80
+ "Search failed(ui.search_failed)": "Поиск не удался",
81
+ "Search failed, showing results for {query}(ui.search_failed_results)": "Поиск не удался, результаты для {query}",
82
+ "Search(ui.search_dialog)": "Поиск",
83
+ "Search(ui.search_trigger)": "Поиск",
84
+ "Showing the English version. A translation is not available yet.(untranslated.body)": "Показана английская версия. Перевод пока недоступен.",
85
+ "Sign in(ui.sign_in)": "Войти",
86
+ "Sign out(ui.sign_out)": "Выйти",
87
+ "Site menu(ui.site_menu)": "Меню сайта",
88
+ "Some content is still shown in English.(untranslated.partial_body)": "Часть содержимого показана на английском.",
89
+ "Spin(ui.viewer.spin)": "Вращение",
90
+ "Spotlight is not available on touch screens(ui.readability.spotlight.unavailable)": "Недоступно на сенсорных экранах",
91
+ "Spotlight(ui.readability.spotlight)": "Подсветка",
92
+ "Style(ui.readability.spotlight.styles)": "Стиль",
93
+ "System(ui.theme_system)": "Системная",
94
+ "The article takes the full panel width; the sidebar stays at the screen edge(ui.readability.layout.full.help)": "Статья занимает всю ширину панели, сайдбар остаётся у края",
95
+ "The slider narrows the whole page block: the sidebar moves with it(ui.readability.layout.sidebar.help)": "Слайдер сужает весь блок страницы: сайдбар двигается вместе с ним",
96
+ "This page is not fully translated(untranslated.partial_title)": "Страница переведена не полностью",
97
+ "This page is not translated(untranslated.title)": "Страница не переведена",
98
+ "Toggle Menu(ui.menu_toggle)": "Переключить меню",
99
+ "Translate on Crowdin(untranslated.translate)": "Перевести на Crowdin",
100
+ "Turn off Spotlight(ui.readability.spotlight.off.help)": "Выключить подсветку",
101
+ "Turn on Spotlight(ui.readability.spotlight.on.help)": "Включить подсветку",
102
+ "Type(ui.type)": "Тип",
103
+ "Under(ui.readability.spotlight.under)": "Под текстом",
104
+ "Viewer settings(ui.viewer.settings)": "Настройки просмотра",
105
+ "Website(ui.website)": "Сайт",
106
+ "Width(ui.viewer.width)": "Ширина",
107
+ "Zoom in(ui.canvas.zoom_in)": "Приблизить",
108
+ "Zoom out(ui.canvas.zoom_out)": "Отдалить",
109
+ "Untranslated(untranslated.chip)": "Не переведено"
110
+ }
package/src/locales.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { createNamespacedLocaleCatalogs } from './lib/locales';
2
+
3
+ export const locales = createNamespacedLocaleCatalogs(
4
+ import.meta.glob('./locales/**/*.json', { eager: true, import: 'default' }),
5
+ );