- Search result
+ {{ t('tools.emoji-picker.searchResult') }}
diff --git a/src/tools/emoji-picker/index.ts b/src/tools/emoji-picker/index.ts
index ef01b2de..bc8e7580 100644
--- a/src/tools/emoji-picker/index.ts
+++ b/src/tools/emoji-picker/index.ts
@@ -1,10 +1,11 @@
import { MoodSmile } from '@vicons/tabler';
import { defineTool } from '../tool';
+import { translate as t } from '@/plugins/i18n.plugin';
export const tool = defineTool({
- name: 'Emoji picker',
+ name: t('tools.emoji-picker.title'),
path: '/emoji-picker',
- description: 'Copy and paste emojis easily and get the unicode and code points value of each emoji.',
+ description: t('tools.emoji-picker.description'),
keywords: ['emoji', 'picker', 'unicode', 'copy', 'paste'],
component: () => import('./emoji-picker.vue'),
icon: MoodSmile,
diff --git a/src/tools/emoji-picker/locales/en.yml b/src/tools/emoji-picker/locales/en.yml
new file mode 100644
index 00000000..45cbf11c
--- /dev/null
+++ b/src/tools/emoji-picker/locales/en.yml
@@ -0,0 +1,12 @@
+tools:
+ emoji-picker:
+ title: Emoji picker
+ description: Copy and paste emojis easily and get the unicode and code points value of each emoji.
+
+ searchPlaceholder: Search emojis (e.g. "smile")...
+ noResults: No results
+ searchResult: Search result
+
+ emojiCopied: Emoji {emoji} copied to the clipboard
+ codePointsCopied: Code points {codePoints} copied to the clipboard
+ unicodeCopied: Unicode {unicode} copied to the clipboard
diff --git a/src/tools/emoji-picker/locales/zh.yml b/src/tools/emoji-picker/locales/zh.yml
new file mode 100644
index 00000000..f1d5fc9f
--- /dev/null
+++ b/src/tools/emoji-picker/locales/zh.yml
@@ -0,0 +1,12 @@
+tools:
+ emoji-picker:
+ title: 表情选择器
+ description: 轻松复制和粘贴表情符号,并获取每个表情符号的 Unicode 和代码点值。
+
+ searchPlaceholder: 搜索表情符号(例如“笑脸”)...
+ noResults: 没有结果
+ searchResult: 搜索结果
+
+ emojiCopied: 表情符号 {emoji} 已复制到剪贴板
+ codePointsCopied: 代码点 {codePoints} 已复制到剪贴板
+ unicodeCopied: Unicode {unicode} 已复制到剪贴板
diff --git a/src/tools/iban-validator-and-parser/iban-validator-and-parser.service.ts b/src/tools/iban-validator-and-parser/iban-validator-and-parser.service.ts
index bde71dba..7d4a8bd2 100644
--- a/src/tools/iban-validator-and-parser/iban-validator-and-parser.service.ts
+++ b/src/tools/iban-validator-and-parser/iban-validator-and-parser.service.ts
@@ -1,16 +1,17 @@
import { ValidationErrorsIBAN } from 'ibantools';
+import { translate as t } from '@/plugins/i18n.plugin';
export { getFriendlyErrors };
const ibanErrorToMessage = {
- [ValidationErrorsIBAN.NoIBANProvided]: 'No IBAN provided',
- [ValidationErrorsIBAN.NoIBANCountry]: 'No IBAN country',
- [ValidationErrorsIBAN.WrongBBANLength]: 'Wrong BBAN length',
- [ValidationErrorsIBAN.WrongBBANFormat]: 'Wrong BBAN format',
- [ValidationErrorsIBAN.ChecksumNotNumber]: 'Checksum is not a number',
- [ValidationErrorsIBAN.WrongIBANChecksum]: 'Wrong IBAN checksum',
- [ValidationErrorsIBAN.WrongAccountBankBranchChecksum]: 'Wrong account bank branch checksum',
- [ValidationErrorsIBAN.QRIBANNotAllowed]: 'QR-IBAN not allowed',
+ [ValidationErrorsIBAN.NoIBANProvided]: t('tools.iban-validator-and-parser.noIBANProvided'),
+ [ValidationErrorsIBAN.NoIBANCountry]: t('tools.iban-validator-and-parser.noIBANCountry'),
+ [ValidationErrorsIBAN.WrongBBANLength]: t('tools.iban-validator-and-parser.wrongBBANLength'),
+ [ValidationErrorsIBAN.WrongBBANFormat]: t('tools.iban-validator-and-parser.wrongBBANFormat'),
+ [ValidationErrorsIBAN.ChecksumNotNumber]: t('tools.iban-validator-and-parser.checksumNotNumber'),
+ [ValidationErrorsIBAN.WrongIBANChecksum]: t('tools.iban-validator-and-parser.wrongIBANChecksum'),
+ [ValidationErrorsIBAN.WrongAccountBankBranchChecksum]: t('tools.iban-validator-and-parser.wrongAccountBankBranchChecksum'),
+ [ValidationErrorsIBAN.QRIBANNotAllowed]: t('tools.iban-validator-and-parser.QRIBANNotAllowed'),
};
function getFriendlyErrors(errorCodes: ValidationErrorsIBAN[]) {
diff --git a/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue b/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue
index 6844dc5a..faafa626 100644
--- a/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue
+++ b/src/tools/iban-validator-and-parser/iban-validator-and-parser.vue
@@ -3,6 +3,7 @@ import { extractIBAN, friendlyFormatIBAN, isQRIBAN, validateIBAN } from 'ibantoo
import { getFriendlyErrors } from './iban-validator-and-parser.service';
import type { CKeyValueListItems } from '@/ui/c-key-value-list/c-key-value-list.types';
+const { t } = useI18n();
const rawIban = ref('');
const ibanInfo = computed
(() => {
@@ -19,31 +20,31 @@ const ibanInfo = computed(() => {
return [
{
- label: 'Is IBAN valid ?',
+ label: t('tools.iban-validator-and-parser.isIbanValid'),
value: isIbanValid,
showCopyButton: false,
},
{
- label: 'IBAN errors',
+ label: t('tools.iban-validator-and-parser.IBANErrors'),
value: errors.length === 0 ? undefined : errors,
hideOnNil: true,
showCopyButton: false,
},
{
- label: 'Is IBAN a QR-IBAN ?',
+ label: t('tools.iban-validator-and-parser.isQRIBAN'),
value: isQRIBAN(iban),
showCopyButton: false,
},
{
- label: 'Country code',
+ label: t('tools.iban-validator-and-parser.countryCode'),
value: countryCode,
},
{
- label: 'BBAN',
+ label: t('tools.iban-validator-and-parser.BBAN'),
value: bban,
},
{
- label: 'IBAN friendly format',
+ label: t('tools.iban-validator-and-parser.IBANFriendlyFormat'),
value: friendlyFormatIBAN(iban),
},
];
@@ -58,13 +59,13 @@ const ibanExamples = [
-
+
-
+
diff --git a/src/tools/iban-validator-and-parser/index.ts b/src/tools/iban-validator-and-parser/index.ts
index b0cae50d..7c23c83b 100644
--- a/src/tools/iban-validator-and-parser/index.ts
+++ b/src/tools/iban-validator-and-parser/index.ts
@@ -1,10 +1,11 @@
import { defineTool } from '../tool';
import Bank from '~icons/mdi/bank';
+import { translate as t } from '@/plugins/i18n.plugin';
export const tool = defineTool({
- name: 'IBAN validator and parser',
+ name: t('tools.iban-validator-and-parser.title'),
path: '/iban-validator-and-parser',
- description: 'Validate and parse IBAN numbers. Check if IBAN is valid and get the country, BBAN, if it is a QR-IBAN and the IBAN friendly format.',
+ description: t('tools.iban-validator-and-parser.description'),
keywords: ['iban', 'validator', 'and', 'parser', 'bic', 'bank'],
component: () => import('./iban-validator-and-parser.vue'),
icon: Bank,
diff --git a/src/tools/iban-validator-and-parser/locales/en.yml b/src/tools/iban-validator-and-parser/locales/en.yml
new file mode 100644
index 00000000..b4fe9ce9
--- /dev/null
+++ b/src/tools/iban-validator-and-parser/locales/en.yml
@@ -0,0 +1,22 @@
+tools:
+ iban-validator-and-parser:
+ title: IBAN validator and parser
+ description: Validate and parse IBAN numbers. Check if IBAN is valid and get the country, BBAN, if it is a QR-IBAN and the IBAN friendly format.
+
+ inputPlaceholder: Enter an IBAN to check for validity...
+ ibanExamples: Valid IBAN examples
+
+ isIbanValid: Is IBAN valid ?
+ IBANErrors: IBAN errors
+ isQRIBAN: Is IBAN a QR-IBAN ?
+ countryCode: Country code
+ BBAN: BBAN
+ IBANFriendlyFormat: IBAN friendly format
+ noIBANProvided: No IBAN provided
+ noIBANCountry: No IBAN country
+ wrongBBANLength: Wrong BBAN length
+ wrongBBANFormat: Wrong BBAN format
+ checksumNotNumber: Checksum is not a number
+ wrongIBANChecksum: Wrong IBAN checksum
+ wrongAccountBankBranchChecksum: Wrong account bank branch checksum
+ QRIBANNotAllowed: QR-IBAN not allowed
diff --git a/src/tools/iban-validator-and-parser/locales/zh.yml b/src/tools/iban-validator-and-parser/locales/zh.yml
new file mode 100644
index 00000000..f0041ac6
--- /dev/null
+++ b/src/tools/iban-validator-and-parser/locales/zh.yml
@@ -0,0 +1,22 @@
+tools:
+ iban-validator-and-parser:
+ title: IBAN 验证器和解析器
+ description: 验证和解析 IBAN 号码。检查 IBAN 是否有效,并获取国家、BBAN、是否为 QR-IBAN 和 IBAN 友好格式。
+
+ inputPlaceholder: 输入要检查有效性的 IBAN…
+ ibanExamples: 有效的 IBAN 示例
+
+ isIbanValid: IBAN 是否有效?
+ IBANErrors: IBAN 错误
+ isQRIBAN: 是否为 QR-IBAN?
+ countryCode: 国家代码
+ BBAN: BBAN
+ IBANFriendlyFormat: IBAN 友好格式
+ noIBANProvided: 未提供 IBAN
+ noIBANCountry: 未提供 IBAN 国家
+ wrongBBANLength: BBAN 长度错误
+ wrongBBANFormat: BBAN 格式错误
+ checksumNotNumber: 校验和不是数字
+ wrongIBANChecksum: IBAN 校验和错误
+ wrongAccountBankBranchChecksum: 帐户银行分行校验和错误
+ QRIBANNotAllowed: 不允许 QR-IBAN
diff --git a/src/tools/lorem-ipsum-generator/index.ts b/src/tools/lorem-ipsum-generator/index.ts
index 1767d85d..4be3e3b6 100644
--- a/src/tools/lorem-ipsum-generator/index.ts
+++ b/src/tools/lorem-ipsum-generator/index.ts
@@ -1,11 +1,11 @@
import { AlignJustified } from '@vicons/tabler';
import { defineTool } from '../tool';
+import { translate as t } from '@/plugins/i18n.plugin';
export const tool = defineTool({
- name: 'Lorem ipsum generator',
+ name: t('tools.lorem-ipsum-generator.title'),
path: '/lorem-ipsum-generator',
- description:
- 'Lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document or a typeface without relying on meaningful content',
+ description: t('tools.lorem-ipsum-generator.description'),
keywords: ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'placeholder', 'text', 'filler', 'random', 'generator'],
component: () => import('./lorem-ipsum-generator.vue'),
icon: AlignJustified,
diff --git a/src/tools/lorem-ipsum-generator/locales/en.yml b/src/tools/lorem-ipsum-generator/locales/en.yml
new file mode 100644
index 00000000..2a8c762a
--- /dev/null
+++ b/src/tools/lorem-ipsum-generator/locales/en.yml
@@ -0,0 +1,14 @@
+tools:
+ lorem-ipsum-generator:
+ title: Lorem ipsum generator
+ description: Lorem ipsum is a placeholder text commonly used to demonstrate the visual form of a document or a typeface without relying on meaningful content.
+
+ paragraphs: Paragraphs
+ sentences: Sentences per paragraph
+ words: Words per sentence
+ startWithLoremIpsum: Start with lorem ipsum ?
+ asHTML: As html ?
+ loremIpsumText: Your lorem ipsum...
+
+ copyBtn: Copy
+ copied: Lorem ipsum copied to the clipboard
diff --git a/src/tools/lorem-ipsum-generator/locales/zh.yml b/src/tools/lorem-ipsum-generator/locales/zh.yml
new file mode 100644
index 00000000..3951709f
--- /dev/null
+++ b/src/tools/lorem-ipsum-generator/locales/zh.yml
@@ -0,0 +1,14 @@
+tools:
+ lorem-ipsum-generator:
+ title: Lorem Ipsum 生成器
+ description: Lorem Ipsum 是一种常用的占位文本,用于展示文档或字体的视觉形式,而不依赖于有意义的内容。
+
+ paragraphs: 段落
+ sentences: 每段句子数
+ words: 每句字数
+ startWithLoremIpsum: 以 Lorem Ipsum 开头?
+ asHTML: 作为 HTML?
+ loremIpsumText: 您的 Lorem Ipsum...
+
+ copyBtn: 复制
+ copied: Lorem Ipsum 已复制到剪贴板
diff --git a/src/tools/lorem-ipsum-generator/lorem-ipsum-generator.vue b/src/tools/lorem-ipsum-generator/lorem-ipsum-generator.vue
index 9085725f..de9096bb 100644
--- a/src/tools/lorem-ipsum-generator/lorem-ipsum-generator.vue
+++ b/src/tools/lorem-ipsum-generator/lorem-ipsum-generator.vue
@@ -3,6 +3,7 @@ import { generateLoremIpsum } from './lorem-ipsum-generator.service';
import { useCopy } from '@/composable/copy';
import { randIntFromInterval } from '@/utils/random';
+const { t } = useI18n();
const paragraphs = ref(1);
const sentences = ref([3, 8]);
const words = ref([8, 15]);
@@ -18,32 +19,32 @@ const loremIpsumText = computed(() =>
startWithLoremIpsum: startWithLoremIpsum.value,
}),
);
-const { copy } = useCopy({ source: loremIpsumText, text: 'Lorem ipsum copied to the clipboard' });
+const { copy } = useCopy({ source: loremIpsumText, text: t('tools.lorem-ipsum-generator.copied') });
-
+
-
+
-
+
-
+
-
+
-
+
- Copy
+ {{ t('tools.lorem-ipsum-generator.copyBtn') }}
diff --git a/src/tools/numeronym-generator/index.ts b/src/tools/numeronym-generator/index.ts
index 19686922..0df57d74 100644
--- a/src/tools/numeronym-generator/index.ts
+++ b/src/tools/numeronym-generator/index.ts
@@ -1,10 +1,11 @@
import { defineTool } from '../tool';
import n7mIcon from './n7m-icon.svg?component';
+import { translate as t } from '@/plugins/i18n.plugin';
export const tool = defineTool({
- name: 'Numeronym generator',
+ name: t('tools.numeronym-generator.title'),
path: '/numeronym-generator',
- description: 'A numeronym is a word where a number is used to form an abbreviation. For example, "i18n" is a numeronym of "internationalization" where 18 stands for the number of letters between the first i and the last n in the word.',
+ description: t('tools.numeronym-generator.description'),
keywords: ['numeronym', 'generator', 'abbreviation', 'i18n', 'a11y', 'l10n'],
component: () => import('./numeronym-generator.vue'),
icon: n7mIcon,
diff --git a/src/tools/numeronym-generator/locales/en.yml b/src/tools/numeronym-generator/locales/en.yml
new file mode 100644
index 00000000..da2eebd3
--- /dev/null
+++ b/src/tools/numeronym-generator/locales/en.yml
@@ -0,0 +1,7 @@
+tools:
+ numeronym-generator:
+ title: Numeronym generator
+ description: A numeronym is a word where a number is used to form an abbreviation. For example, "i18n" is a numeronym of "internationalization" where 18 stands for the number of letters between the first i and the last n in the word.
+
+ inputPlaceholder: "Enter a word, e.g. 'internationalization'"
+ outputPlaceholder: "Your numeronym will be here, e.g. 'i18n'"
diff --git a/src/tools/numeronym-generator/locales/zh.yml b/src/tools/numeronym-generator/locales/zh.yml
new file mode 100644
index 00000000..950d38a4
--- /dev/null
+++ b/src/tools/numeronym-generator/locales/zh.yml
@@ -0,0 +1,7 @@
+tools:
+ numeronym-generator:
+ title: 数字缩略词生成器
+ description: 数字缩略词是一种使用数字形成缩略词的词。例如,"i18n" 是 "internationalization" 的数字缩略词,其中的 18 代表单词中第一个 i 和最后一个 n 之间的字母数量。
+
+ inputPlaceholder: "输入一个单词,例如 'internationalization'"
+ outputPlaceholder: "您的数字缩略词将显示在此处,例如 'i18n'"
diff --git a/src/tools/numeronym-generator/numeronym-generator.vue b/src/tools/numeronym-generator/numeronym-generator.vue
index 2332b338..883fdf00 100644
--- a/src/tools/numeronym-generator/numeronym-generator.vue
+++ b/src/tools/numeronym-generator/numeronym-generator.vue
@@ -1,6 +1,7 @@
-
+
-
-
-
-
+
+
+
+