diff --git a/src/lang_pack.ts b/src/lang_pack.ts deleted file mode 100644 index 4058931..0000000 --- a/src/lang_pack.ts +++ /dev/null @@ -1,259 +0,0 @@ -export type translationKeys = - | "browser_warning.lines.first" - | "browser_warning.lines.second" - | "connector.bluetooth" - | "connector.serial" - | "editor.clone" - | "editor.default_text" - | "editor.delete" - | "editor.export.json" - | "editor.iconpicker.search" - | "editor.iconpicker.title" - | "editor.import.json" - | "editor.import.zpl" - | "editor.objectpicker.barcode" - | "editor.objectpicker.circle" - | "editor.objectpicker.image" - | "editor.objectpicker.line" - | "editor.objectpicker.qrcode" - | "editor.objectpicker.rectangle" - | "editor.objectpicker.text" - | "editor.objectpicker.title" - | "editor.preview" - | "editor.print" - | "main.built" - | "main.code" - | "params.barcode.content" - | "params.barcode.encoding" - | "params.generic.center.horizontal" - | "params.generic.center.vertical" - | "params.label.calc" - | "params.label.direction.left" - | "params.label.direction.top" - | "params.label.direction" - | "params.label.dpmm" - | "params.label.mm" - | "params.label.px" - | "params.label.size" - | "params.label.title" - | "params.qrcode.ecl" - | "params.text.align.center" - | "params.text.align.left" - | "params.text.align.right" - | "params.text.bold" - | "params.text.invert_colors" - | "params.text.fetch_fonts" - | "params.text.font_family" - | "params.text.font_size.down" - | "params.text.font_size.up" - | "params.text.font_size" - | "params.text.line_height" - | "preview.close" - | "preview.copies" - | "preview.density" - | "preview.label_type.Black" - | "preview.label_type.BlackMarkGap" - | "preview.label_type.Continuous" - | "preview.label_type.HeatShrinkTube" - | "preview.label_type.Invalid" - | "preview.label_type.Perforated" - | "preview.label_type.PvcTag" - | "preview.label_type.Transparent" - | "preview.label_type.WithGaps" - | "preview.label_type" - | "preview.not_connected" - | "preview.not_implemented" - | "preview.postprocess.atkinson" - | "preview.postprocess.threshold" - | "preview.postprocess" - | "preview.print_task_version" - | "preview.print" - | "preview.threshold" - | "preview.title" - -export type supportedLanguages = "en" | "ru" | "zh_cn" - -export const langPack: Record>> = { - /** Do not add anything in "en" translation, fallback values used */ - en: {}, - - /** Russian */ - ru: { - /* Main page */ - "main.code": "Исходный код", - "main.built": "собрано", - /* BrowserWarning */ - "browser_warning.lines.first": "О нет, ваш браузер не поддерживает Bluetooth и последовательный порт", - "browser_warning.lines.second": "В любом случае, вы можете рисовать этикетки.", - /* PrinterConnector */ - "connector.bluetooth": "Bluetooth", - "connector.serial": "Посл. порт (USB)", - /* ImageEditor */ - "editor.default_text": "Текст", - "editor.export.json": "Экспорт JSON", - "editor.import.json": "Импорт JSON", - "editor.import.zpl": "Импорт ZPL", - "editor.preview": "Предпросмотр", - "editor.print": "Печать", - "editor.delete": "Удалить", - "editor.clone": "Клонировать", - /* PrintPreview */ - "preview.title": "Предпросмотр печати", - "preview.postprocess": "Постобработка", - "preview.postprocess.threshold": "Порог", - "preview.postprocess.atkinson": "Дизеринг (Аткинсон)", - "preview.threshold": "Порог", - "preview.copies": "Копии", - "preview.density": "Плотность", - "preview.print_task_version": "Версия задачи печати", - "preview.not_implemented": "НЕ РЕАЛИЗОВАНО", - "preview.close": "Закрыть", - "preview.print": "Печать", - "preview.not_connected": "Принтер не подключен", - "preview.label_type": "Тип этикетки", - "preview.label_type.Invalid": "Некорректный", - "preview.label_type.WithGaps": "С промежутками", - "preview.label_type.Black": "Чёрный", - "preview.label_type.Continuous": "Неразрывный", - "preview.label_type.Perforated": "С отверстиями", - "preview.label_type.Transparent": "Прозрачный", - "preview.label_type.PvcTag": "ПВХ", - "preview.label_type.BlackMarkGap": "С чёрными метками", - "preview.label_type.HeatShrinkTube": "Термоусадочная трубка", - /* ObjectPicker */ - "editor.objectpicker.title": "Добавить объект", - "editor.objectpicker.text": "Текст", - "editor.objectpicker.line": "Линия", - "editor.objectpicker.rectangle": "Прямоугольник", - "editor.objectpicker.circle": "Круг", - "editor.objectpicker.image": "Картинка", - "editor.objectpicker.qrcode": "QR Код", - "editor.objectpicker.barcode": "Штрих-код", - /* IconPicker */ - "editor.iconpicker.title": "Добавить иконку", - "editor.iconpicker.search": "Поиск", - /* LabelPropsEditor */ - "params.label.title": "Настройки этикетки", - "params.label.size": "Размер", - "params.label.mm": "мм", - "params.label.dpmm": "пикс/мм", - "params.label.calc": "Рассчёт", - "params.label.px": "пикс.", - "params.label.direction": "Печатать", - "params.label.direction.left": "Слева", - "params.label.direction.top": "Сверху", - /* TextParamsControls */ - "params.text.fetch_fonts": "Получить список шрифтов", - "params.text.align.left": "Выравнивание текста: Слева", - "params.text.align.center": "Выравнивание текста: По центру", - "params.text.align.right": "Выравнивание текста: Справа", - "params.text.bold": "Полужирный", - "params.text.font_size": "Размер шрифта", - "params.text.font_size.up": "Увеличить размер шрифта", - "params.text.font_size.down": "Уменьшить размер шрифта", - "params.text.line_height": "Межстрочный интервал", - "params.text.font_family": "Шрифт", - "params.text.invert_colors": "Инвертировать цвета", - /* GenericObjectParamsControls */ - "params.generic.center.vertical": "Выровнять вертикально", - "params.generic.center.horizontal": "Выровнять горизонтально", - /* QRCodeParamsControls */ - "params.qrcode.ecl": "Уровень коррекции ошибок", - /** BarcodeParamsControls */ - "params.barcode.encoding": "Тип", - "params.barcode.content": "Содержимое", - }, - - /** Simplified Chinese */ - zh_cn: { - /* Main page */ - "main.code": "查看源码", - "main.built": "编译于", - /* BrowserWarning */ - "browser_warning.lines.first": "哦豁,你的浏览器貌似不支持蓝牙和串口通讯", - "browser_warning.lines.second": "但是你依然可以使用标签编辑功能", - /* PrinterConnector */ - "connector.bluetooth": "蓝牙", - "connector.serial": "串口(USB)", - /* ImageEditor */ - "editor.default_text": "文本", - "editor.export.json": "导出 JSON 文件", - "editor.import.json": "导入 JSON 文件", - "editor.import.zpl": "导入 ZPL 文件", - "editor.preview": "预览", - "editor.print": "打印", - "editor.delete": "删除", - "editor.clone": "复制", - /* PrintPreview */ - "preview.title": "打印预览", - "preview.postprocess": "前置处理器", - "preview.postprocess.threshold": "阈值化", - "preview.postprocess.atkinson": "抖动(Atkinson)", - "preview.threshold": "阈值", - "preview.copies": "份数", - "preview.density": "浓度", - "preview.print_task_version": "打印接口版本", - "preview.not_implemented": "暂不支持", - "preview.close": "关闭", - "preview.not_connected": "打印机未连接", - "preview.print": "打印", - "preview.label_type": "标签类型", - "preview.label_type.Invalid": "无效纸张", - "preview.label_type.WithGaps": "间隙纸", - "preview.label_type.Black": "黑标纸", - "preview.label_type.Continuous": "连续纸", - "preview.label_type.Perforated": "定孔纸", - "preview.label_type.Transparent": "透明纸", - "preview.label_type.PvcTag": "PVC", - "preview.label_type.BlackMarkGap": "黑标间隙纸", - "preview.label_type.HeatShrinkTube": "热缩管", - /* ObjectPicker */ - "editor.objectpicker.title": "添加元素", - "editor.objectpicker.text": "文字", - "editor.objectpicker.line": "线条", - "editor.objectpicker.rectangle": "矩形", - "editor.objectpicker.circle": "圆形", - "editor.objectpicker.image": "图片", - "editor.objectpicker.qrcode": "二维码", - "editor.objectpicker.barcode": "条码", - /* IconPicker */ - "editor.iconpicker.title": "添加图标", - "editor.iconpicker.search": "搜索", - /* LabelPropsEditor */ - "params.label.title": "标签属性", - "params.label.size": "尺寸", - "params.label.mm": "毫米", - "params.label.dpmm": "点/毫米", - "params.label.calc": "计算", - "params.label.px": "像素", - "params.label.direction": "出纸方向", - "params.label.direction.left": "向左", - "params.label.direction.top": "向上", - /* TextParamsControls */ - "params.text.fetch_fonts": "获取系统字体", - "params.text.align.left": "左对齐", - "params.text.align.center": "居中", - "params.text.align.right": "右对齐", - "params.text.bold": "加粗", - "params.text.invert_colors": "反转颜色", - "params.text.font_size": "字体大小", - "params.text.font_size.up": "加大", - "params.text.font_size.down": "缩小", - "params.text.line_height": "行距", - "params.text.font_family": "字体", - /* GenericObjectParamsControls */ - "params.generic.center.vertical": "竖向居中", - "params.generic.center.horizontal": "横向居中", - /* QRCodeParamsControls */ - "params.qrcode.ecl": "误差校正级别", - /** BarcodeParamsControls */ - "params.barcode.encoding": "类型", - "params.barcode.content": "内容", - } -}; - -export const languagesMaps: Record = { - en: "English", - ru: "Русский", - zh_cn: "简体中文", -} \ No newline at end of file diff --git a/src/locale/index.ts b/src/locale/index.ts new file mode 100644 index 0000000..95f8adf --- /dev/null +++ b/src/locale/index.ts @@ -0,0 +1,92 @@ +import { translation_ru } from "./ru"; +import { translation_zh_cn } from "./zh_cn"; + +export type translationKeys = + | "browser_warning.lines.first" + | "browser_warning.lines.second" + | "connector.bluetooth" + | "connector.serial" + | "editor.clone" + | "editor.default_text" + | "editor.delete" + | "editor.export.json" + | "editor.iconpicker.search" + | "editor.iconpicker.title" + | "editor.import.json" + | "editor.import.zpl" + | "editor.objectpicker.barcode" + | "editor.objectpicker.circle" + | "editor.objectpicker.image" + | "editor.objectpicker.line" + | "editor.objectpicker.qrcode" + | "editor.objectpicker.rectangle" + | "editor.objectpicker.text" + | "editor.objectpicker.title" + | "editor.preview" + | "editor.print" + | "main.built" + | "main.code" + | "params.barcode.content" + | "params.barcode.encoding" + | "params.generic.center.horizontal" + | "params.generic.center.vertical" + | "params.label.calc" + | "params.label.direction.left" + | "params.label.direction.top" + | "params.label.direction" + | "params.label.dpmm" + | "params.label.mm" + | "params.label.px" + | "params.label.size" + | "params.label.title" + | "params.qrcode.ecl" + | "params.text.align.center" + | "params.text.align.left" + | "params.text.align.right" + | "params.text.bold" + | "params.text.invert_colors" + | "params.text.fetch_fonts" + | "params.text.font_family" + | "params.text.font_size.down" + | "params.text.font_size.up" + | "params.text.font_size" + | "params.text.line_height" + | "preview.close" + | "preview.copies" + | "preview.density" + | "preview.label_type.Black" + | "preview.label_type.BlackMarkGap" + | "preview.label_type.Continuous" + | "preview.label_type.HeatShrinkTube" + | "preview.label_type.Invalid" + | "preview.label_type.Perforated" + | "preview.label_type.PvcTag" + | "preview.label_type.Transparent" + | "preview.label_type.WithGaps" + | "preview.label_type" + | "preview.not_connected" + | "preview.not_implemented" + | "preview.postprocess.atkinson" + | "preview.postprocess.threshold" + | "preview.postprocess" + | "preview.print_task_version" + | "preview.print" + | "preview.threshold" + | "preview.title"; + +export type supportedLanguages = "en" | "ru" | "zh_cn"; + +export const langPack: Record>> = { + /** Do not add anything in "en" translation, fallback values are used */ + en: {}, + /** Russian */ + ru: translation_ru, + /** Simplified Chinese */ + zh_cn: translation_zh_cn, +}; + +export const languageNames: Record = { + en: "English", + ru: "Русский", + zh_cn: "简体中文", +}; diff --git a/src/locale/ru.ts b/src/locale/ru.ts new file mode 100644 index 0000000..fd9a7c9 --- /dev/null +++ b/src/locale/ru.ts @@ -0,0 +1,88 @@ +import type { translationKeys } from "."; + +/** Russian */ +export const translation_ru: Partial> = { + /* Main page */ + "main.code": "Исходный код", + "main.built": "собрано", + /* BrowserWarning */ + "browser_warning.lines.first": "О нет, ваш браузер не поддерживает Bluetooth и последовательный порт", + "browser_warning.lines.second": "В любом случае, вы можете рисовать этикетки.", + /* PrinterConnector */ + "connector.bluetooth": "Bluetooth", + "connector.serial": "Посл. порт (USB)", + /* ImageEditor */ + "editor.default_text": "Текст", + "editor.export.json": "Экспорт JSON", + "editor.import.json": "Импорт JSON", + "editor.import.zpl": "Импорт ZPL", + "editor.preview": "Предпросмотр", + "editor.print": "Печать", + "editor.delete": "Удалить", + "editor.clone": "Клонировать", + /* PrintPreview */ + "preview.title": "Предпросмотр печати", + "preview.postprocess": "Постобработка", + "preview.postprocess.threshold": "Порог", + "preview.postprocess.atkinson": "Дизеринг (Аткинсон)", + "preview.threshold": "Порог", + "preview.copies": "Копии", + "preview.density": "Плотность", + "preview.print_task_version": "Версия задачи печати", + "preview.not_implemented": "НЕ РЕАЛИЗОВАНО", + "preview.close": "Закрыть", + "preview.print": "Печать", + "preview.not_connected": "Принтер не подключен", + "preview.label_type": "Тип этикетки", + "preview.label_type.Invalid": "Некорректный", + "preview.label_type.WithGaps": "С промежутками", + "preview.label_type.Black": "Чёрный", + "preview.label_type.Continuous": "Неразрывный", + "preview.label_type.Perforated": "С отверстиями", + "preview.label_type.Transparent": "Прозрачный", + "preview.label_type.PvcTag": "ПВХ", + "preview.label_type.BlackMarkGap": "С чёрными метками", + "preview.label_type.HeatShrinkTube": "Термоусадочная трубка", + /* ObjectPicker */ + "editor.objectpicker.title": "Добавить объект", + "editor.objectpicker.text": "Текст", + "editor.objectpicker.line": "Линия", + "editor.objectpicker.rectangle": "Прямоугольник", + "editor.objectpicker.circle": "Круг", + "editor.objectpicker.image": "Картинка", + "editor.objectpicker.qrcode": "QR Код", + "editor.objectpicker.barcode": "Штрих-код", + /* IconPicker */ + "editor.iconpicker.title": "Добавить иконку", + "editor.iconpicker.search": "Поиск", + /* LabelPropsEditor */ + "params.label.title": "Настройки этикетки", + "params.label.size": "Размер", + "params.label.mm": "мм", + "params.label.dpmm": "пикс/мм", + "params.label.calc": "Рассчёт", + "params.label.px": "пикс.", + "params.label.direction": "Печатать", + "params.label.direction.left": "Слева", + "params.label.direction.top": "Сверху", + /* TextParamsControls */ + "params.text.fetch_fonts": "Получить список шрифтов", + "params.text.align.left": "Выравнивание текста: Слева", + "params.text.align.center": "Выравнивание текста: По центру", + "params.text.align.right": "Выравнивание текста: Справа", + "params.text.bold": "Полужирный", + "params.text.font_size": "Размер шрифта", + "params.text.font_size.up": "Увеличить размер шрифта", + "params.text.font_size.down": "Уменьшить размер шрифта", + "params.text.line_height": "Межстрочный интервал", + "params.text.font_family": "Шрифт", + "params.text.invert_colors": "Инвертировать цвета", + /* GenericObjectParamsControls */ + "params.generic.center.vertical": "Выровнять вертикально", + "params.generic.center.horizontal": "Выровнять горизонтально", + /* QRCodeParamsControls */ + "params.qrcode.ecl": "Уровень коррекции ошибок", + /** BarcodeParamsControls */ + "params.barcode.encoding": "Тип", + "params.barcode.content": "Содержимое", +}; diff --git a/src/locale/zh_cn.ts b/src/locale/zh_cn.ts new file mode 100644 index 0000000..feb2c31 --- /dev/null +++ b/src/locale/zh_cn.ts @@ -0,0 +1,88 @@ +import type { translationKeys } from "."; + +/** Simplified Chinese */ +export const translation_zh_cn: Partial> = { + /* Main page */ + "main.code": "查看源码", + "main.built": "编译于", + /* BrowserWarning */ + "browser_warning.lines.first": "哦豁,你的浏览器貌似不支持蓝牙和串口通讯", + "browser_warning.lines.second": "但是你依然可以使用标签编辑功能", + /* PrinterConnector */ + "connector.bluetooth": "蓝牙", + "connector.serial": "串口(USB)", + /* ImageEditor */ + "editor.default_text": "文本", + "editor.export.json": "导出 JSON 文件", + "editor.import.json": "导入 JSON 文件", + "editor.import.zpl": "导入 ZPL 文件", + "editor.preview": "预览", + "editor.print": "打印", + "editor.delete": "删除", + "editor.clone": "复制", + /* PrintPreview */ + "preview.title": "打印预览", + "preview.postprocess": "前置处理器", + "preview.postprocess.threshold": "阈值化", + "preview.postprocess.atkinson": "抖动(Atkinson)", + "preview.threshold": "阈值", + "preview.copies": "份数", + "preview.density": "浓度", + "preview.print_task_version": "打印接口版本", + "preview.not_implemented": "暂不支持", + "preview.close": "关闭", + "preview.not_connected": "打印机未连接", + "preview.print": "打印", + "preview.label_type": "标签类型", + "preview.label_type.Invalid": "无效纸张", + "preview.label_type.WithGaps": "间隙纸", + "preview.label_type.Black": "黑标纸", + "preview.label_type.Continuous": "连续纸", + "preview.label_type.Perforated": "定孔纸", + "preview.label_type.Transparent": "透明纸", + "preview.label_type.PvcTag": "PVC", + "preview.label_type.BlackMarkGap": "黑标间隙纸", + "preview.label_type.HeatShrinkTube": "热缩管", + /* ObjectPicker */ + "editor.objectpicker.title": "添加元素", + "editor.objectpicker.text": "文字", + "editor.objectpicker.line": "线条", + "editor.objectpicker.rectangle": "矩形", + "editor.objectpicker.circle": "圆形", + "editor.objectpicker.image": "图片", + "editor.objectpicker.qrcode": "二维码", + "editor.objectpicker.barcode": "条码", + /* IconPicker */ + "editor.iconpicker.title": "添加图标", + "editor.iconpicker.search": "搜索", + /* LabelPropsEditor */ + "params.label.title": "标签属性", + "params.label.size": "尺寸", + "params.label.mm": "毫米", + "params.label.dpmm": "点/毫米", + "params.label.calc": "计算", + "params.label.px": "像素", + "params.label.direction": "出纸方向", + "params.label.direction.left": "向左", + "params.label.direction.top": "向上", + /* TextParamsControls */ + "params.text.fetch_fonts": "获取系统字体", + "params.text.align.left": "左对齐", + "params.text.align.center": "居中", + "params.text.align.right": "右对齐", + "params.text.bold": "加粗", + "params.text.invert_colors": "反转颜色", + "params.text.font_size": "字体大小", + "params.text.font_size.up": "加大", + "params.text.font_size.down": "缩小", + "params.text.line_height": "行距", + "params.text.font_family": "字体", + /* GenericObjectParamsControls */ + "params.generic.center.vertical": "竖向居中", + "params.generic.center.horizontal": "横向居中", + /* QRCodeParamsControls */ + "params.qrcode.ecl": "误差校正级别", + /** BarcodeParamsControls */ + "params.barcode.encoding": "类型", + "params.barcode.content": "内容", +}; diff --git a/src/utils/i18n.ts b/src/utils/i18n.ts index d55625c..5244fb0 100644 --- a/src/utils/i18n.ts +++ b/src/utils/i18n.ts @@ -1,8 +1,8 @@ import { derived, writable } from "svelte/store"; -import type { translationKeys, supportedLanguages } from "../lang_pack" -import { languagesMaps, langPack } from "../lang_pack"; +import type { translationKeys, supportedLanguages } from "../locale" +import { languageNames, langPack } from "../locale"; -export type {translationKeys, supportedLanguages} from '../lang_pack' +export type {translationKeys, supportedLanguages} from '../locale' function browserLanguage2supportedLanguage(browserLanguage: string): supportedLanguages { switch(browserLanguage) { @@ -18,7 +18,7 @@ function browserLanguage2supportedLanguage(browserLanguage: string): supportedLa } } -export const locales = languagesMaps; +export const locales = languageNames; export const locale = writable( localStorage.getItem("locale") as supportedLanguages ?? browserLanguage2supportedLanguage(navigator.language)