mirror of
https://github.com/CorentinTh/it-tools.git
synced 2025-05-05 13:57:10 -04:00
feat(i18n): i18n Outlook safelink tool
refactor(tools): Only show the output when there is an input value
This commit is contained in:
parent
5f5e01d594
commit
61b5a610ea
7 changed files with 31 additions and 13 deletions
1
components.d.ts
vendored
1
components.d.ts
vendored
|
@ -160,6 +160,7 @@ declare module '@vue/runtime-core' {
|
||||||
RouterLink: typeof import('vue-router')['RouterLink']
|
RouterLink: typeof import('vue-router')['RouterLink']
|
||||||
RouterView: typeof import('vue-router')['RouterView']
|
RouterView: typeof import('vue-router')['RouterView']
|
||||||
RsaKeyPairGenerator: typeof import('./src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue')['default']
|
RsaKeyPairGenerator: typeof import('./src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue')['default']
|
||||||
|
SafelinkDecoder: typeof import('./src/tools/safelink-decoder/safelink-decoder.vue')['default']
|
||||||
SlugifyString: typeof import('./src/tools/slugify-string/slugify-string.vue')['default']
|
SlugifyString: typeof import('./src/tools/slugify-string/slugify-string.vue')['default']
|
||||||
SpanCopyable: typeof import('./src/components/SpanCopyable.vue')['default']
|
SpanCopyable: typeof import('./src/components/SpanCopyable.vue')['default']
|
||||||
SqlPrettify: typeof import('./src/tools/sql-prettify/sql-prettify.vue')['default']
|
SqlPrettify: typeof import('./src/tools/sql-prettify/sql-prettify.vue')['default']
|
||||||
|
|
|
@ -44,13 +44,6 @@
|
||||||
/>
|
/>
|
||||||
<meta name="twitter:image" content="https://it-tools.tech/banner.png?v=2" />
|
<meta name="twitter:image" content="https://it-tools.tech/banner.png?v=2" />
|
||||||
<meta name="twitter:image:alt" content="IT Tools - Handy online tools for developers" />
|
<meta name="twitter:image:alt" content="IT Tools - Handy online tools for developers" />
|
||||||
<script type="text/javascript">
|
|
||||||
(function (c, l, a, r, i, t, y) {
|
|
||||||
c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); };
|
|
||||||
t = l.createElement(r); t.async = 1; t.src = `https://www.clarity.ms/tag/${i}`;
|
|
||||||
y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y);
|
|
||||||
})(window, document, 'clarity', 'script', 'l588ndu5jj');
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
import { Mailbox } from '@vicons/tabler';
|
import { Mailbox } from '@vicons/tabler';
|
||||||
import { defineTool } from '../tool';
|
import { defineTool } from '../tool';
|
||||||
|
import { translate as t } from '@/plugins/i18n.plugin';
|
||||||
|
|
||||||
export const tool = defineTool({
|
export const tool = defineTool({
|
||||||
name: 'Outlook Safelink decoder',
|
name: t('tools.safelink-decoder.title'),
|
||||||
path: '/safelink-decoder',
|
path: '/safelink-decoder',
|
||||||
description: 'Decode Outlook SafeLink links',
|
description: t('tools.safelink-decoder.description'),
|
||||||
keywords: ['outlook', 'safelink', 'decoder'],
|
keywords: ['outlook', 'safelink', 'decoder'],
|
||||||
component: () => import('./safelink-decoder.vue'),
|
component: () => import('./safelink-decoder.vue'),
|
||||||
icon: Mailbox,
|
icon: Mailbox,
|
||||||
|
|
10
src/tools/safelink-decoder/locales/en.yml
Normal file
10
src/tools/safelink-decoder/locales/en.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
tools:
|
||||||
|
safelink-decoder:
|
||||||
|
title: Outlook Safelink decoder
|
||||||
|
description: Decode Outlook SafeLink links
|
||||||
|
|
||||||
|
inputLabel: 'Your input Outlook SafeLink Url:'
|
||||||
|
inputPlaceholder: Your input Outlook SafeLink Url...
|
||||||
|
outputLabel: 'Output decoded URL:'
|
||||||
|
|
||||||
|
invalidMessage: Invalid SafeLinks URL provided
|
10
src/tools/safelink-decoder/locales/zh.yml
Normal file
10
src/tools/safelink-decoder/locales/zh.yml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
tools:
|
||||||
|
safelink-decoder:
|
||||||
|
title: Outlook 安全链接解码器
|
||||||
|
description: 解码 Outlook 安全链接
|
||||||
|
|
||||||
|
inputLabel: '您的输入 Outlook 安全链接:'
|
||||||
|
inputPlaceholder: 您的输入 Outlook 安全链接...
|
||||||
|
outputLabel: '解码后的 URL:'
|
||||||
|
|
||||||
|
invalidMessage: 提供的安全链接无效
|
|
@ -1,6 +1,8 @@
|
||||||
|
import { translate as t } from '@/plugins/i18n.plugin';
|
||||||
|
|
||||||
export function decodeSafeLinksURL(safeLinksUrl: string) {
|
export function decodeSafeLinksURL(safeLinksUrl: string) {
|
||||||
if (!safeLinksUrl.match(/\.safelinks\.protection\.outlook\.com/)) {
|
if (!safeLinksUrl.match(/\.safelinks\.protection\.outlook\.com/)) {
|
||||||
throw new Error('Invalid SafeLinks URL provided');
|
throw new Error(t('tools.safelink-decoder.invalidMessage'));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new URL(safeLinksUrl).searchParams.get('url');
|
return new URL(safeLinksUrl).searchParams.get('url');
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import { decodeSafeLinksURL } from './safelink-decoder.service';
|
import { decodeSafeLinksURL } from './safelink-decoder.service';
|
||||||
import TextareaCopyable from '@/components/TextareaCopyable.vue';
|
import TextareaCopyable from '@/components/TextareaCopyable.vue';
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
const inputSafeLinkUrl = ref('');
|
const inputSafeLinkUrl = ref('');
|
||||||
const outputDecodedUrl = computed(() => {
|
const outputDecodedUrl = computed(() => {
|
||||||
try {
|
try {
|
||||||
|
@ -18,14 +19,14 @@ const outputDecodedUrl = computed(() => {
|
||||||
<c-input-text
|
<c-input-text
|
||||||
v-model:value="inputSafeLinkUrl"
|
v-model:value="inputSafeLinkUrl"
|
||||||
raw-text
|
raw-text
|
||||||
placeholder="Your input Outlook SafeLink Url..."
|
:placeholder="t('tools.safelink-decoder.inputPlaceholder')"
|
||||||
autofocus
|
autofocus
|
||||||
label="Your input Outlook SafeLink Url:"
|
:label="t('tools.safelink-decoder.inputLabel')"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<n-divider />
|
<n-divider />
|
||||||
|
|
||||||
<n-form-item label="Output decoded URL:">
|
<n-form-item v-if="inputSafeLinkUrl !== ''" :label="t('tools.safelink-decoder.outputLabel')">
|
||||||
<TextareaCopyable :value="outputDecodedUrl" :word-wrap="true" />
|
<TextareaCopyable :value="outputDecodedUrl" :word-wrap="true" />
|
||||||
</n-form-item>
|
</n-form-item>
|
||||||
</div>
|
</div>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue