mirror of
https://github.com/CorentinTh/it-tools.git
synced 2024-09-11 13:37:53 +03:00
Merge branch 'main' into feat/docker-compose-to-docker-run
This commit is contained in:
commit
a50e6a8308
30
components.d.ts
vendored
30
components.d.ts
vendored
@ -12,6 +12,7 @@ declare module '@vue/runtime-core' {
|
||||
'404.page': typeof import('./src/pages/404.page.vue')['default']
|
||||
About: typeof import('./src/pages/About.vue')['default']
|
||||
App: typeof import('./src/App.vue')['default']
|
||||
AsciiTextDrawer: typeof import('./src/tools/ascii-text-drawer/ascii-text-drawer.vue')['default']
|
||||
'Base.layout': typeof import('./src/layouts/base.layout.vue')['default']
|
||||
Base64FileConverter: typeof import('./src/tools/base64-file-converter/base64-file-converter.vue')['default']
|
||||
Base64StringConverter: typeof import('./src/tools/base64-string-converter/base64-string-converter.vue')['default']
|
||||
@ -90,28 +91,17 @@ declare module '@vue/runtime-core' {
|
||||
HttpStatusCodes: typeof import('./src/tools/http-status-codes/http-status-codes.vue')['default']
|
||||
IbanValidatorAndParser: typeof import('./src/tools/iban-validator-and-parser/iban-validator-and-parser.vue')['default']
|
||||
'IconMdi:brushVariant': typeof import('~icons/mdi/brush-variant')['default']
|
||||
'IconMdi:contentCopy': typeof import('~icons/mdi/content-copy')['default']
|
||||
'IconMdi:kettleSteamOutline': typeof import('~icons/mdi/kettle-steam-outline')['default']
|
||||
IconMdiArrowDown: typeof import('~icons/mdi/arrow-down')['default']
|
||||
IconMdiArrowRightBottom: typeof import('~icons/mdi/arrow-right-bottom')['default']
|
||||
IconMdiCamera: typeof import('~icons/mdi/camera')['default']
|
||||
IconMdiChevronDown: typeof import('~icons/mdi/chevron-down')['default']
|
||||
IconMdiChevronRight: typeof import('~icons/mdi/chevron-right')['default']
|
||||
IconMdiClose: typeof import('~icons/mdi/close')['default']
|
||||
IconMdiContentCopy: typeof import('~icons/mdi/content-copy')['default']
|
||||
IconMdiDeleteOutline: typeof import('~icons/mdi/delete-outline')['default']
|
||||
IconMdiDownload: typeof import('~icons/mdi/download')['default']
|
||||
IconMdiEye: typeof import('~icons/mdi/eye')['default']
|
||||
IconMdiEyeOff: typeof import('~icons/mdi/eye-off')['default']
|
||||
IconMdiHeart: typeof import('~icons/mdi/heart')['default']
|
||||
IconMdiPause: typeof import('~icons/mdi/pause')['default']
|
||||
IconMdiPlay: typeof import('~icons/mdi/play')['default']
|
||||
IconMdiRecord: typeof import('~icons/mdi/record')['default']
|
||||
IconMdiRefresh: typeof import('~icons/mdi/refresh')['default']
|
||||
IconMdiSearch: typeof import('~icons/mdi/search')['default']
|
||||
IconMdiTranslate: typeof import('~icons/mdi/translate')['default']
|
||||
IconMdiTriangleDown: typeof import('~icons/mdi/triangle-down')['default']
|
||||
IconMdiVideo: typeof import('~icons/mdi/video')['default']
|
||||
InputCopyable: typeof import('./src/components/InputCopyable.vue')['default']
|
||||
IntegerBaseConverter: typeof import('./src/tools/integer-base-converter/integer-base-converter.vue')['default']
|
||||
Ipv4AddressConverter: typeof import('./src/tools/ipv4-address-converter/ipv4-address-converter.vue')['default']
|
||||
@ -138,39 +128,25 @@ declare module '@vue/runtime-core' {
|
||||
MenuLayout: typeof import('./src/components/MenuLayout.vue')['default']
|
||||
MetaTagGenerator: typeof import('./src/tools/meta-tag-generator/meta-tag-generator.vue')['default']
|
||||
MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default']
|
||||
NAlert: typeof import('naive-ui')['NAlert']
|
||||
NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default']
|
||||
NCheckbox: typeof import('naive-ui')['NCheckbox']
|
||||
NCode: typeof import('naive-ui')['NCode']
|
||||
NCollapseTransition: typeof import('naive-ui')['NCollapseTransition']
|
||||
NColorPicker: typeof import('naive-ui')['NColorPicker']
|
||||
NConfigProvider: typeof import('naive-ui')['NConfigProvider']
|
||||
NDatePicker: typeof import('naive-ui')['NDatePicker']
|
||||
NDivider: typeof import('naive-ui')['NDivider']
|
||||
NDynamicInput: typeof import('naive-ui')['NDynamicInput']
|
||||
NEllipsis: typeof import('naive-ui')['NEllipsis']
|
||||
NForm: typeof import('naive-ui')['NForm']
|
||||
NFormItem: typeof import('naive-ui')['NFormItem']
|
||||
NGi: typeof import('naive-ui')['NGi']
|
||||
NGrid: typeof import('naive-ui')['NGrid']
|
||||
NH1: typeof import('naive-ui')['NH1']
|
||||
NH2: typeof import('naive-ui')['NH2']
|
||||
NH3: typeof import('naive-ui')['NH3']
|
||||
NIcon: typeof import('naive-ui')['NIcon']
|
||||
NImage: typeof import('naive-ui')['NImage']
|
||||
NInputGroup: typeof import('naive-ui')['NInputGroup']
|
||||
NInputGroupLabel: typeof import('naive-ui')['NInputGroupLabel']
|
||||
NInputNumber: typeof import('naive-ui')['NInputNumber']
|
||||
NLabel: typeof import('naive-ui')['NLabel']
|
||||
NLayout: typeof import('naive-ui')['NLayout']
|
||||
NLayoutSider: typeof import('naive-ui')['NLayoutSider']
|
||||
NMenu: typeof import('naive-ui')['NMenu']
|
||||
NProgress: typeof import('naive-ui')['NProgress']
|
||||
NScrollbar: typeof import('naive-ui')['NScrollbar']
|
||||
NSlider: typeof import('naive-ui')['NSlider']
|
||||
NStatistic: typeof import('naive-ui')['NStatistic']
|
||||
NSwitch: typeof import('naive-ui')['NSwitch']
|
||||
NTable: typeof import('naive-ui')['NTable']
|
||||
NTag: typeof import('naive-ui')['NTag']
|
||||
NSpin: typeof import('naive-ui')['NSpin']
|
||||
NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default']
|
||||
OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default']
|
||||
PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default']
|
||||
|
322
locales/en.yml
322
locales/en.yml
@ -69,3 +69,325 @@ tools:
|
||||
measurement: Measurement
|
||||
text: Text
|
||||
data: Data
|
||||
|
||||
password-strength-analyser:
|
||||
title: Password strength analyser
|
||||
description: Discover the strength of your password with this client side only password strength analyser and crack time estimation tool.
|
||||
|
||||
chronometer:
|
||||
title: Chronometer
|
||||
description: Monitor the duration of a thing. Basically a chronometer with simple chronometer features.
|
||||
|
||||
token-generator:
|
||||
title: Token generator
|
||||
description: Generate random string with the chars you want, uppercase or lowercase letters, numbers and/or symbols.
|
||||
|
||||
uppercase: Uppercase (ABC...)
|
||||
lowercase: Lowercase (abc...)
|
||||
numbers: Numbers (123...)
|
||||
symbols: Symbols (!-;...)
|
||||
length: Length
|
||||
tokenPlaceholder: 'The token...'
|
||||
copied: Token copied to the clipboard
|
||||
button:
|
||||
copy: Copy
|
||||
refresh: Refresh
|
||||
percentage-calculator:
|
||||
title: Percentage calculator
|
||||
description: Easily calculate percentages from a value to another value, or from a percentage to a value.
|
||||
|
||||
svg-placeholder-generator:
|
||||
title: SVG placeholder generator
|
||||
description: Generate svg images to use as placeholder in your applications.
|
||||
|
||||
json-to-csv:
|
||||
title: JSON to CSV
|
||||
description: Convert JSON to CSV with automatic header detection.
|
||||
|
||||
camera-recorder:
|
||||
title: Camera recorder
|
||||
description: Take a picture or record a video from your webcam or camera.
|
||||
|
||||
keycode-info:
|
||||
title: Keycode info
|
||||
description: Find the javascript keycode, code, location and modifiers of any pressed key.
|
||||
|
||||
emoji-picker:
|
||||
title: Emoji picker
|
||||
description: Copy and paste emojis easily and get the unicode and code points value of each emoji.
|
||||
|
||||
color-converter:
|
||||
title: Color converter
|
||||
description: Convert color between the different formats (hex, rgb, hsl and css name)
|
||||
|
||||
bcrypt:
|
||||
title: Bcrypt
|
||||
description: Hash and compare text string using bcrypt. Bcrypt is a password-hashing function based on the Blowfish cipher.
|
||||
|
||||
crontab-generator:
|
||||
title: Crontab generator
|
||||
description: Validate and generate crontab and get the human readable description of the cron schedule.
|
||||
|
||||
http-status-codes:
|
||||
title: HTTP status codes
|
||||
description: The list of all HTTP status codes their name and their meaning.
|
||||
|
||||
sql-prettify:
|
||||
title: SQL prettify and format
|
||||
description: Format and prettify your SQL queries online (it supports various SQL dialects).
|
||||
|
||||
benchmark-builder:
|
||||
title: Benchmark builder
|
||||
description: Easily compare execution time of tasks with this very simple online benchmark builder.
|
||||
|
||||
git-memo:
|
||||
title: Git cheatsheet
|
||||
description: Git is a decentralized version management software. With this cheatsheet you will have a quick access to the most common git commands.
|
||||
|
||||
slugify-string:
|
||||
title: Slugify string
|
||||
description: Make a string url, filename and id safe.
|
||||
|
||||
encryption:
|
||||
title: Encrypt / decrypt text
|
||||
description: Encrypt and decrypt text clear text using crypto algorithm like AES, TripleDES, Rabbit or RC4.
|
||||
|
||||
random-port-generator:
|
||||
title: Random port generator
|
||||
description: Generate random port numbers outside of the range of "known" ports (0-1023).
|
||||
|
||||
yaml-prettify:
|
||||
title: YAML prettify and format
|
||||
description: Prettify your YAML string to a human friendly readable format.
|
||||
|
||||
eta-calculator:
|
||||
title: ETA calculator
|
||||
description: An ETA (Estimated Time of Arrival) calculator to know the approximate end time of a task, for example the moment of ending of a download.
|
||||
|
||||
roman-numeral-converter:
|
||||
title: Roman numeral converter
|
||||
description: Convert Roman numerals to numbers and convert numbers to Roman numerals.
|
||||
|
||||
hmac-generator:
|
||||
title: Hmac generator
|
||||
description: Computes a hash-based message authentication code (HMAC) using a secret key and your favorite hashing function.
|
||||
|
||||
bip39-generator:
|
||||
title: BIP39 passphrase generator
|
||||
description: Generate BIP39 passphrase from existing or random mnemonic, or get the mnemonic from the passphrase.
|
||||
|
||||
base64-file-converter:
|
||||
title: Base64 file converter
|
||||
description: Convert string, files or images into a it\'s base64 representation.
|
||||
|
||||
list-converter:
|
||||
title: List converter
|
||||
description: This tool can process column-based data and apply various changes (transpose, add prefix and suffix, reverse list, sort list, lowercase values, truncate values) to each row.
|
||||
|
||||
base64-string-converter:
|
||||
title: Base64 string encoder/decoder
|
||||
description: Simply encode and decode string into a their base64 representation.
|
||||
|
||||
toml-to-yaml:
|
||||
title: TOML to YAML
|
||||
description: Parse and convert TOML to YAML.
|
||||
|
||||
math-evaluator:
|
||||
title: Math evaluator
|
||||
description: A calculator for evaluating mathematical expressions. You can use functions like sqrt, cos, sin, abs, etc.
|
||||
|
||||
json-to-yaml-converter:
|
||||
title: JSON to YAML converter
|
||||
description: Simply convert JSON to YAML with this live online converter.
|
||||
|
||||
url-parser:
|
||||
title: Url parser
|
||||
description: Parse an url string to get all the different parts (protocol, origin, params, port, username-password, ...)
|
||||
|
||||
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.
|
||||
|
||||
user-agent-parser:
|
||||
title: User-agent parser
|
||||
description: Detect and parse Browser, Engine, OS, CPU, and Device type/model from an user-agent string.
|
||||
|
||||
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.
|
||||
|
||||
case-converter:
|
||||
title: Case converter
|
||||
description: Change the case of a string and chose between different formats
|
||||
|
||||
html-entities:
|
||||
title: Escape html entities
|
||||
description: Escape or unescape html entities (replace <,>, &, " and \' to their html version)
|
||||
|
||||
json-prettify:
|
||||
title: JSON prettify and format
|
||||
description: Prettify your JSON string to a human friendly readable format.
|
||||
|
||||
docker-run-to-docker-compose-converter:
|
||||
title: Docker run to Docker compose converter
|
||||
description: Turns docker run commands into docker-compose files!
|
||||
|
||||
mac-address-lookup:
|
||||
title: MAC address lookup
|
||||
description: Find the vendor and manufacturer of a device by its MAC address.
|
||||
|
||||
mime-types:
|
||||
title: Mime types
|
||||
description: Convert mime types to extensions and vice-versa.
|
||||
|
||||
toml-to-json:
|
||||
title: TOML to JSON
|
||||
description: Parse and convert TOML to JSON.
|
||||
|
||||
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
|
||||
|
||||
qrcode-generator:
|
||||
title: QR Code generator
|
||||
description: Generate and download QR-code for an url or just a text and customize the background and foreground colors.
|
||||
|
||||
wifi-qrcode-generator:
|
||||
title: WiFi QR Code generator
|
||||
description: Generate and download QR-codes for quick connections to WiFi networks.
|
||||
|
||||
xml-formatter:
|
||||
title: XML formatter
|
||||
description: Prettify your XML string to a human friendly readable format.
|
||||
|
||||
temperature-converter:
|
||||
title: Temperature converter
|
||||
description: Temperature degrees conversions for Kelvin, Celsius, Fahrenheit, Rankine, Delisle, Newton, Réaumur and Rømer.
|
||||
|
||||
chmod-calculator:
|
||||
title: Chmod calculator
|
||||
description: Compute your chmod permissions and commands with this online chmod calculator.
|
||||
|
||||
rsa-key-pair-generator:
|
||||
title: RSA key pair generator
|
||||
description: Generate new random RSA private and public key pem certificates.
|
||||
|
||||
html-wysiwyg-editor:
|
||||
title: HTML WYSIWYG editor
|
||||
description: Online HTML editor with feature-rich WYSIWYG editor, get the source code of the content immediately.
|
||||
|
||||
yaml-to-toml:
|
||||
title: YAML to TOML
|
||||
description: Parse and convert YAML to TOML.
|
||||
|
||||
mac-address-generator:
|
||||
title: MAC address generator
|
||||
description: Enter the quantity and prefix. MAC addresses will be generated in your chosen case (uppercase or lowercase)
|
||||
|
||||
json-diff:
|
||||
title: JSON diff
|
||||
description: Compare two JSON objects and get the differences between them.
|
||||
|
||||
jwt-parser:
|
||||
title: JWT parser
|
||||
description: Parse and decode your JSON Web Token (jwt) and display its content.
|
||||
|
||||
date-converter:
|
||||
title: Date-time converter
|
||||
description: Convert date and time into the various different formats
|
||||
|
||||
phone-parser-and-formatter:
|
||||
title: Phone parser and formatter
|
||||
description: Parse, validate and format phone numbers. Get information about the phone number, like the country code, type, etc.
|
||||
|
||||
ipv4-subnet-calculator:
|
||||
title: IPv4 subnet calculator
|
||||
description: Parse your IPv4 CIDR blocks and get all the info you need about your sub network.
|
||||
|
||||
og-meta-generator:
|
||||
title: Open graph meta generator
|
||||
description: Generate open-graph and socials html meta tags for your website.
|
||||
|
||||
ipv6-ula-generator:
|
||||
title: IPv6 ULA generator
|
||||
description: Generate your own local, non-routable IP addresses on your network according to RFC4193.
|
||||
|
||||
hash-text:
|
||||
title: Hash text
|
||||
description: 'Hash a text string using the function you need : MD5, SHA1, SHA256, SHA224, SHA512, SHA384, SHA3 or RIPEMD160'
|
||||
|
||||
json-to-toml:
|
||||
title: JSON to TOML
|
||||
description: Parse and convert JSON to TOML.
|
||||
|
||||
device-information:
|
||||
title: Device information
|
||||
description: Get information about your current device (screen size, pixel-ratio, user agent, ...)
|
||||
|
||||
pdf-signature-checker:
|
||||
title: PDF signature checker
|
||||
description: Verify the signatures of a PDF file. A signed PDF file contains one or more signatures that may be used to determine whether the contents of the file have been altered since the file was signed.
|
||||
|
||||
json-minify:
|
||||
title: JSON minify
|
||||
description: Minify and compress your JSON by removing unnecessary white spaces.
|
||||
|
||||
ulid-generator:
|
||||
title: ULID generator
|
||||
description: Generate random Universally Unique Lexicographically Sortable Identifier (ULID).
|
||||
|
||||
string-obfuscator:
|
||||
title: String obfuscator
|
||||
description: Obfuscate a string (like a secret, an IBAN, or a token) to make it shareable and identifiable without revealing its content.
|
||||
|
||||
base-converter:
|
||||
title: Integer base converter
|
||||
description: Convert number between different bases (decimal, hexadecimal, binary, octal, base64, ...)
|
||||
|
||||
yaml-to-json-converter:
|
||||
title: YAML to JSON converter
|
||||
description: Simply convert YAML to JSON with this live online converter.
|
||||
|
||||
uuid-generator:
|
||||
title: UUIDs generator
|
||||
description: A Universally Unique Identifier (UUID) is a 128-bit number used to identify information in computer systems. The number of possible UUIDs is 16^32, which is 2^128 or about 3.4x10^38 (which is a lot!).
|
||||
|
||||
ipv4-address-converter:
|
||||
title: Ipv4 address converter
|
||||
description: Convert an ip address into decimal, binary, hexadecimal or event in ipv6
|
||||
|
||||
text-statistics:
|
||||
title: Text statistics
|
||||
description: Get information about a text, the amount of characters, the amount of words, it\'s size, ...
|
||||
|
||||
text-to-nato-alphabet:
|
||||
title: Text to NATO alphabet
|
||||
description: Transform text into NATO phonetic alphabet for oral transmission.
|
||||
|
||||
basic-auth-generator:
|
||||
title: Basic auth generator
|
||||
description: Generate a base64 basic auth header from an username and a password.
|
||||
|
||||
text-to-unicode:
|
||||
title: Text to Unicode
|
||||
description: Parse and convert text to unicode and vice-versa
|
||||
|
||||
ipv4-range-expander:
|
||||
title: IPv4 range expander
|
||||
description: Given a start and an end IPv4 address this tool calculates a valid IPv4 network with its CIDR notation.
|
||||
|
||||
text-diff:
|
||||
title: Text diff
|
||||
description: Compare two texts and see the differences between them.
|
||||
|
||||
otp-generator:
|
||||
title: OTP code generator
|
||||
description: Generate and validate time-based OTP (one time password) for multi-factor authentication.
|
||||
|
||||
url-encoder:
|
||||
title: Encode/decode url formatted strings
|
||||
description: Encode to url-encoded format (also known as "percent-encoded") or decode from it.
|
||||
|
||||
text-to-binary:
|
||||
title: Text to ASCII binary
|
||||
description: Convert text to its ASCII binary representation and vice versa.
|
||||
|
@ -63,3 +63,19 @@ tools:
|
||||
measurement: Mesure
|
||||
text: Texte
|
||||
data: Données
|
||||
|
||||
token-generator:
|
||||
title: Générateur de token
|
||||
description: >-
|
||||
Génère une chaîne aléatoire avec les caractères que vous voulez, lettres
|
||||
majuscules ou minuscules, chiffres et/ou symboles.
|
||||
uppercase: Majuscules (ABC...)
|
||||
lowercase: Minuscules (abc...)
|
||||
numbers: Chiffres (123...)
|
||||
symbols: Symboles (!-;...)
|
||||
button:
|
||||
copy: Copier
|
||||
refresh: Rafraichir
|
||||
copied: Le token a été copié
|
||||
length: Longueur
|
||||
tokenPlaceholder: Le token...
|
||||
|
382
locales/vi.yml
Normal file
382
locales/vi.yml
Normal file
@ -0,0 +1,382 @@
|
||||
home:
|
||||
categories:
|
||||
newestTools: Công cụ mới nhất
|
||||
favoriteTools: 'Công cụ yêu thích của bạn'
|
||||
allTools: 'Tất cả công cụ'
|
||||
subtitle: 'Công cụ cho nhà phát triển.'
|
||||
toggleMenu: 'Chuyển đổi menu'
|
||||
home: Trang chủ
|
||||
uiLib: 'Thư viện UI'
|
||||
support: 'Hỗ trợ phát triển IT Tools'
|
||||
buyMeACoffee: 'Ủng hộ tác giả'
|
||||
follow:
|
||||
title: 'Bạn thích IT-tools?'
|
||||
p1: 'Hãy cho chúng tôi một ngôi sao trên'
|
||||
githubRepository: 'Kho GitHub IT-Tools'
|
||||
p2: 'hoặc theo dõi chúng tôi trên'
|
||||
twitterAccount: 'Tài khoản Twitter IT-Tools'
|
||||
thankYou: 'Cảm ơn bạn!'
|
||||
nav:
|
||||
github: 'Kho GitHub'
|
||||
githubRepository: 'Kho GitHub IT-Tools'
|
||||
twitter: 'Tài khoản Twitter'
|
||||
twitterAccount: 'Tài khoản Twitter IT Tools'
|
||||
about: 'Về IT-Tools'
|
||||
aboutLabel: 'Giới thiệu'
|
||||
darkMode: 'Chế độ tối'
|
||||
lightMode: 'Chế độ sáng'
|
||||
mode: 'Chuyển đổi chế độ tối/sáng'
|
||||
about:
|
||||
content: >
|
||||
# Về IT-Tools
|
||||
|
||||
Website tuyệt vời này, được tạo ra bằng ❤ bởi [Corentin Thomasset](https://github.com/CorentinTh), tổng hợp các công cụ hữu ích cho nhà phát triển và những người làm việc trong lĩnh vực IT. Nếu bạn thấy nó hữu ích, xin đừng ngần ngại chia sẻ cho những người mà bạn nghĩ sẽ thấy nó hữu ích và đừng quên đánh dấu nó trong thanh lối tắt của bạn!
|
||||
|
||||
IT Tools là mã nguồn mở (dưới giấy phép MIT) và miễn phí, và sẽ luôn như vậy, nhưng tôi phải trả tiền để lưu trữ và gia hạn tên miền. Nếu bạn muốn hỗ trợ công việc của tôi, và khích lệ tôi thêm nhiều công cụ hơn, hãy xem xét hỗ trợ bằng cách [tài trợ cho tôi](https://www.buymeacoffee.com/cthmsst).
|
||||
|
||||
## Công nghệ
|
||||
|
||||
IT Tools được tạo ra bằng Vue.js (Vue 3) với thư viện thành phần Naive UI và được lưu trữ và triển khai liên tục bởi Vercel. Các thư viện mã nguồn mở của bên thứ ba được sử dụng trong một số công cụ, bạn có thể tìm danh sách đầy đủ trong file [package.json](https://github.com/CorentinTh/it-tools/blob/main/package.json) của kho lưu trữ.
|
||||
|
||||
## Phát hiện lỗi? Một công cụ bị thiếu?
|
||||
|
||||
Nếu bạn cần một công cụ hiện không có ở đây, và bạn nghĩ rằng nó có thể hữu ích, bạn được chào đón để gửi một yêu cầu tính năng trong [phần vấn đề](https://github.com/CorentinTh/it-tools/issues/new/choose) trong kho GitHub.
|
||||
|
||||
Và nếu bạn phát hiện ra một lỗi, hoặc điều gì đó không hoạt động như mong đợi, xin vui lòng gửi báo cáo lỗi trong [phần vấn đề](https://github.com/CorentinTh/it-tools/issues/new/choose) trong kho GitHub.
|
||||
|
||||
404:
|
||||
notFound: '404 Không Tìm Thấy'
|
||||
sorry: 'Xin lỗi, trang này dường như không tồn tại'
|
||||
maybe: 'Lỗi xảy ra có thể do bộ nhớ đệm, hãy (CTRL + F5) để tải lại trang?'
|
||||
backHome: 'Quay về trang chủ'
|
||||
favoriteButton:
|
||||
remove: 'Xóa khỏi mục yêu thích'
|
||||
add: 'Thêm vào mục yêu thích'
|
||||
toolCard:
|
||||
new: Mới
|
||||
search:
|
||||
label: Tìm kiếm
|
||||
tools:
|
||||
categories:
|
||||
favorite-tools: 'Công cụ yêu thích của bạn'
|
||||
crypto: Mã hóa
|
||||
converter: Chuyển đổi
|
||||
web: Web
|
||||
images and videos: 'Hình ảnh & Video'
|
||||
development: Phát triển
|
||||
network: Mạng
|
||||
math: Toán học
|
||||
measurement: Đo lường
|
||||
text: Văn bản
|
||||
data: Dữ liệu
|
||||
|
||||
password-strength-analyser:
|
||||
title: Bộ phân tích độ mạnh mật khẩu
|
||||
description: Khám phá độ mạnh của mật khẩu của bạn với công cụ phân tích độ mạnh mật khẩu chỉ chạy trên phía máy khách và ước tính thời gian phá mật khẩu.
|
||||
|
||||
chronometer:
|
||||
title: Đồng hồ bấm giờ
|
||||
description: Giám sát thời gian của một sự việc. Cơ bản là một đồng hồ bấm giờ với các tính năng đơn giản.
|
||||
|
||||
token-generator:
|
||||
title: Trình tạo mã thông báo
|
||||
description: Tạo chuỗi ngẫu nhiên với các ký tự bạn muốn, chữ hoa hoặc chữ thường, số và/hoặc ký tự đặc biệt.
|
||||
|
||||
uppercase: Chữ hoa (ABC...)
|
||||
lowercase: Chữ thường (abc...)
|
||||
numbers: Số (123...)
|
||||
symbols: Ký tự đặc biệt (!-;...)
|
||||
length: Độ dài
|
||||
tokenPlaceholder: 'Mã thông báo...'
|
||||
copied: Mã thông báo đã được sao chép vào clipboard
|
||||
button:
|
||||
copy: Sao chép
|
||||
refresh: Làm mới
|
||||
|
||||
percentage-calculator:
|
||||
title: Máy tính phần trăm
|
||||
description: Dễ dàng tính toán phần trăm từ một giá trị đến giá trị khác, hoặc từ một phần trăm đến một giá trị.
|
||||
|
||||
svg-placeholder-generator:
|
||||
title: Trình tạo hình ảnh SVG giả định
|
||||
description: Tạo hình ảnh svg để sử dụng làm giả định trong ứng dụng của bạn.
|
||||
|
||||
json-to-csv:
|
||||
title: Chuyển đổi JSON thành CSV
|
||||
description: Chuyển đổi JSON thành CSV với việc tự động phát hiện tiêu đề.
|
||||
|
||||
camera-recorder:
|
||||
title: Ghi lại camera
|
||||
description: Chụp ảnh hoặc quay video từ webcam hoặc máy ảnh của bạn.
|
||||
keycode-info:
|
||||
title: Thông tin Keycode
|
||||
description: Tìm mã keycode, mã, vị trí và các phím điều khiển của bất kỳ phím nào được nhấn.
|
||||
|
||||
emoji-picker:
|
||||
title: Bộ chọn biểu tượng cảm xúc
|
||||
description: Sao chép và dán biểu tượng cảm xúc một cách dễ dàng và nhận giá trị unicode và mã điểm của mỗi biểu tượng cảm xúc.
|
||||
|
||||
color-converter:
|
||||
title: Trình chuyển đổi màu
|
||||
description: Chuyển đổi màu giữa các định dạng khác nhau (hex, rgb, hsl và tên css)
|
||||
|
||||
bcrypt:
|
||||
title: Bcrypt
|
||||
description: Mã hóa và so sánh chuỗi văn bản sử dụng bcrypt. Bcrypt là một hàm mã hóa mật khẩu dựa trên thuật toán Blowfish.
|
||||
crontab-generator:
|
||||
title: Trình tạo Crontab
|
||||
description: Xác thực và tạo crontab và lấy mô tả đọc được của lịch trình cron.
|
||||
http-status-codes:
|
||||
title: Mã trạng thái HTTP
|
||||
description: Danh sách tất cả các mã trạng thái HTTP, tên và ý nghĩa của chúng.
|
||||
|
||||
sql-prettify:
|
||||
title: Định dạng và làm đẹp SQL
|
||||
description: Định dạng và làm đẹp các truy vấn SQL của bạn trực tuyến (hỗ trợ nhiều ngôn ngữ SQL khác nhau).
|
||||
|
||||
benchmark-builder:
|
||||
title: Trình tạo bảng đánh giá
|
||||
description: Dễ dàng so sánh thời gian thực thi của các nhiệm vụ với trình tạo bảng đánh giá trực tuyến đơn giản này.
|
||||
git-memo:
|
||||
title: Lệnh Git
|
||||
description: Git là một phần mềm quản lý phiên bản phân tán. Với bảng ghi chú này, bạn sẽ có thể truy cập nhanh vào các lệnh Git phổ biến nhất.
|
||||
|
||||
slugify-string:
|
||||
title: Chuyển đổi chuỗi thành slug
|
||||
description: Biến đổi chuỗi thành dạng an toàn để sử dụng trong URL, tên file và ID.
|
||||
|
||||
encryption:
|
||||
title: Mã hóa / giải mã văn bản
|
||||
description: Mã hóa và giải mã văn bản rõ bằng cách sử dụng thuật toán mã hóa như AES, TripleDES, Rabbit hoặc RC4.
|
||||
|
||||
random-port-generator:
|
||||
title: Trình tạo số cổng ngẫu nhiên
|
||||
description: Tạo số cổng ngẫu nhiên nằm ngoài phạm vi của các cổng "biết được" (0-1023).
|
||||
|
||||
yaml-prettify:
|
||||
title: Định dạng và làm đẹp YAML
|
||||
description: Định dạng chuỗi YAML của bạn thành một định dạng dễ đọc và thân thiện với con người.
|
||||
|
||||
eta-calculator:
|
||||
title: Máy tính ETA
|
||||
description: Một máy tính ETA (Thời gian dự kiến đến) để biết thời gian kết thúc xấp xỉ của một nhiệm vụ, ví dụ như thời điểm kết thúc của một quá trình tải xuống.
|
||||
|
||||
roman-numeral-converter:
|
||||
title: Bộ chuyển đổi số La Mã
|
||||
description: Chuyển đổi số La Mã thành số và chuyển đổi số thành số La Mã.
|
||||
|
||||
hmac-generator:
|
||||
title: Máy tạo HMAC
|
||||
description: Tính toán mã xác thực thông điệp dựa trên hash (HMAC) sử dụng một khóa bí mật và hàm băm yêu thích của bạn.
|
||||
|
||||
bip39-generator:
|
||||
title: Trình tạo BIP39 passphrase
|
||||
description: Tạo BIP39 passphrase từ mnemonic hiện có hoặc ngẫu nhiên, hoặc lấy mnemonic từ passphrase.
|
||||
base64-file-converter:
|
||||
title: Trình chuyển đổi tệp Base64
|
||||
description: Chuyển đổi chuỗi, tệp hoặc hình ảnh thành mã Base64.
|
||||
list-converter:
|
||||
title: Trình chuyển đổi danh sách
|
||||
description: Công cụ này có thể xử lý dữ liệu dựa trên cột và áp dụng các thay đổi khác nhau (đảo ngược, thêm tiền tố và hậu tố, đảo danh sách, sắp xếp danh sách, giảm giá trị thành chữ thường, cắt giá trị) cho mỗi hàng.
|
||||
|
||||
base64-string-converter:
|
||||
title: Trình mã hóa/giải mã chuỗi Base64
|
||||
description: Đơn giản mã hóa và giải mã chuỗi thành mã Base64.
|
||||
toml-to-yaml:
|
||||
title: Chuyển đổi TOML thành YAML
|
||||
description: Phân tích và chuyển đổi TOML thành YAML.
|
||||
|
||||
math-evaluator:
|
||||
title: Trình đánh giá toán học
|
||||
description: Một máy tính để tính toán biểu thức toán học. Bạn có thể sử dụng các hàm như sqrt, cos, sin, abs, v.v.
|
||||
|
||||
json-to-yaml-converter:
|
||||
title: Chuyển đổi JSON sang YAML
|
||||
description: Chuyển đổi đơn giản JSON sang YAML với công cụ chuyển đổi trực tuyến này.
|
||||
|
||||
url-parser:
|
||||
title: Trình phân tích URL
|
||||
description: Phân tích một chuỗi URL để lấy tất cả các phần khác nhau (giao thức, nguồn gốc, tham số, cổng, tên người dùng-mật khẩu, ...)
|
||||
|
||||
iban-validator-and-parser:
|
||||
title: Kiểm tra và phân tích số IBAN
|
||||
description: Xác thực và phân tích số IBAN. Kiểm tra tính hợp lệ của IBAN và lấy thông tin về quốc gia, BBAN, xem có phải là QR-IBAN và định dạng thân thiện của IBAN.
|
||||
|
||||
user-agent-parser:
|
||||
title: Trình phân tích User-agent
|
||||
description: Phát hiện và phân tích trình duyệt, engine, hệ điều hành, CPU và kiểu/mô hình thiết bị từ chuỗi user-agent.
|
||||
|
||||
numeronym-generator:
|
||||
title: Trình tạo Numeronym
|
||||
description: Numeronym là một từ mà một số được sử dụng để tạo thành một từ viết tắt. Ví dụ, "i18n" là một numeronym của "internationalization" trong đó số 18 đại diện cho số chữ cái giữa chữ i đầu tiên và chữ n cuối cùng trong từ.
|
||||
|
||||
case-converter:
|
||||
title: Chuyển đổi chữ hoa/chữ thường
|
||||
description: Thay đổi kiểu chữ của một chuỗi và chọn giữa các định dạng khác nhau
|
||||
html-entities:
|
||||
title: Thay thế các ký tự HTML
|
||||
description: Thay thế hoặc bỏ thẻ các ký tự HTML (thay thế <,>, &, " và \' thành phiên bản HTML tương ứng)
|
||||
|
||||
json-prettify:
|
||||
title: Định dạng và làm đẹp JSON
|
||||
description: Định dạng chuỗi JSON của bạn thành một định dạng dễ đọc và thân thiện với con người.
|
||||
|
||||
docker-run-to-docker-compose-converter:
|
||||
title: Chuyển đổi lệnh docker run thành tệp docker-compose
|
||||
description: Chuyển đổi các lệnh docker run thành tệp docker-compose!
|
||||
|
||||
mac-address-lookup:
|
||||
title: Tra cứu địa chỉ MAC
|
||||
description: Tìm nhà sản xuất và nhà cung cấp của thiết bị dựa trên địa chỉ MAC.
|
||||
|
||||
mime-types:
|
||||
title: Loại Mime
|
||||
description: Chuyển đổi loại mime thành phần mở rộng và ngược lại.
|
||||
|
||||
toml-to-json:
|
||||
title: Chuyển đổi TOML thành JSON
|
||||
description: Phân tích và chuyển đổi TOML thành JSON.
|
||||
|
||||
lorem-ipsum-generator:
|
||||
title: Máy tạo văn bản Lorem ipsum
|
||||
description: Lorem ipsum là một đoạn văn bản giả được sử dụng phổ biến để thể hiện hình thức của một tài liệu hoặc một kiểu chữ mà không cần dựa vào nội dung có ý nghĩa
|
||||
|
||||
qrcode-generator:
|
||||
title: Tạo mã QR
|
||||
description: Tạo và tải xuống mã QR cho một URL hoặc chỉ một đoạn văn bản và tùy chỉnh màu nền và màu chữ.
|
||||
|
||||
wifi-qrcode-generator:
|
||||
title: Tạo mã QR WiFi
|
||||
description: Tạo và tải xuống mã QR để kết nối nhanh đến mạng WiFi.
|
||||
|
||||
xml-formatter:
|
||||
title: Định dạng XML
|
||||
description: Định dạng chuỗi XML của bạn thành một định dạng dễ đọc và thân thiện với con người.
|
||||
|
||||
temperature-converter:
|
||||
title: Bộ chuyển đổi nhiệt độ
|
||||
description: Chuyển đổi độ nhiệt độ cho Kelvin, Celsius, Fahrenheit, Rankine, Delisle, Newton, Réaumur và Rømer.
|
||||
|
||||
chmod-calculator:
|
||||
title: Máy tính Chmod
|
||||
description: Tính toán quyền và lệnh chmod của bạn với máy tính Chmod trực tuyến này.
|
||||
rsa-key-pair-generator:
|
||||
title: Trình tạo cặp khóa RSA
|
||||
description: Tạo các chứng chỉ pem khóa riêng tư và khóa công khai RSA ngẫu nhiên mới.
|
||||
|
||||
html-wysiwyg-editor:
|
||||
title: Trình soạn thảo HTML WYSIWYG
|
||||
description: Trình soạn thảo HTML trực tuyến với trình soạn thảo WYSIWYG đa chức năng, lấy mã nguồn của nội dung ngay lập tức.
|
||||
|
||||
yaml-to-toml:
|
||||
title: YAML sang TOML
|
||||
description: Phân tích và chuyển đổi YAML sang TOML.
|
||||
|
||||
mac-address-generator:
|
||||
title: Trình tạo địa chỉ MAC
|
||||
description: Nhập số lượng và tiền tố. Địa chỉ MAC sẽ được tạo ra theo kiểu chữ hoa hoặc chữ thường theo lựa chọn của bạn
|
||||
|
||||
json-diff:
|
||||
title: So sánh JSON
|
||||
description: So sánh hai đối tượng JSON và lấy ra sự khác biệt giữa chúng.
|
||||
|
||||
jwt-parser:
|
||||
title: Giải mã JWT
|
||||
description: Giải mã và hiển thị nội dung của JSON Web Token (jwt).
|
||||
|
||||
date-converter:
|
||||
title: Chuyển đổi ngày-tháng
|
||||
description: Chuyển đổi ngày và thời gian sang các định dạng khác nhau
|
||||
|
||||
phone-parser-and-formatter:
|
||||
title: Trình phân tích và định dạng số điện thoại
|
||||
description: Phân tích, xác thực và định dạng số điện thoại. Lấy thông tin về số điện thoại, như mã quốc gia, loại, v.v.
|
||||
|
||||
ipv4-subnet-calculator:
|
||||
title: Máy tính mạng con IPv4
|
||||
description: Phân tích các khối CIDR IPv4 của bạn và nhận thông tin về mạng con của bạn.
|
||||
|
||||
og-meta-generator:
|
||||
title: Trình tạo meta Open Graph
|
||||
description: Tạo các thẻ meta HTML Open Graph và mạng xã hội cho trang web của bạn.
|
||||
|
||||
ipv6-ula-generator:
|
||||
title: Trình tạo địa chỉ IPv6 ULA
|
||||
description: Tạo địa chỉ IP cục bộ, không thể định tuyến trên mạng của bạn theo RFC4193.
|
||||
|
||||
hash-text:
|
||||
title: Mã hóa văn bản
|
||||
description: 'Mã hóa một chuỗi văn bản bằng cách sử dụng các hàm bạn cần: MD5, SHA1, SHA256, SHA224, SHA512, SHA384, SHA3 hoặc RIPEMD160'
|
||||
json-to-toml:
|
||||
title: Chuyển đổi JSON sang TOML
|
||||
description: Phân tích và chuyển đổi JSON sang TOML.
|
||||
|
||||
device-information:
|
||||
title: Thông tin thiết bị
|
||||
description: Lấy thông tin về thiết bị hiện tại của bạn (kích thước màn hình, tỷ lệ pixel, user agent, ...)
|
||||
|
||||
pdf-signature-checker:
|
||||
title: Kiểm tra chữ ký PDF
|
||||
description: Xác minh chữ ký của một tệp PDF. Một tệp PDF đã được ký có chứa một hoặc nhiều chữ ký có thể được sử dụng để xác định xem nội dung của tệp đã được thay đổi kể từ khi tệp được ký.
|
||||
|
||||
json-minify:
|
||||
title: Giảm kích thước JSON
|
||||
description: Giảm kích thước và nén JSON của bạn bằng cách loại bỏ khoảng trắng không cần thiết.
|
||||
|
||||
ulid-generator:
|
||||
title: Tạo ULID
|
||||
description: Tạo ngẫu nhiên mã định danh duy nhất có thể sắp xếp theo thứ tự từ điển (ULID).
|
||||
string-obfuscator:
|
||||
title: Mã hóa chuỗi
|
||||
description: Mã hóa một chuỗi (như một bí mật, một IBAN hoặc một mã thông báo) để có thể chia sẻ và nhận dạng mà không tiết lộ nội dung.
|
||||
|
||||
base-converter:
|
||||
title: Chuyển đổi cơ số số nguyên
|
||||
description: Chuyển đổi số giữa các cơ số khác nhau (thập phân, thập lục phân, nhị phân, bát phân, base64, ...)
|
||||
|
||||
yaml-to-json-converter:
|
||||
title: Trình chuyển đổi YAML sang JSON
|
||||
description: Chuyển đổi YAML sang JSON một cách đơn giản với công cụ chuyển đổi trực tuyến này.
|
||||
|
||||
uuid-generator:
|
||||
title: Trình tạo UUID
|
||||
description: Một UUID (Universally Unique Identifier) là một số 128 bit được sử dụng để xác định thông tin trong hệ thống máy tính. Số lượng UUID có thể có là 16^32, tương đương với 2^128 hoặc khoảng 3.4x10^38 (rất lớn!).
|
||||
|
||||
ipv4-address-converter:
|
||||
title: Chuyển đổi địa chỉ Ipv4
|
||||
description: Chuyển đổi địa chỉ ip thành số thập phân, nhị phân, thập lục phân hoặc thậm chí thành ipv6
|
||||
|
||||
text-statistics:
|
||||
title: Thống kê văn bản
|
||||
description: Lấy thông tin về một văn bản, số ký tự, số từ, kích thước của nó, ...
|
||||
|
||||
text-to-nato-alphabet:
|
||||
title: Chuyển đổi văn bản thành bảng chữ cái NATO
|
||||
description: Chuyển đổi văn bản thành bảng chữ cái phiên âm NATO để truyền tải bằng miệng.
|
||||
|
||||
basic-auth-generator:
|
||||
title: Tạo mã xác thực cơ bản
|
||||
description: Tạo một tiêu đề xác thực cơ bản base64 từ tên người dùng và mật khẩu.
|
||||
text-to-unicode:
|
||||
title: Chuyển đổi văn bản thành Unicode
|
||||
description: Phân tích và chuyển đổi văn bản thành Unicode và ngược lại
|
||||
|
||||
ipv4-range-expander:
|
||||
title: Mở rộng dải IPv4
|
||||
description: Cho một địa chỉ IPv4 bắt đầu và kết thúc, công cụ này tính toán một mạng IPv4 hợp lệ với ký hiệu CIDR của nó.
|
||||
|
||||
text-diff:
|
||||
title: So sánh văn bản
|
||||
description: So sánh hai văn bản và xem sự khác biệt giữa chúng.
|
||||
|
||||
otp-generator:
|
||||
title: Tạo mã OTP
|
||||
description: Tạo và xác thực mã OTP (mật khẩu một lần) dựa trên thời gian cho xác thực đa yếu tố.
|
||||
|
||||
url-encoder:
|
||||
title: Mã hóa/giải mã chuỗi định dạng URL
|
||||
description: Mã hóa thành định dạng URL (còn được gọi là "percent-encoded") hoặc giải mã từ đó.
|
||||
|
||||
text-to-binary:
|
||||
title: Chuyển đổi văn bản thành nhị phân ASCII
|
||||
description: Chuyển đổi văn bản thành biểu diễn nhị phân ASCII của nó và ngược lại.
|
318
locales/zh.yml
318
locales/zh.yml
@ -69,3 +69,321 @@ tools:
|
||||
measurement: '测量'
|
||||
text: '文本'
|
||||
data: '数据'
|
||||
|
||||
password-strength-analyser:
|
||||
title: 密码强度分析仪
|
||||
description: 使用此密码强度分析器和破解时间估计工具来发现密码的强度。
|
||||
|
||||
chronometer:
|
||||
title: 计时器
|
||||
description: 监控事物的持续时间。基本上是一种具有简单计时器功能的计时器。
|
||||
token-generator:
|
||||
title: Token 生成器
|
||||
description: 使用您想要的字符、大写或小写字母、数字和/或符号生成随机字符串。
|
||||
|
||||
uppercase: '大写 (ABC...)'
|
||||
lowercase: '小写 (abc...)'
|
||||
numbers: '数字 (123...)'
|
||||
symbols: '符号 (!-;...)'
|
||||
length: '长度'
|
||||
tokenPlaceholder: '令牌...'
|
||||
copied: 复制到剪贴板
|
||||
button:
|
||||
copy: 复制
|
||||
refresh: 刷新
|
||||
percentage-calculator:
|
||||
title: 百分比计算器
|
||||
description: 轻松计算从一个值到另一个值的百分比,或从百分比到值的百分比。
|
||||
|
||||
svg-placeholder-generator:
|
||||
title: SVG 占位符生成器
|
||||
description: 生成 svg 图像以用作应用程序中的占位符。
|
||||
|
||||
json-to-csv:
|
||||
title: JSON 转 CSV
|
||||
description: 使用自动标头检测将JSON转换为CSV。
|
||||
|
||||
camera-recorder:
|
||||
title: 摄像机记录器
|
||||
description: 从网络摄像头或照相机拍摄照片或录制视频。
|
||||
|
||||
keycode-info:
|
||||
title: Keycode 信息
|
||||
description: 查找任何按下的键的javascript键代码、代码、位置和修饰符。
|
||||
|
||||
emoji-picker:
|
||||
title: Emoji 选择器
|
||||
description: 轻松复制和粘贴Emoji表情符号,并获得每个表情符号的unicode和code points值.
|
||||
|
||||
color-converter:
|
||||
title: Color 选择器
|
||||
description: 在不同格式(十六进制、rgb、hsl和css名称)之间转换颜色
|
||||
bcrypt:
|
||||
title: 加密
|
||||
description: 使用bcrypt对文本字符串进行哈希和比较。Bcrypt是一个基于Blowfish密码的密码哈希函数。
|
||||
|
||||
crontab-generator:
|
||||
title: Crontab 表达式生成
|
||||
description: 验证并生成crontab,并获取cron调度的可读描述。
|
||||
|
||||
http-status-codes:
|
||||
title: HTTP 状态码
|
||||
description: 所有HTTP状态的列表对其名称和含义解释。
|
||||
|
||||
sql-prettify:
|
||||
title: SQL 美化和格式化
|
||||
description: 在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。
|
||||
|
||||
benchmark-builder:
|
||||
title: 基准生成器
|
||||
description: 简单的在线基准构建器可以轻松比较任务的执行时间。
|
||||
|
||||
git-memo:
|
||||
title: Git 备忘录
|
||||
description: Git是一种去中心化的版本管理软件。使用此备忘单,您可以快速访问最常见的git命令.
|
||||
|
||||
slugify-string:
|
||||
title: 打乱字符串
|
||||
description: 确保字符串 url、文件名和 id 安全。
|
||||
|
||||
encryption:
|
||||
title: 加密/解密文本
|
||||
description: 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。
|
||||
|
||||
random-port-generator:
|
||||
title: 随机端口生成
|
||||
description: 生成“已知”端口范围(0-1023)之外的随机端口号。
|
||||
|
||||
yaml-prettify:
|
||||
title: YAML美化和格式化
|
||||
description: 将YAML字符串修饰为友好的可读格式。
|
||||
|
||||
eta-calculator:
|
||||
title: ETA 计算器
|
||||
description: ETA(估计到达时间)计算器,用于知道任务的近似结束时间,例如下载的结束时刻。
|
||||
|
||||
roman-numeral-converter:
|
||||
title: 罗马数字转换器
|
||||
description: 将罗马数字转换为数字,并将数字转换为罗马数字。
|
||||
|
||||
hmac-generator:
|
||||
title: Hmac 生成器
|
||||
description: 使用密钥和您喜欢的哈希函数计算基于哈希的消息身份验证代码(HMAC)。
|
||||
|
||||
bip39-generator:
|
||||
title: BIP39密码生成器
|
||||
description: 从现有或随机助记符生成BIP39密码短语,或从密码短语获取助记符。
|
||||
|
||||
base64-file-converter:
|
||||
title: Base64 文件转换器
|
||||
description: 将字符串、文件或图像转换为其 Base64 表示形式。
|
||||
list-converter:
|
||||
title: List 转换器
|
||||
description: 该工具可以处理基于数组的数据,并将各种更改(转置、添加前缀和后缀、反向列表、排序列表、小写值、截断值)应用于每一行。
|
||||
|
||||
base64-string-converter:
|
||||
title: Base64 字符串编码/解码
|
||||
description: 将字符串编码和解码为其 Base64 格式表示形式即可。
|
||||
|
||||
toml-to-yaml:
|
||||
title: TOML 到 YAML
|
||||
description: Parse and convert TOML to YAML.
|
||||
|
||||
math-evaluator:
|
||||
title: 数学计算器
|
||||
description: 计算数学表达式的计算器。您可以使用sqrt、cos、sin、abs等函数。
|
||||
|
||||
json-to-yaml-converter:
|
||||
title: JSON到YAML转换器
|
||||
description: 在线转换将JSON转换为YAML。
|
||||
|
||||
url-parser:
|
||||
title: Url分析器
|
||||
description: 解析url字符串以获取所有不同的部分(协议、来源、参数、端口、用户名密码…)
|
||||
|
||||
iban-validator-and-parser:
|
||||
title: IBAN验证器和解析器
|
||||
description: 验证和分析IBAN编号。检查IBAN是否有效,并获取国家BBAN,如果它是QR-IBAN和IBAN友好格式。
|
||||
|
||||
user-agent-parser:
|
||||
title: 用户代理分析器
|
||||
description: 从用户代理字符串中检测和分析浏览器、引擎、操作系统、CPU和设备类型/型号。
|
||||
|
||||
numeronym-generator:
|
||||
title: 数字名称生成器
|
||||
description: 数字名是一个用数字构成缩写的词。例如,“i18n”是“国际化”的名词,其中18表示单词中第一个i和最后一个n之间的字母数。
|
||||
|
||||
case-converter:
|
||||
title: 大小写转换
|
||||
description: 更改字符串的大小写并在不同格式之间进行选择
|
||||
|
||||
html-entities:
|
||||
title: 转义html实体
|
||||
description: 转义或unescape html实体(将<、>、&、“和\'替换为其html版本)
|
||||
|
||||
json-prettify:
|
||||
title: JSON美化和格式化
|
||||
description: 将JSON字符串修饰为友好的可读格式。
|
||||
|
||||
docker-run-to-docker-compose-converter:
|
||||
title: Docker Run 到 docker-compose 转换器
|
||||
description: 将 docker run 命令行转换为 docker-compose 文件!
|
||||
|
||||
mac-address-lookup:
|
||||
title: MAC地址查找
|
||||
description: 通过设备的MAC地址查找设备的供应商和制造商。
|
||||
|
||||
mime-types:
|
||||
title: mime类型
|
||||
description: 将mime类型转换为扩展,反之亦然。
|
||||
|
||||
toml-to-json:
|
||||
title: TOML 到 JSON
|
||||
description: 解析TOML并将其转换为JSON。
|
||||
|
||||
lorem-ipsum-generator:
|
||||
title: Lorem ipsum生成器
|
||||
description: Lorem ipsum是一种占位符文本,通常用于演示文档或字体的视觉形式,而不依赖于有意义的内容
|
||||
|
||||
qrcode-generator:
|
||||
title: 二维码生成器
|
||||
description: 生成并下载url或文本的QR代码,并自定义背景和前景颜色。
|
||||
|
||||
wifi-qrcode-generator:
|
||||
title: WiFi 二维码生成器
|
||||
description: 生成和下载QR码以快速连接到WiFi网络。
|
||||
|
||||
xml-formatter:
|
||||
title: XML 格式化
|
||||
description: 将XML字符串修饰为友好的可读格式。
|
||||
|
||||
temperature-converter:
|
||||
title: 温度转换器
|
||||
description: 开尔文、摄氏度、华氏度、兰金、德莱尔、牛顿、雷奥穆尔和罗默温度度数转换。
|
||||
|
||||
chmod-calculator:
|
||||
title: Chmod 计算器
|
||||
description: 使用此在线的chmod计算器计算chmod权限和命令。
|
||||
|
||||
rsa-key-pair-generator:
|
||||
title: RSA密钥对生成器
|
||||
description: 生成新的随机RSA私钥和公钥pem证书。
|
||||
|
||||
html-wysiwyg-editor:
|
||||
title: HTML所见即所得编辑器
|
||||
description: 在线HTML编辑器具有功能丰富的所见即所得编辑器,立即获得内容的源代码。
|
||||
|
||||
yaml-to-toml:
|
||||
title: YAML 到 TOML
|
||||
description: 解析YAML并将其转换为TOML。
|
||||
|
||||
mac-address-generator:
|
||||
title: MAC 地址生成器
|
||||
description: 输入数量和前缀。MAC地址将以您选择的大小写(大写或小写)生成
|
||||
|
||||
json-diff:
|
||||
title: JSON 差异比较
|
||||
description: 比较两个JSON对象并获得它们之间的差异。
|
||||
jwt-parser:
|
||||
title: JWT 解析器
|
||||
description: 解析和解码JSON Web Token(jwt)并显示其内容。
|
||||
|
||||
date-converter:
|
||||
title: 日期时间转换器
|
||||
description: 将日期和时间转换为各种不同的格式
|
||||
|
||||
phone-parser-and-formatter:
|
||||
title: 电话分析器和格式化程序
|
||||
description: 解析、验证和格式化电话号码。获取有关电话号码的信息,如国家/地区代码、类型等。
|
||||
|
||||
ipv4-subnet-calculator:
|
||||
title: IPv4子网计算器
|
||||
description: 解析IPv4 CIDR块,并获取有关子网络的所有所需信息。
|
||||
|
||||
og-meta-generator:
|
||||
title: 开放式图形元生成器
|
||||
description: 为您的网站生成开放式图形和社交html元标记。
|
||||
|
||||
ipv6-ula-generator:
|
||||
title: IPv6 ULA生成器
|
||||
description: 根据RFC4193在网络上生成您自己的本地不可路由IP地址。
|
||||
|
||||
hash-text:
|
||||
title: Hash 文本
|
||||
description: '使用所需的函数哈希文本字符串:MD5、SHA1、SHA256、SHA224、SHA512、SHA384、SHA3或RIPEMD160'
|
||||
|
||||
json-to-toml:
|
||||
title: JSON 转 TOML
|
||||
description: 解析JSON并将其转换为TOML。
|
||||
|
||||
device-information:
|
||||
title: 设备信息
|
||||
description: 获取有关当前设备的信息(屏幕大小、像素比率、用户代理…)
|
||||
|
||||
pdf-signature-checker:
|
||||
title: PDF签名检查器
|
||||
description: '验证PDF文件的签名。签名的PDF文件包含一个或多个签名,可用于确定文件的内容在签名后是否已被更改。'
|
||||
|
||||
json-minify:
|
||||
title: JSON 压缩
|
||||
description: 通过删除不必要的空白来缩小和压缩JSON。
|
||||
|
||||
ulid-generator:
|
||||
title: ULID 生成器
|
||||
description: 生成随机的通用唯一词典可排序标识符(ULID)。
|
||||
|
||||
string-obfuscator:
|
||||
title: 字符串混淆器
|
||||
description: 混淆字符串(如秘密、IBAN 或令牌),使其可共享和可识别,而不泄露其内容。
|
||||
|
||||
base-converter:
|
||||
title: 整数基转换器
|
||||
description: 在不同的基数(十进制、十六进制、二进制、八进制、base64…)之间转换数字
|
||||
|
||||
yaml-to-json-converter:
|
||||
title: YAML到JSON转换器
|
||||
description: 使用此在线转换器将YAML转换为JSON。
|
||||
|
||||
uuid-generator:
|
||||
title: UUIDs 生成器
|
||||
description: 通用唯一标识符(UUID)是一个128位数字,用于标识计算机系统中的信息。可能的UUID数量为16^32,即2^128或约3.4x10^38(这是一个很大的数字!)。
|
||||
|
||||
ipv4-address-converter:
|
||||
title: Ipv4地址转换器
|
||||
description: 在ipv6中,将ip地址转换为十进制、二进制、十六进制或事件
|
||||
|
||||
text-statistics:
|
||||
title: 文本统计
|
||||
description: 获取有关文本、字符数、字数、大小等的信息
|
||||
|
||||
text-to-nato-alphabet:
|
||||
title: 文本转北约字母表
|
||||
description: 将文本转换为北约拼音字母以进行口头传播。
|
||||
|
||||
basic-auth-generator:
|
||||
title: 基本身份验证生成器
|
||||
description: 从用户名和密码生成 base64 基本身份验证标头。
|
||||
|
||||
text-to-unicode:
|
||||
title: 文本转 Unicode
|
||||
description: 解析文本并将其转换为 unicode,反之亦然
|
||||
|
||||
ipv4-range-expander:
|
||||
title: IPv4范围扩展器
|
||||
description: 给定起始和结束IPv4地址,此工具使用其CIDR表示法计算有效的IPv4网络。
|
||||
|
||||
text-diff:
|
||||
title: 文本比较
|
||||
description: 比较两个文本并查看它们之间的差异。
|
||||
|
||||
otp-generator:
|
||||
title: OTP代码生成器
|
||||
description: 为多因素身份验证生成和验证基于时间的OTP(一次性密码)。
|
||||
|
||||
url-encoder:
|
||||
title: 编码/解码url格式的字符串
|
||||
description: 编码为url编码格式(也称为“百分比编码”)或从中解码。
|
||||
|
||||
text-to-binary:
|
||||
title: 文本到 ASCII 二进制
|
||||
description: 将文本转换为其 ASCII 二进制表示形式,反之亦然。
|
||||
|
@ -42,6 +42,7 @@
|
||||
"@tiptap/pm": "2.1.6",
|
||||
"@tiptap/starter-kit": "2.1.6",
|
||||
"@tiptap/vue-3": "2.0.3",
|
||||
"@types/figlet": "^1.5.8",
|
||||
"@vicons/material": "^0.12.0",
|
||||
"@vicons/tabler": "^0.12.0",
|
||||
"@vueuse/core": "^10.3.0",
|
||||
@ -59,6 +60,7 @@
|
||||
"decomposerize": "^1.3.0",
|
||||
"dompurify": "^3.0.6",
|
||||
"emojilib": "^3.0.10",
|
||||
"figlet": "^1.7.0",
|
||||
"figue": "^1.2.0",
|
||||
"fuse.js": "^6.6.2",
|
||||
"highlight.js": "^11.7.0",
|
||||
@ -87,7 +89,7 @@
|
||||
"unplugin-auto-import": "^0.16.4",
|
||||
"uuid": "^9.0.0",
|
||||
"vue": "^3.3.4",
|
||||
"vue-i18n": "^9.2.2",
|
||||
"vue-i18n": "^9.9.1",
|
||||
"vue-router": "^4.1.6",
|
||||
"vue-tsc": "^1.8.1",
|
||||
"xml-formatter": "^3.3.2",
|
||||
@ -96,7 +98,7 @@
|
||||
"devDependencies": {
|
||||
"@antfu/eslint-config": "^0.41.0",
|
||||
"@iconify-json/mdi": "^1.1.50",
|
||||
"@intlify/unplugin-vue-i18n": "^0.13.0",
|
||||
"@intlify/unplugin-vue-i18n": "^2.0.0",
|
||||
"@playwright/test": "^1.32.3",
|
||||
"@rushstack/eslint-patch": "^1.2.0",
|
||||
"@tsconfig/node18": "^18.2.0",
|
||||
|
165
pnpm-lock.yaml
165
pnpm-lock.yaml
@ -26,6 +26,9 @@ dependencies:
|
||||
'@tiptap/vue-3':
|
||||
specifier: 2.0.3
|
||||
version: 2.0.3(@tiptap/core@2.1.12)(@tiptap/pm@2.1.6)(vue@3.3.4)
|
||||
'@types/figlet':
|
||||
specifier: ^1.5.8
|
||||
version: 1.5.8
|
||||
'@vicons/material':
|
||||
specifier: ^0.12.0
|
||||
version: 0.12.0
|
||||
@ -77,6 +80,9 @@ dependencies:
|
||||
emojilib:
|
||||
specifier: ^3.0.10
|
||||
version: 3.0.10
|
||||
figlet:
|
||||
specifier: ^1.7.0
|
||||
version: 1.7.0
|
||||
figue:
|
||||
specifier: ^1.2.0
|
||||
version: 1.2.0
|
||||
@ -162,8 +168,8 @@ dependencies:
|
||||
specifier: ^3.3.4
|
||||
version: 3.3.4
|
||||
vue-i18n:
|
||||
specifier: ^9.2.2
|
||||
version: 9.2.2(vue@3.3.4)
|
||||
specifier: ^9.9.1
|
||||
version: 9.9.1(vue@3.3.4)
|
||||
vue-router:
|
||||
specifier: ^4.1.6
|
||||
version: 4.1.6(vue@3.3.4)
|
||||
@ -185,8 +191,8 @@ devDependencies:
|
||||
specifier: ^1.1.50
|
||||
version: 1.1.50
|
||||
'@intlify/unplugin-vue-i18n':
|
||||
specifier: ^0.13.0
|
||||
version: 0.13.0(rollup@2.79.1)(vue-i18n@9.2.2)
|
||||
specifier: ^2.0.0
|
||||
version: 2.0.0(rollup@2.79.1)(vue-i18n@9.9.1)
|
||||
'@playwright/test':
|
||||
specifier: ^1.32.3
|
||||
version: 1.32.3
|
||||
@ -2222,8 +2228,8 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@intlify/bundle-utils@7.1.0(vue-i18n@9.2.2):
|
||||
resolution: {integrity: sha512-Q88Wl2T8oaRXls8Yr6l807jZM88mceJvK7QS6gKdU8/pf3gTpU9XmcYORDgAv6h5WKQMoaFjNVf5+SWLfTAysA==}
|
||||
/@intlify/bundle-utils@7.5.0(vue-i18n@9.9.1):
|
||||
resolution: {integrity: sha512-6DymqusddBQ8kVtVBsVFFF7arNfIhuLacOmmsqayT2vl427j9m0VX12mMC+cgoVIodSpRfzYPaPTdPuJq7mK0Q==}
|
||||
engines: {node: '>= 14.16'}
|
||||
peerDependencies:
|
||||
petite-vue-i18n: '*'
|
||||
@ -2234,65 +2240,39 @@ packages:
|
||||
vue-i18n:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@intlify/message-compiler': 9.3.0-beta.27
|
||||
'@intlify/shared': 9.3.0-beta.27
|
||||
acorn: 8.10.0
|
||||
escodegen: 2.0.0
|
||||
'@intlify/message-compiler': 9.9.1
|
||||
'@intlify/shared': 9.9.1
|
||||
acorn: 8.11.2
|
||||
escodegen: 2.1.0
|
||||
estree-walker: 2.0.2
|
||||
jsonc-eslint-parser: 2.3.0
|
||||
magic-string: 0.30.2
|
||||
mlly: 1.4.0
|
||||
magic-string: 0.30.5
|
||||
mlly: 1.4.2
|
||||
source-map-js: 1.0.2
|
||||
vue-i18n: 9.2.2(vue@3.3.4)
|
||||
vue-i18n: 9.9.1(vue@3.3.4)
|
||||
yaml-eslint-parser: 1.2.2
|
||||
dev: true
|
||||
|
||||
/@intlify/core-base@9.2.2:
|
||||
resolution: {integrity: sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==}
|
||||
engines: {node: '>= 14'}
|
||||
dependencies:
|
||||
'@intlify/devtools-if': 9.2.2
|
||||
'@intlify/message-compiler': 9.2.2
|
||||
'@intlify/shared': 9.2.2
|
||||
'@intlify/vue-devtools': 9.2.2
|
||||
|
||||
/@intlify/devtools-if@9.2.2:
|
||||
resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==}
|
||||
engines: {node: '>= 14'}
|
||||
dependencies:
|
||||
'@intlify/shared': 9.2.2
|
||||
|
||||
/@intlify/message-compiler@9.2.2:
|
||||
resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==}
|
||||
engines: {node: '>= 14'}
|
||||
dependencies:
|
||||
'@intlify/shared': 9.2.2
|
||||
source-map: 0.6.1
|
||||
|
||||
/@intlify/message-compiler@9.3.0-beta.27:
|
||||
resolution: {integrity: sha512-GC8rSbd7V67Zu+a9Z0bpV4riBek11YCURJU50YaEhV4Ub2JHEPtoYxK5r2eIsq/kp+M2hJyGLiC4NJUrGa2VwQ==}
|
||||
/@intlify/core-base@9.9.1:
|
||||
resolution: {integrity: sha512-qsV15dg7jNX2faBRyKMgZS8UcFJViWEUPLdzZ9UR0kQZpFVeIpc0AG7ZOfeP7pX2T9SQ5jSiorq/tii9nkkafA==}
|
||||
engines: {node: '>= 16'}
|
||||
dependencies:
|
||||
'@intlify/shared': 9.3.0-beta.27
|
||||
'@intlify/message-compiler': 9.9.1
|
||||
'@intlify/shared': 9.9.1
|
||||
|
||||
/@intlify/message-compiler@9.9.1:
|
||||
resolution: {integrity: sha512-zTvP6X6HeumHOXuAE1CMMsV6tTX+opKMOxO1OHTCg5N5Sm/F7d8o2jdT6W6L5oHUsJ/vvkGefHIs7Q3hfowmsA==}
|
||||
engines: {node: '>= 16'}
|
||||
dependencies:
|
||||
'@intlify/shared': 9.9.1
|
||||
source-map-js: 1.0.2
|
||||
dev: true
|
||||
|
||||
/@intlify/shared@9.2.2:
|
||||
resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
|
||||
engines: {node: '>= 14'}
|
||||
|
||||
/@intlify/shared@9.3.0-beta.14-77e850b:
|
||||
resolution: {integrity: sha512-aHZYRM0sJN+YSUnoC5Dv4L1TFYtP23kdTkrK5cHSEqUbI5UXc8FbnXPal0lJliMhO0ED7Ic7aEOeQX84BM3xCQ==}
|
||||
engines: {node: '>= 14'}
|
||||
dev: true
|
||||
|
||||
/@intlify/shared@9.3.0-beta.27:
|
||||
resolution: {integrity: sha512-hPMsmVCs+ZUVHHU5VORG6LopzXZT7zmyVNqc9OQG80YpA/N4lT/pkJ4B6DTNIsv2C7mwfGM7RdK+0qPki43YgA==}
|
||||
/@intlify/shared@9.9.1:
|
||||
resolution: {integrity: sha512-b3Pta1nwkz5rGq434v0psHwEwHGy1pYCttfcM22IE//K9owbpkEvFptx9VcuRAxjQdrO2If249cmDDjBu5wMDA==}
|
||||
engines: {node: '>= 16'}
|
||||
dev: true
|
||||
|
||||
/@intlify/unplugin-vue-i18n@0.13.0(rollup@2.79.1)(vue-i18n@9.2.2):
|
||||
resolution: {integrity: sha512-Mm9NhcvbsSZ5FXXnCpL/XFCk1hPp809hxErNmnwqGp21JjYOKGp3wpQSrpvGk33ZrHZbhPqAu70IEVEAxVZ5+A==}
|
||||
/@intlify/unplugin-vue-i18n@2.0.0(rollup@2.79.1)(vue-i18n@9.9.1):
|
||||
resolution: {integrity: sha512-1oKvm92L9l2od2H9wKx2ZvR4tzn7gUtd7bPLI7AWUmm7U9H1iEypndt5d985ypxGsEs0gToDaKTrytbBIJwwSg==}
|
||||
engines: {node: '>= 14.16'}
|
||||
peerDependencies:
|
||||
petite-vue-i18n: '*'
|
||||
@ -2306,9 +2286,9 @@ packages:
|
||||
vue-i18n-bridge:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@intlify/bundle-utils': 7.1.0(vue-i18n@9.2.2)
|
||||
'@intlify/shared': 9.3.0-beta.14-77e850b
|
||||
'@rollup/pluginutils': 5.0.2(rollup@2.79.1)
|
||||
'@intlify/bundle-utils': 7.5.0(vue-i18n@9.9.1)
|
||||
'@intlify/shared': 9.9.1
|
||||
'@rollup/pluginutils': 5.0.5(rollup@2.79.1)
|
||||
'@vue/compiler-sfc': 3.3.4
|
||||
debug: 4.3.4
|
||||
fast-glob: 3.3.1
|
||||
@ -2318,19 +2298,12 @@ packages:
|
||||
picocolors: 1.0.0
|
||||
source-map-js: 1.0.2
|
||||
unplugin: 1.4.0
|
||||
vue-i18n: 9.2.2(vue@3.3.4)
|
||||
vue-i18n: 9.9.1(vue@3.3.4)
|
||||
transitivePeerDependencies:
|
||||
- rollup
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@intlify/vue-devtools@9.2.2:
|
||||
resolution: {integrity: sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==}
|
||||
engines: {node: '>= 14'}
|
||||
dependencies:
|
||||
'@intlify/core-base': 9.2.2
|
||||
'@intlify/shared': 9.2.2
|
||||
|
||||
/@it-tools/bip39@0.0.4:
|
||||
resolution: {integrity: sha512-0PWO7VKi6VALiFcm8z2WgxzSZ5wAko0OctBZ0I5+jjtSIXm3t1d54yrrHfgFOZDTyMpCXi638oLpzqexcfRtbA==}
|
||||
dependencies:
|
||||
@ -2966,6 +2939,10 @@ packages:
|
||||
/@types/estree@1.0.0:
|
||||
resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
|
||||
|
||||
/@types/figlet@1.5.8:
|
||||
resolution: {integrity: sha512-G22AUvy4Tl95XLE7jmUM8s8mKcoz+Hr+Xm9W90gJsppJq9f9tHvOGkrpn4gRX0q/cLtBdNkWtWCKDg2UDZoZvQ==}
|
||||
dev: false
|
||||
|
||||
/@types/fs-extra@11.0.1:
|
||||
resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==}
|
||||
dependencies:
|
||||
@ -5216,15 +5193,14 @@ packages:
|
||||
engines: {node: '>=12'}
|
||||
dev: false
|
||||
|
||||
/escodegen@2.0.0:
|
||||
resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==}
|
||||
/escodegen@2.1.0:
|
||||
resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
|
||||
engines: {node: '>=6.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
esprima: 4.0.1
|
||||
estraverse: 5.3.0
|
||||
esutils: 2.0.3
|
||||
optionator: 0.8.3
|
||||
optionalDependencies:
|
||||
source-map: 0.6.1
|
||||
dev: true
|
||||
@ -5682,6 +5658,12 @@ packages:
|
||||
web-streams-polyfill: 3.2.1
|
||||
dev: true
|
||||
|
||||
/figlet@1.7.0:
|
||||
resolution: {integrity: sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==}
|
||||
engines: {node: '>= 0.4.0'}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/figue@1.2.0:
|
||||
resolution: {integrity: sha512-CXKr12kiNWjKtUK3X+YHeXKepn80s9Rg6pgZXoLQYEybgwaGJ9uGW4DrBrVK30ZWZf1mcvTbXF56AcovG7gLVw==}
|
||||
dependencies:
|
||||
@ -6728,14 +6710,6 @@ packages:
|
||||
engines: {node: '>=6'}
|
||||
dev: true
|
||||
|
||||
/levn@0.3.0:
|
||||
resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
dependencies:
|
||||
prelude-ls: 1.1.2
|
||||
type-check: 0.3.2
|
||||
dev: true
|
||||
|
||||
/levn@0.4.1:
|
||||
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@ -7260,18 +7234,6 @@ packages:
|
||||
is-wsl: 2.2.0
|
||||
dev: true
|
||||
|
||||
/optionator@0.8.3:
|
||||
resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
dependencies:
|
||||
deep-is: 0.1.4
|
||||
fast-levenshtein: 2.0.6
|
||||
levn: 0.3.0
|
||||
prelude-ls: 1.1.2
|
||||
type-check: 0.3.2
|
||||
word-wrap: 1.2.3
|
||||
dev: true
|
||||
|
||||
/optionator@0.9.3:
|
||||
resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@ -7563,11 +7525,6 @@ packages:
|
||||
source-map-js: 1.0.2
|
||||
dev: true
|
||||
|
||||
/prelude-ls@1.1.2:
|
||||
resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
dev: true
|
||||
|
||||
/prelude-ls@1.2.1:
|
||||
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@ -8233,6 +8190,7 @@ packages:
|
||||
/source-map@0.6.1:
|
||||
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/source-map@0.8.0-beta.0:
|
||||
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
|
||||
@ -8612,13 +8570,6 @@ packages:
|
||||
typescript: 5.2.2
|
||||
dev: true
|
||||
|
||||
/type-check@0.3.2:
|
||||
resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
dependencies:
|
||||
prelude-ls: 1.1.2
|
||||
dev: true
|
||||
|
||||
/type-check@0.4.0:
|
||||
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@ -9306,15 +9257,14 @@ packages:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/vue-i18n@9.2.2(vue@3.3.4):
|
||||
resolution: {integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==}
|
||||
engines: {node: '>= 14'}
|
||||
/vue-i18n@9.9.1(vue@3.3.4):
|
||||
resolution: {integrity: sha512-xyQ4VspLdNSPTKBFBPWa1tvtj+9HuockZwgFeD2OhxxXuC2CWeNvV4seu2o9+vbQOyQbhAM5Ez56oxUrrnTWdw==}
|
||||
engines: {node: '>= 16'}
|
||||
peerDependencies:
|
||||
vue: ^3.0.0
|
||||
dependencies:
|
||||
'@intlify/core-base': 9.2.2
|
||||
'@intlify/shared': 9.2.2
|
||||
'@intlify/vue-devtools': 9.2.2
|
||||
'@intlify/core-base': 9.9.1
|
||||
'@intlify/shared': 9.9.1
|
||||
'@vue/devtools-api': 6.5.0
|
||||
vue: 3.3.4
|
||||
|
||||
@ -9487,11 +9437,6 @@ packages:
|
||||
stackback: 0.0.2
|
||||
dev: true
|
||||
|
||||
/word-wrap@1.2.3:
|
||||
resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/workbox-background-sync@7.0.0:
|
||||
resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==}
|
||||
dependencies:
|
||||
|
61
scripts/build-locales-files.mjs
Normal file
61
scripts/build-locales-files.mjs
Normal file
@ -0,0 +1,61 @@
|
||||
import { existsSync, writeFileSync } from 'node:fs';
|
||||
import { Glob } from 'bun';
|
||||
import _ from 'lodash';
|
||||
|
||||
async function getPathsFromGlobs({ patterns, onlyFiles = true }) {
|
||||
const filePaths = [];
|
||||
|
||||
for (const pattern of patterns) {
|
||||
const glob = new Glob(pattern);
|
||||
|
||||
for await (const filePath of glob.scan({ onlyFiles, cwd: '.' })) {
|
||||
filePaths.push(filePath);
|
||||
}
|
||||
}
|
||||
|
||||
return { filePaths };
|
||||
}
|
||||
|
||||
function getLocaleKey({ filePath }) {
|
||||
const fileName = filePath.split('/').pop();
|
||||
return fileName.replace(/\.yml$/, '');
|
||||
}
|
||||
|
||||
async function createMissingLocaleFile({ localeKey }) {
|
||||
const fileName = `${localeKey}.yml`;
|
||||
|
||||
const { filePaths: localesDirs } = await getPathsFromGlobs({
|
||||
patterns: [
|
||||
'locales',
|
||||
'src/tools/*/locales',
|
||||
],
|
||||
onlyFiles: false,
|
||||
});
|
||||
|
||||
for (const localesDir of localesDirs) {
|
||||
const filePath = `${localesDir}/${fileName}`;
|
||||
|
||||
if (existsSync(filePath)) {
|
||||
console.log(`Locale file already exists: ${filePath}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log(`Creating missing locale file: ${filePath}`);
|
||||
writeFileSync(filePath, '', 'utf8');
|
||||
}
|
||||
}
|
||||
|
||||
const { filePaths } = await getPathsFromGlobs({
|
||||
patterns: [
|
||||
'locales/*.yml',
|
||||
'src/tools/*/locales/*.yml',
|
||||
],
|
||||
});
|
||||
|
||||
await Promise.all(
|
||||
_.chain(filePaths)
|
||||
.map(filePath => getLocaleKey({ filePath }))
|
||||
.uniq()
|
||||
.map(localeKey => createMissingLocaleFile({ localeKey }))
|
||||
.value(),
|
||||
);
|
@ -1,78 +1,41 @@
|
||||
<script setup lang="ts">
|
||||
import { useThemeVars } from 'naive-ui';
|
||||
import FavoriteButton from './FavoriteButton.vue';
|
||||
import { useAppTheme } from '@/ui/theme/themes';
|
||||
import type { Tool } from '@/tools/tools.types';
|
||||
|
||||
const props = defineProps<{ tool: Tool & { category: string } }>();
|
||||
const { tool } = toRefs(props);
|
||||
const theme = useThemeVars();
|
||||
|
||||
const appTheme = useAppTheme();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<router-link :to="tool.path">
|
||||
<c-card class="tool-card">
|
||||
<router-link :to="tool.path" class="decoration-none">
|
||||
<c-card class="h-full transition transition-duration-0.5s !border-2px !hover:border-primary">
|
||||
<div flex items-center justify-between>
|
||||
<n-icon class="icon" size="40" :component="tool.icon" />
|
||||
<n-icon class="text-neutral-400 dark:text-neutral-600" size="40" :component="tool.icon" />
|
||||
|
||||
<div flex items-center gap-8px>
|
||||
<n-tag
|
||||
<div
|
||||
v-if="tool.isNew"
|
||||
size="small"
|
||||
class="badge-new"
|
||||
round
|
||||
type="success"
|
||||
:bordered="false"
|
||||
:color="{ color: theme.primaryColor, textColor: theme.tagColor }"
|
||||
class="rounded-full px-8px py-3px text-xs text-white dark:text-neutral-800"
|
||||
:style="{
|
||||
'background-color': theme.primaryColor,
|
||||
}"
|
||||
>
|
||||
{{ $t('toolCard.new') }}
|
||||
</n-tag>
|
||||
</div>
|
||||
|
||||
<FavoriteButton :tool="tool" />
|
||||
</div>
|
||||
</div>
|
||||
<n-h3 class="title">
|
||||
<n-ellipsis>{{ tool.name }}</n-ellipsis>
|
||||
</n-h3>
|
||||
|
||||
<div class="description">
|
||||
<n-ellipsis :line-clamp="2" :tooltip="false" style="min-height: 44.78px">
|
||||
{{ tool.description }}
|
||||
<br>
|
||||
</n-ellipsis>
|
||||
<div class="truncat my-5px text-lg text-black dark:text-white">
|
||||
{{ tool.name }}
|
||||
</div>
|
||||
|
||||
<div class="line-clamp-2 text-neutral-500 dark:text-neutral-400">
|
||||
{{ tool.description }}
|
||||
</div>
|
||||
</c-card>
|
||||
</router-link>
|
||||
</template>
|
||||
|
||||
<style lang="less" scoped>
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.tool-card {
|
||||
transition: border-color ease 0.5s;
|
||||
border-width: 2px !important;
|
||||
color: transparent;
|
||||
|
||||
&:hover {
|
||||
border-color: v-bind('appTheme.primary.colorHover');
|
||||
}
|
||||
|
||||
.icon {
|
||||
opacity: 0.6;
|
||||
color: v-bind('theme.textColorBase');
|
||||
}
|
||||
|
||||
.title {
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
.description {
|
||||
opacity: 0.6;
|
||||
color: v-bind('theme.textColorBase');
|
||||
margin: 5px 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
@ -9,6 +9,7 @@ const localesLong: Record<string, string> = {
|
||||
ru: 'Русский',
|
||||
uk: 'Українська',
|
||||
zh: '中文',
|
||||
vi: 'Tiếng Việt',
|
||||
};
|
||||
|
||||
const localeOptions = computed(() =>
|
||||
|
@ -13,76 +13,60 @@ const { t } = useI18n();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="home-page">
|
||||
<div class="pt-50px">
|
||||
<div class="grid-wrapper">
|
||||
<n-grid v-if="config.showBanner" x-gap="12" y-gap="12" cols="1 400:2 800:3 1200:4 2000:8">
|
||||
<n-gi>
|
||||
<ColoredCard :title="$t('home.follow.title')" :icon="Heart">
|
||||
{{ $t('home.follow.p1') }}
|
||||
<a
|
||||
href="https://github.com/CorentinTh/it-tools"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
:aria-label="$t('home.follow.githubRepository')"
|
||||
>GitHub</a>
|
||||
{{ $t('home.follow.p2') }}
|
||||
<a
|
||||
href="https://twitter.com/ittoolsdottech"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
:aria-label="$t('home.follow.twitterAccount')"
|
||||
>Twitter</a>.
|
||||
{{ $t('home.follow.thankYou') }}
|
||||
<n-icon :component="Heart" />
|
||||
</ColoredCard>
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
<div v-if="config.showBanner" class="grid grid-cols-1 gap-12px lg:grid-cols-3 md:grid-cols-3 sm:grid-cols-2 xl:grid-cols-4">
|
||||
<ColoredCard :title="$t('home.follow.title')" :icon="Heart">
|
||||
{{ $t('home.follow.p1') }}
|
||||
<a
|
||||
href="https://github.com/CorentinTh/it-tools"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
:aria-label="$t('home.follow.githubRepository')"
|
||||
>GitHub</a>
|
||||
{{ $t('home.follow.p2') }}
|
||||
<a
|
||||
href="https://twitter.com/ittoolsdottech"
|
||||
rel="noopener"
|
||||
target="_blank"
|
||||
:aria-label="$t('home.follow.twitterAccount')"
|
||||
>Twitter</a>.
|
||||
{{ $t('home.follow.thankYou') }}
|
||||
<n-icon :component="Heart" />
|
||||
</ColoredCard>
|
||||
</div>
|
||||
|
||||
<transition name="height">
|
||||
<div v-if="toolStore.favoriteTools.length > 0">
|
||||
<n-h3>{{ $t('home.categories.favoriteTools') }}</n-h3>
|
||||
<n-grid x-gap="12" y-gap="12" cols="1 400:2 800:3 1200:4 2000:8">
|
||||
<n-gi v-for="tool in toolStore.favoriteTools" :key="tool.name">
|
||||
<ToolCard :tool="tool" />
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
<h3 class="mb-5px mt-25px font-500 text-neutral-400">
|
||||
{{ $t('home.categories.favoriteTools') }}
|
||||
</h3>
|
||||
<div class="grid grid-cols-1 gap-12px lg:grid-cols-3 md:grid-cols-3 sm:grid-cols-2 xl:grid-cols-4">
|
||||
<ToolCard v-for="tool in toolStore.favoriteTools" :key="tool.name" :tool="tool" />
|
||||
</div>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<div v-if="toolStore.newTools.length > 0">
|
||||
<n-h3>{{ t('home.categories.newestTools') }}</n-h3>
|
||||
<n-grid x-gap="12" y-gap="12" cols="1 400:2 800:3 1200:4 2000:8">
|
||||
<n-gi v-for="tool in toolStore.newTools" :key="tool.name">
|
||||
<ToolCard :tool="tool" />
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
<h3 class="mb-5px mt-25px font-500 text-neutral-400">
|
||||
{{ t('home.categories.newestTools') }}
|
||||
</h3>
|
||||
<div class="grid grid-cols-1 gap-12px lg:grid-cols-3 md:grid-cols-3 sm:grid-cols-2 xl:grid-cols-4">
|
||||
<ToolCard v-for="tool in toolStore.newTools" :key="tool.name" :tool="tool" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<n-h3>{{ $t('home.categories.allTools') }}</n-h3>
|
||||
<n-grid x-gap="12" y-gap="12" cols="1 400:2 800:3 1200:4 2000:8">
|
||||
<n-gi v-for="tool in toolStore.tools" :key="tool.name">
|
||||
<transition>
|
||||
<ToolCard :tool="tool" />
|
||||
</transition>
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
<h3 class="mb-5px mt-25px font-500 text-neutral-400">
|
||||
{{ $t('home.categories.allTools') }}
|
||||
</h3>
|
||||
<div class="grid grid-cols-1 gap-12px lg:grid-cols-3 md:grid-cols-3 sm:grid-cols-2 xl:grid-cols-4">
|
||||
<ToolCard v-for="tool in toolStore.tools" :key="tool.name" :tool="tool" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
.home-page {
|
||||
padding-top: 50px;
|
||||
}
|
||||
|
||||
.n-h3 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
::v-deep(.n-grid) {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.height-enter-active,
|
||||
.height-leave-active {
|
||||
transition: all 0.5s ease-in-out;
|
||||
|
@ -1,22 +1,7 @@
|
||||
import messages from '@intlify/unplugin-vue-i18n/messages';
|
||||
import { get } from '@vueuse/core';
|
||||
import type { Plugin } from 'vue';
|
||||
import { createI18n } from 'vue-i18n';
|
||||
import baseMessages from '@intlify/unplugin-vue-i18n/messages';
|
||||
import _ from 'lodash';
|
||||
import { parse as parseYaml } from 'yaml';
|
||||
|
||||
const i18nFiles = import.meta.glob('../tools/*/locales/**.yml', { as: 'raw' });
|
||||
|
||||
const messagesByTools = await Promise.all(_.map(i18nFiles, async (fileDescriptor, path) => {
|
||||
const [, locale] = path.match(/\.\/tools\/.*?\/locales\/(.*)\.ya?ml$/i) ?? [];
|
||||
const content = parseYaml(await fileDescriptor());
|
||||
|
||||
return { [locale]: content };
|
||||
}));
|
||||
|
||||
const messages = _.merge(
|
||||
baseMessages,
|
||||
_.merge({}, ...messagesByTools),
|
||||
);
|
||||
|
||||
const i18n = createI18n({
|
||||
legacy: false,
|
||||
@ -31,7 +16,6 @@ export const i18nPlugin: Plugin = {
|
||||
};
|
||||
|
||||
export const translate = function (localeKey: string) {
|
||||
// @ts-expect-error global
|
||||
const hasKey = i18n.global.te(localeKey, i18n.global.locale);
|
||||
const hasKey = i18n.global.te(localeKey, get(i18n.global.locale));
|
||||
return hasKey ? i18n.global.t(localeKey) : localeKey;
|
||||
};
|
||||
|
93
src/tools/ascii-text-drawer/ascii-text-drawer.vue
Normal file
93
src/tools/ascii-text-drawer/ascii-text-drawer.vue
Normal file
@ -0,0 +1,93 @@
|
||||
<script setup lang="ts">
|
||||
import figlet from 'figlet';
|
||||
import TextareaCopyable from '@/components/TextareaCopyable.vue';
|
||||
|
||||
const input = ref('Ascii ART');
|
||||
const font = useStorage('ascii-text-drawer:font', 'Standard');
|
||||
const width = useStorage('ascii-text-drawer:width', 80);
|
||||
const output = ref('');
|
||||
const errored = ref(false);
|
||||
const processing = ref(false);
|
||||
|
||||
figlet.defaults({ fontPath: '//unpkg.com/figlet@1.6.0/fonts/' });
|
||||
|
||||
watchEffect(async () => {
|
||||
processing.value = true;
|
||||
try {
|
||||
const options: figlet.Options = {
|
||||
font: font.value as figlet.Fonts,
|
||||
width: width.value,
|
||||
whitespaceBreak: true,
|
||||
};
|
||||
output.value = await (new Promise<string>((resolve, reject) =>
|
||||
figlet.text(input.value, options,
|
||||
(err, text) => {
|
||||
if (err) {
|
||||
reject(err);
|
||||
return;
|
||||
}
|
||||
|
||||
resolve(text ?? '');
|
||||
})));
|
||||
errored.value = false;
|
||||
}
|
||||
catch (e: any) {
|
||||
errored.value = true;
|
||||
}
|
||||
processing.value = false;
|
||||
});
|
||||
|
||||
const fonts = ['1Row', '3-D', '3D Diagonal', '3D-ASCII', '3x5', '4Max', '5 Line Oblique', 'AMC 3 Line', 'AMC 3 Liv1', 'AMC AAA01', 'AMC Neko', 'AMC Razor', 'AMC Razor2', 'AMC Slash', 'AMC Slider', 'AMC Thin', 'AMC Tubes', 'AMC Untitled', 'ANSI Shadow', 'ASCII New Roman', 'Acrobatic', 'Alligator', 'Alligator2', 'Alpha', 'Alphabet', 'Arrows', 'Avatar', 'B1FF', 'B1FF', 'Banner', 'Banner3-D', 'Banner3', 'Banner4', 'Barbwire', 'Basic', 'Bear', 'Bell', 'Benjamin', 'Big Chief', 'Big Money-ne', 'Big Money-nw', 'Big Money-se', 'Big Money-sw', 'Big', 'Bigfig', 'Binary', 'Block', 'Blocks', 'Bloody', 'Bolger', 'Braced', 'Bright', 'Broadway KB', 'Broadway', 'Bubble', 'Bulbhead', 'Caligraphy', 'Caligraphy2', 'Calvin S', 'Cards', 'Catwalk', 'Chiseled', 'Chunky', 'Coinstak', 'Cola', 'Colossal', 'Computer', 'Contessa', 'Contrast', 'Cosmike', 'Crawford', 'Crawford2', 'Crazy', 'Cricket', 'Cursive', 'Cyberlarge', 'Cybermedium', 'Cybersmall', 'Cygnet', 'DANC4', 'DOS Rebel', 'DWhistled', 'Dancing Font', 'Decimal', 'Def Leppard', 'Delta Corps Priest 1', 'Diamond', 'Diet Cola', 'Digital', 'Doh', 'Doom', 'Dot Matrix', 'Double Shorts', 'Double', 'Dr Pepper', 'Efti Chess', 'Efti Font', 'Efti Italic', 'Efti Piti', 'Efti Robot', 'Efti Wall', 'Efti Water', 'Electronic', 'Elite', 'Epic', 'Fender', 'Filter', 'Fire Font-k', 'Fire Font-s', 'Flipped', 'Flower Power', 'Four Tops', 'Fraktur', 'Fun Face', 'Fun Faces', 'Fuzzy', 'Georgi16', 'Georgia11', 'Ghost', 'Ghoulish', 'Glenyn', 'Goofy', 'Gothic', 'Graceful', 'Gradient', 'Graffiti', 'Greek', 'Heart Left', 'Heart Right', 'Henry 3D', 'Hex', 'Hieroglyphs', 'Hollywood', 'Horizontal Left', 'Horizontal Right', 'ICL-1900', 'Impossible', 'Invita', 'Isometric1', 'Isometric2', 'Isometric3', 'Isometric4', 'Italic', 'Ivrit', 'JS Block Letters', 'JS Bracket Letters', 'JS Capital Curves', 'JS Cursive', 'JS Stick Letters', 'Jacky', 'Jazmine', 'Jerusalem', 'Katakana', 'Kban', 'Keyboard', 'Knob', 'Konto Slant', 'Konto', 'LCD', 'Larry 3D 2', 'Larry 3D', 'Lean', 'Letters', 'Lil Devil', 'Line Blocks', 'Linux', 'Lockergnome', 'Madrid', 'Marquee', 'Maxfour', 'Merlin1', 'Merlin2', 'Mike', 'Mini', 'Mirror', 'Mnemonic', 'Modular', 'Morse', 'Morse2', 'Moscow', 'Mshebrew210', 'Muzzle', 'NScript', 'NT Greek', 'NV Script', 'Nancyj-Fancy', 'Nancyj-Improved', 'Nancyj-Underlined', 'Nancyj', 'Nipples', 'O8', 'OS2', 'Octal', 'Ogre', 'Old Banner', 'Patorjk\'s Cheese', 'Patorjk-HeX', 'Pawp', 'Peaks Slant', 'Peaks', 'Pebbles', 'Pepper', 'Poison', 'Puffy', 'Puzzle', 'Pyramid', 'Rammstein', 'Rectangles', 'Red Phoenix', 'Relief', 'Relief2', 'Reverse', 'Roman', 'Rot13', 'Rot13', 'Rotated', 'Rounded', 'Rowan Cap', 'Rozzo', 'Runic', 'Runyc', 'S Blood', 'SL Script', 'Santa Clara', 'Script', 'Serifcap', 'Shadow', 'Shimrod', 'Short', 'Slant Relief', 'Slant', 'Slide', 'Small Caps', 'Small Isometric1', 'Small Keyboard', 'Small Poison', 'Small Script', 'Small Shadow', 'Small Slant', 'Small Tengwar', 'Small', 'Soft', 'Speed', 'Spliff', 'Stacey', 'Stampate', 'Stampatello', 'Standard', 'Star Strips', 'Star Wars', 'Stellar', 'Stforek', 'Stick Letters', 'Stop', 'Straight', 'Stronger Than All', 'Sub-Zero', 'Swamp Land', 'Swan', 'Sweet', 'THIS', 'Tanja', 'Tengwar', 'Term', 'Test1', 'The Edge', 'Thick', 'Thin', 'Thorned', 'Three Point', 'Ticks Slant', 'Ticks', 'Tiles', 'Tinker-Toy', 'Tombstone', 'Train', 'Trek', 'Tsalagi', 'Tubular', 'Twisted', 'Two Point', 'USA Flag', 'Univers', 'Varsity', 'Wavy', 'Weird', 'Wet Letter', 'Whimsy', 'Wow'];
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<c-card style="max-width: 600px;">
|
||||
<c-input-text
|
||||
v-model:value="input"
|
||||
label="Your text:"
|
||||
placeholder="Your text to draw"
|
||||
raw-text
|
||||
multiline
|
||||
rows="4"
|
||||
/>
|
||||
|
||||
<n-divider />
|
||||
|
||||
<n-grid cols="4" x-gap="12" w-full>
|
||||
<n-gi span="2">
|
||||
<c-select
|
||||
v-model:value="font"
|
||||
label-position="top"
|
||||
label="Font:"
|
||||
:options="fonts"
|
||||
searchable="true"
|
||||
placeholder="Select font to use"
|
||||
/>
|
||||
</n-gi>
|
||||
<n-gi span="2">
|
||||
<n-form-item label="Width:" label-placement="top" label-width="100" :show-feedback="false">
|
||||
<n-input-number v-model:value="width" min="0" max="10000" w-full placeholder="Width of the text" />
|
||||
</n-form-item>
|
||||
</n-gi>
|
||||
</n-grid>
|
||||
|
||||
<n-divider />
|
||||
|
||||
<div v-if="processing" flex items-center justify-center>
|
||||
<n-spin size="medium" />
|
||||
<span class="ml-2">Loading font...</span>
|
||||
</div>
|
||||
|
||||
<c-alert v-if="errored" mt-1 text-center type="error">
|
||||
Current settings resulted in error.
|
||||
</c-alert>
|
||||
|
||||
<n-form-item v-if="!processing && !errored" label="Ascii Art text:">
|
||||
<TextareaCopyable
|
||||
:value="output"
|
||||
mb-1 mt-1
|
||||
copy-placement="outside"
|
||||
/>
|
||||
</n-form-item>
|
||||
</c-card>
|
||||
</template>
|
12
src/tools/ascii-text-drawer/index.ts
Normal file
12
src/tools/ascii-text-drawer/index.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { Artboard } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'ASCII Art Text Generator',
|
||||
path: '/ascii-text-drawer',
|
||||
description: 'Create ASCII art text with many fonts and styles.',
|
||||
keywords: ['ascii', 'asciiart', 'text', 'drawer'],
|
||||
component: () => import('./ascii-text-drawer.vue'),
|
||||
icon: Artboard,
|
||||
createdAt: new Date('2024-03-03'),
|
||||
});
|
@ -1,10 +1,11 @@
|
||||
import { FileDigit } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Base64 file converter',
|
||||
name: translate('tools.base64-file-converter.title'),
|
||||
path: '/base64-file-converter',
|
||||
description: 'Convert string, files or images into a it\'s base64 representation.',
|
||||
description: translate('tools.base64-file-converter.description'),
|
||||
keywords: ['base64', 'converter', 'upload', 'image', 'file', 'conversion', 'web', 'data', 'format'],
|
||||
component: () => import('./base64-file-converter.vue'),
|
||||
icon: FileDigit,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { FileDigit } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Base64 string encoder/decoder',
|
||||
name: translate('tools.base64-string-converter.title'),
|
||||
path: '/base64-string-converter',
|
||||
description: 'Simply encode and decode string into a their base64 representation.',
|
||||
description: translate('tools.base64-string-converter.description'),
|
||||
keywords: ['base64', 'converter', 'conversion', 'web', 'data', 'format', 'atob', 'btoa'],
|
||||
component: () => import('./base64-string-converter.vue'),
|
||||
icon: FileDigit,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { PasswordRound } from '@vicons/material';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Basic auth generator',
|
||||
name: translate('tools.basic-auth-generator.title'),
|
||||
path: '/basic-auth-generator',
|
||||
description: 'Generate a base64 basic auth header from an username and a password.',
|
||||
description: translate('tools.basic-auth-generator.description'),
|
||||
keywords: [
|
||||
'basic',
|
||||
'auth',
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { LockSquare } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Bcrypt',
|
||||
name: translate('tools.bcrypt.title'),
|
||||
path: '/bcrypt',
|
||||
description:
|
||||
'Hash and compare text string using bcrypt. Bcrypt is a password-hashing function based on the Blowfish cipher.',
|
||||
description: translate('tools.bcrypt.description'),
|
||||
keywords: ['bcrypt', 'hash', 'compare', 'password', 'salt', 'round', 'storage', 'crypto'],
|
||||
component: () => import('./bcrypt.vue'),
|
||||
icon: LockSquare,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { SpeedFilled } from '@vicons/material';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Benchmark builder',
|
||||
name: translate('tools.benchmark-builder.title'),
|
||||
path: '/benchmark-builder',
|
||||
description: 'Easily compare execution time of tasks with this very simple online benchmark builder.',
|
||||
description: translate('tools.benchmark-builder.description'),
|
||||
keywords: ['benchmark', 'builder', 'execution', 'duration', 'mean', 'variance'],
|
||||
component: () => import('./benchmark-builder.vue'),
|
||||
icon: SpeedFilled,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { AlignJustified } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'BIP39 passphrase generator',
|
||||
name: translate('tools.bip39-generator.title'),
|
||||
path: '/bip39-generator',
|
||||
description: 'Generate BIP39 passphrase from existing or random mnemonic, or get the mnemonic from the passphrase.',
|
||||
description: translate('tools.bip39-generator.description'),
|
||||
keywords: ['BIP39', 'passphrase', 'generator', 'mnemonic', 'entropy'],
|
||||
component: () => import('./bip39-generator.vue'),
|
||||
icon: AlignJustified,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Camera } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Camera recorder',
|
||||
name: translate('tools.camera-recorder.title'),
|
||||
path: '/camera-recorder',
|
||||
description: 'Take a picture or record a video from your webcam or camera.',
|
||||
description: translate('tools.camera-recorder.description'),
|
||||
keywords: ['camera', 'recoder'],
|
||||
component: () => import('./camera-recorder.vue'),
|
||||
icon: Camera,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { LetterCaseToggle } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Case converter',
|
||||
name: translate('tools.case-converter.title'),
|
||||
path: '/case-converter',
|
||||
description: 'Change the case of a string and chose between different formats',
|
||||
description: translate('tools.case-converter.description'),
|
||||
keywords: [
|
||||
'case',
|
||||
'converter',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { FileInvoice } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Chmod calculator',
|
||||
name: translate('tools.chmod-calculator.title'),
|
||||
path: '/chmod-calculator',
|
||||
description: 'Compute your chmod permissions and commands with this online chmod calculator.',
|
||||
description: translate('tools.chmod-calculator.description'),
|
||||
keywords: [
|
||||
'chmod',
|
||||
'calculator',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { TimerOutlined } from '@vicons/material';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Chronometer',
|
||||
name: translate('tools.chronometer.title'),
|
||||
path: '/chronometer',
|
||||
description: 'Monitor the duration of a thing. Basically a chronometer with simple chronometer features.',
|
||||
description: translate('tools.chronometer.description'),
|
||||
keywords: ['chronometer', 'time', 'lap', 'duration', 'measure', 'pause', 'resume', 'stopwatch'],
|
||||
component: () => import('./chronometer.vue'),
|
||||
icon: TimerOutlined,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Palette } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Color converter',
|
||||
name: translate('tools.color-converter.title'),
|
||||
path: '/color-converter',
|
||||
description: 'Convert color between the different formats (hex, rgb, hsl and css name)',
|
||||
description: translate('tools.color-converter.description'),
|
||||
keywords: ['color', 'converter'],
|
||||
component: () => import('./color-converter.vue'),
|
||||
icon: Palette,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Alarm } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Crontab generator',
|
||||
name: translate('tools.crontab-generator.title'),
|
||||
path: '/crontab-generator',
|
||||
description: 'Validate and generate crontab and get the human readable description of the cron schedule.',
|
||||
description: translate('tools.crontab-generator.description'),
|
||||
keywords: [
|
||||
'crontab',
|
||||
'generator',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Calendar } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Date-time converter',
|
||||
name: translate('tools.date-converter.title'),
|
||||
path: '/date-converter',
|
||||
description: 'Convert date and time into the various different formats',
|
||||
description: translate('tools.date-converter.description'),
|
||||
keywords: ['date', 'time', 'converter', 'iso', 'utc', 'timezone', 'year', 'month', 'day', 'minute', 'seconde'],
|
||||
component: () => import('./date-time-converter.vue'),
|
||||
icon: Calendar,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { DeviceDesktop } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Device information',
|
||||
name: translate('tools.device-information.title'),
|
||||
path: '/device-information',
|
||||
description: 'Get information about your current device (screen size, pixel-ratio, user agent, ...)',
|
||||
description: translate('tools.device-information.description'),
|
||||
keywords: [
|
||||
'device',
|
||||
'information',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { BrandDocker } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Docker run to Docker compose converter',
|
||||
name: translate('tools.docker-run-to-docker-compose-converter.title'),
|
||||
path: '/docker-run-to-docker-compose-converter',
|
||||
description: 'Turns docker run commands into docker-compose files!',
|
||||
description: translate('tools.docker-run-to-docker-compose-converter.description'),
|
||||
keywords: ['docker', 'run', 'compose', 'yaml', 'yml', 'convert', 'deamon'],
|
||||
component: () => import('./docker-run-to-docker-compose-converter.vue'),
|
||||
icon: BrandDocker,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { MoodSmile } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Emoji picker',
|
||||
name: translate('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: translate('tools.emoji-picker.description'),
|
||||
keywords: ['emoji', 'picker', 'unicode', 'copy', 'paste'],
|
||||
component: () => import('./emoji-picker.vue'),
|
||||
icon: MoodSmile,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Lock } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Encrypt / decrypt text',
|
||||
name: translate('tools.encryption.title'),
|
||||
path: '/encryption',
|
||||
description: 'Encrypt and decrypt text clear text using crypto algorithm like AES, TripleDES, Rabbit or RC4.',
|
||||
description: translate('tools.encryption.description'),
|
||||
keywords: ['cypher', 'encipher', 'text', 'AES', 'TripleDES', 'Rabbit', 'RC4'],
|
||||
component: () => import('./encryption.vue'),
|
||||
icon: Lock,
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Hourglass } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'ETA calculator',
|
||||
name: translate('tools.eta-calculator.title'),
|
||||
path: '/eta-calculator',
|
||||
description:
|
||||
'An ETA (Estimated Time of Arrival) calculator to know the approximate end time of a task, for example the moment of ending of a download.',
|
||||
description: translate('tools.eta-calculator.description'),
|
||||
keywords: ['eta', 'calculator', 'estimated', 'time', 'arrival', 'average'],
|
||||
component: () => import('./eta-calculator.vue'),
|
||||
icon: Hourglass,
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { BrandGit } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Git cheatsheet',
|
||||
name: translate('tools.git-memo.title'),
|
||||
path: '/git-memo',
|
||||
description:
|
||||
'Git is a decentralized version management software. With this cheatsheet you will have a quick access to the most common git commands.',
|
||||
description: translate('tools.git-memo.description'),
|
||||
keywords: ['git', 'push', 'force', 'pull', 'commit', 'amend', 'rebase', 'merge', 'reset', 'soft', 'hard', 'lease'],
|
||||
component: () => import('./git-memo.vue'),
|
||||
icon: BrandGit,
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { EyeOff } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Hash text',
|
||||
name: translate('tools.hash-text.title'),
|
||||
path: '/hash-text',
|
||||
description:
|
||||
'Hash a text string using the function you need : MD5, SHA1, SHA256, SHA224, SHA512, SHA384, SHA3 or RIPEMD160',
|
||||
description: translate('tools.hash-text.description'),
|
||||
keywords: [
|
||||
'hash',
|
||||
'digest',
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { ShortTextRound } from '@vicons/material';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Hmac generator',
|
||||
name: translate('tools.hmac-generator.title'),
|
||||
path: '/hmac-generator',
|
||||
description:
|
||||
'Computes a hash-based message authentication code (HMAC) using a secret key and your favorite hashing function.',
|
||||
description: translate('tools.hmac-generator.description'),
|
||||
keywords: ['hmac', 'generator', 'MD5', 'SHA1', 'SHA256', 'SHA224', 'SHA512', 'SHA384', 'SHA3', 'RIPEMD160'],
|
||||
component: () => import('./hmac-generator.vue'),
|
||||
icon: ShortTextRound,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Code } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Escape html entities',
|
||||
name: translate('tools.html-entities.title'),
|
||||
path: '/html-entities',
|
||||
description: 'Escape or unescape html entities (replace <,>, &, " and \' to their html version)',
|
||||
description: translate('tools.html-entities.description'),
|
||||
keywords: ['html', 'entities', 'escape', 'unescape', 'special', 'characters', 'tags'],
|
||||
component: () => import('./html-entities.vue'),
|
||||
icon: Code,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Edit } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'HTML WYSIWYG editor',
|
||||
name: translate('tools.html-wysiwyg-editor.title'),
|
||||
path: '/html-wysiwyg-editor',
|
||||
description: 'Online HTML editor with feature-rich WYSIWYG editor, get the source code of the content immediately.',
|
||||
description: translate('tools.html-wysiwyg-editor.description'),
|
||||
keywords: ['html', 'wysiwyg', 'editor', 'p', 'ul', 'ol', 'converter', 'live'],
|
||||
component: () => import('./html-wysiwyg-editor.vue'),
|
||||
icon: Edit,
|
||||
|
@ -2,11 +2,12 @@ import { HttpRound } from '@vicons/material';
|
||||
import { defineTool } from '../tool';
|
||||
|
||||
import { codesByCategories } from './http-status-codes.constants';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'HTTP status codes',
|
||||
name: translate('tools.http-status-codes.title'),
|
||||
path: '/http-status-codes',
|
||||
description: 'The list of all HTTP status codes their name and their meaning.',
|
||||
description: translate('tools.http-status-codes.description'),
|
||||
keywords: [
|
||||
'http',
|
||||
'status',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
import Bank from '~icons/mdi/bank';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'IBAN validator and parser',
|
||||
name: translate('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: translate('tools.iban-validator-and-parser.description'),
|
||||
keywords: ['iban', 'validator', 'and', 'parser', 'bic', 'bank'],
|
||||
component: () => import('./iban-validator-and-parser.vue'),
|
||||
icon: Bank,
|
||||
|
@ -1,7 +1,11 @@
|
||||
import { tool as base64FileConverter } from './base64-file-converter';
|
||||
import { tool as base64StringConverter } from './base64-string-converter';
|
||||
import { tool as basicAuthGenerator } from './basic-auth-generator';
|
||||
|
||||
import { tool as asciiTextDrawer } from './ascii-text-drawer';
|
||||
|
||||
import { tool as textToUnicode } from './text-to-unicode';
|
||||
import { tool as safelinkDecoder } from './safelink-decoder';
|
||||
import { tool as pdfSignatureChecker } from './pdf-signature-checker';
|
||||
import { tool as numeronymGenerator } from './numeronym-generator';
|
||||
import { tool as macAddressGenerator } from './mac-address-generator';
|
||||
@ -124,6 +128,7 @@ export const toolsByCategory: ToolCategory[] = [
|
||||
userAgentParser,
|
||||
httpStatusCodes,
|
||||
jsonDiff,
|
||||
safelinkDecoder,
|
||||
],
|
||||
},
|
||||
{
|
||||
@ -161,7 +166,15 @@ export const toolsByCategory: ToolCategory[] = [
|
||||
},
|
||||
{
|
||||
name: 'Text',
|
||||
components: [loremIpsumGenerator, textStatistics, emojiPicker, stringObfuscator, textDiff, numeronymGenerator],
|
||||
components: [
|
||||
loremIpsumGenerator,
|
||||
textStatistics,
|
||||
emojiPicker,
|
||||
stringObfuscator,
|
||||
textDiff,
|
||||
numeronymGenerator,
|
||||
asciiTextDrawer,
|
||||
],
|
||||
},
|
||||
{
|
||||
name: 'Data',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { ArrowsLeftRight } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Integer base converter',
|
||||
name: translate('tools.base-converter.title'),
|
||||
path: '/base-converter',
|
||||
description: 'Convert number between different bases (decimal, hexadecimal, binary, octal, base64, ...)',
|
||||
description: translate('tools.base-converter.description'),
|
||||
keywords: ['integer', 'number', 'base', 'conversion', 'decimal', 'hexadecimal', 'binary', 'octal', 'base64'],
|
||||
component: () => import('./integer-base-converter.vue'),
|
||||
icon: ArrowsLeftRight,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Binary } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Ipv4 address converter',
|
||||
name: translate('tools.ipv4-address-converter.title'),
|
||||
path: '/ipv4-address-converter',
|
||||
description: 'Convert an ip address into decimal, binary, hexadecimal or event in ipv6',
|
||||
description: translate('tools.ipv4-address-converter.description'),
|
||||
keywords: ['ipv4', 'address', 'converter', 'decimal', 'hexadecimal', 'binary', 'ipv6'],
|
||||
component: () => import('./ipv4-address-converter.vue'),
|
||||
icon: Binary,
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { UnfoldMoreOutlined } from '@vicons/material';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'IPv4 range expander',
|
||||
name: translate('tools.ipv4-range-expander.title'),
|
||||
path: '/ipv4-range-expander',
|
||||
description:
|
||||
'Given a start and an end IPv4 address this tool calculates a valid IPv4 network with its CIDR notation.',
|
||||
description: translate('tools.ipv4-range-expander.description'),
|
||||
keywords: ['ipv4', 'range', 'expander', 'subnet', 'creator', 'cidr'],
|
||||
component: () => import('./ipv4-range-expander.vue'),
|
||||
icon: UnfoldMoreOutlined,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { RouterOutlined } from '@vicons/material';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'IPv4 subnet calculator',
|
||||
name: translate('tools.ipv4-subnet-calculator.title'),
|
||||
path: '/ipv4-subnet-calculator',
|
||||
description: 'Parse your IPv4 CIDR blocks and get all the info you need about your sub network.',
|
||||
description: translate('tools.ipv4-subnet-calculator.description'),
|
||||
keywords: ['ipv4', 'subnet', 'calculator', 'mask', 'network', 'cidr', 'netmask', 'bitmask', 'broadcast', 'address'],
|
||||
component: () => import('./ipv4-subnet-calculator.vue'),
|
||||
icon: RouterOutlined,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { BuildingFactory } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'IPv6 ULA generator',
|
||||
name: translate('tools.ipv6-ula-generator.title'),
|
||||
path: '/ipv6-ula-generator',
|
||||
description: 'Generate your own local, non-routable IP addresses on your network according to RFC4193.',
|
||||
description: translate('tools.ipv6-ula-generator.description'),
|
||||
keywords: ['ipv6', 'ula', 'generator', 'rfc4193', 'network', 'private'],
|
||||
component: () => import('./ipv6-ula-generator.vue'),
|
||||
icon: BuildingFactory,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { CompareArrowsRound } from '@vicons/material';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'JSON diff',
|
||||
name: translate('tools.json-diff.title'),
|
||||
path: '/json-diff',
|
||||
description: 'Compare two JSON objects and get the differences between them.',
|
||||
description: translate('tools.json-diff.description'),
|
||||
keywords: ['json', 'diff', 'compare', 'difference', 'object', 'data'],
|
||||
component: () => import('./json-diff.vue'),
|
||||
icon: CompareArrowsRound,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Braces } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'JSON minify',
|
||||
name: translate('tools.json-minify.title'),
|
||||
path: '/json-minify',
|
||||
description: 'Minify and compress your JSON by removing unnecessary white spaces.',
|
||||
description: translate('tools.json-minify.description'),
|
||||
keywords: ['json', 'minify', 'format'],
|
||||
component: () => import('./json-minify.vue'),
|
||||
icon: Braces,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { List } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'JSON to CSV',
|
||||
name: translate('tools.json-to-csv.title'),
|
||||
path: '/json-to-csv',
|
||||
description: 'Convert JSON to CSV with automatic header detection.',
|
||||
description: translate('tools.json-to-csv.description'),
|
||||
keywords: ['json', 'to', 'csv', 'convert'],
|
||||
component: () => import('./json-to-csv.vue'),
|
||||
icon: List,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Braces } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'JSON to TOML',
|
||||
name: translate('tools.json-to-toml.title'),
|
||||
path: '/json-to-toml',
|
||||
description: 'Parse and convert JSON to TOML.',
|
||||
description: translate('tools.json-to-toml.description'),
|
||||
keywords: ['json', 'parse', 'toml', 'convert', 'transform'],
|
||||
component: () => import('./json-to-toml.vue'),
|
||||
icon: Braces,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Braces } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'JSON to YAML converter',
|
||||
name: translate('tools.json-to-yaml-converter.title'),
|
||||
path: '/json-to-yaml-converter',
|
||||
description: 'Simply convert JSON to YAML with this live online converter.',
|
||||
description: translate('tools.json-to-yaml-converter.description'),
|
||||
keywords: ['yaml', 'to', 'json'],
|
||||
component: () => import('./json-to-yaml.vue'),
|
||||
icon: Braces,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Braces } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'JSON prettify and format',
|
||||
name: translate('tools.json-prettify.title'),
|
||||
path: '/json-prettify',
|
||||
description: 'Prettify your JSON string to a human friendly readable format.',
|
||||
description: translate('tools.json-prettify.description'),
|
||||
keywords: ['json', 'viewer', 'prettify', 'format'],
|
||||
component: () => import('./json-viewer.vue'),
|
||||
icon: Braces,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Key } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'JWT parser',
|
||||
name: translate('tools.jwt-parser.title'),
|
||||
path: '/jwt-parser',
|
||||
description: 'Parse and decode your JSON Web Token (jwt) and display its content.',
|
||||
description: translate('tools.jwt-parser.description'),
|
||||
keywords: [
|
||||
'jwt',
|
||||
'parser',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Keyboard } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Keycode info',
|
||||
name: translate('tools.keycode-info.title'),
|
||||
path: '/keycode-info',
|
||||
description: 'Find the javascript keycode, code, location and modifiers of any pressed key.',
|
||||
description: translate('tools.keycode-info.description'),
|
||||
keywords: [
|
||||
'keycode',
|
||||
'info',
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { List } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'List converter',
|
||||
name: translate('tools.list-converter.title'),
|
||||
path: '/list-converter',
|
||||
description:
|
||||
'This tool can process column-based data and apply various changes (transpose, add prefix and suffix, reverse list, sort list, lowercase values, truncate values) to each row.',
|
||||
description: translate('tools.list-converter.description'),
|
||||
keywords: ['list', 'converter', 'sort', 'reverse', 'prefix', 'suffix', 'lowercase', 'truncate'],
|
||||
component: () => import('./list-converter.vue'),
|
||||
icon: List,
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { AlignJustified } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Lorem ipsum generator',
|
||||
name: translate('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: translate('tools.lorem-ipsum-generator.description'),
|
||||
keywords: ['lorem', 'ipsum', 'dolor', 'sit', 'amet', 'placeholder', 'text', 'filler', 'random', 'generator'],
|
||||
component: () => import('./lorem-ipsum-generator.vue'),
|
||||
icon: AlignJustified,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Devices } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'MAC address generator',
|
||||
name: translate('tools.mac-address-generator.title'),
|
||||
path: '/mac-address-generator',
|
||||
description: 'Enter the quantity and prefix. MAC addresses will be generated in your chosen case (uppercase or lowercase)',
|
||||
description: translate('tools.mac-address-generator.description'),
|
||||
keywords: ['mac', 'address', 'generator', 'random', 'prefix'],
|
||||
component: () => import('./mac-address-generator.vue'),
|
||||
icon: Devices,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Devices } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'MAC address lookup',
|
||||
name: translate('tools.mac-address-lookup.title'),
|
||||
path: '/mac-address-lookup',
|
||||
description: 'Find the vendor and manufacturer of a device by its MAC address.',
|
||||
description: translate('tools.mac-address-lookup.description'),
|
||||
keywords: ['mac', 'address', 'lookup', 'vendor', 'parser', 'manufacturer'],
|
||||
component: () => import('./mac-address-lookup.vue'),
|
||||
icon: Devices,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Math } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Math evaluator',
|
||||
name: translate('tools.math-evaluator.title'),
|
||||
path: '/math-evaluator',
|
||||
description: 'A calculator for evaluating mathematical expressions. You can use functions like sqrt, cos, sin, abs, etc.',
|
||||
description: translate('tools.math-evaluator.description'),
|
||||
keywords: [
|
||||
'math',
|
||||
'evaluator',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Tags } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Open graph meta generator',
|
||||
name: translate('tools.og-meta-generator.title'),
|
||||
path: '/og-meta-generator',
|
||||
description: 'Generate open-graph and socials html meta tags for your website.',
|
||||
description: translate('tools.og-meta-generator.description'),
|
||||
keywords: [
|
||||
'meta',
|
||||
'tag',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { World } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Mime types',
|
||||
name: translate('tools.mime-types.title'),
|
||||
path: '/mime-types',
|
||||
description: 'Convert mime types to extensions and vice-versa.',
|
||||
description: translate('tools.mime-types.description'),
|
||||
keywords: ['mime', 'types', 'extension', 'content', 'type'],
|
||||
component: () => import('./mime-types.vue'),
|
||||
icon: World,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { defineTool } from '../tool';
|
||||
import n7mIcon from './n7m-icon.svg?component';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Numeronym generator',
|
||||
name: translate('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: translate('tools.numeronym-generator.description'),
|
||||
keywords: ['numeronym', 'generator', 'abbreviation', 'i18n', 'a11y', 'l10n'],
|
||||
component: () => import('./numeronym-generator.vue'),
|
||||
icon: n7mIcon,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { DeviceMobile } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'OTP code generator',
|
||||
name: translate('tools.otp-generator.title'),
|
||||
path: '/otp-generator',
|
||||
description: 'Generate and validate time-based OTP (one time password) for multi-factor authentication.',
|
||||
description: translate('tools.otp-generator.description'),
|
||||
keywords: [
|
||||
'otp',
|
||||
'code',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
import PasswordIcon from '~icons/mdi/form-textbox-password';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Password strength analyser',
|
||||
name: translate('tools.password-strength-analyser.title'),
|
||||
path: '/password-strength-analyser',
|
||||
description: 'Discover the strength of your password with this client side only password strength analyser and crack time estimation tool.',
|
||||
description: translate('tools.password-strength-analyser.description'),
|
||||
keywords: ['password', 'strength', 'analyser', 'and', 'crack', 'time', 'estimation', 'brute', 'force', 'attack', 'entropy', 'cracking', 'hash', 'hashing', 'algorithm', 'algorithms', 'md5', 'sha1', 'sha256', 'sha512', 'bcrypt', 'scrypt', 'argon2', 'argon2id', 'argon2i', 'argon2d'],
|
||||
component: () => import('./password-strength-analyser.vue'),
|
||||
icon: PasswordIcon,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
import FileCertIcon from '~icons/mdi/file-certificate-outline';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'PDF signature checker',
|
||||
name: translate('tools.pdf-signature-checker.title'),
|
||||
path: '/pdf-signature-checker',
|
||||
description: 'Verify the signatures of a PDF file. A signed PDF file contains one or more signatures that may be used to determine whether the contents of the file have been altered since the file was signed.',
|
||||
description: translate('tools.pdf-signature-checker.description'),
|
||||
keywords: ['pdf', 'signature', 'checker', 'verify', 'validate', 'sign'],
|
||||
component: () => import('./pdf-signature-checker.vue'),
|
||||
icon: FileCertIcon,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Percentage } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Percentage calculator',
|
||||
name: translate('tools.percentage-calculator.title'),
|
||||
path: '/percentage-calculator',
|
||||
description: 'Easily calculate percentages from a value to another value, or from a percentage to a value.',
|
||||
description: translate('tools.percentage-calculator.description'),
|
||||
keywords: ['percentage', 'calculator', 'calculate', 'value', 'number', '%'],
|
||||
component: () => import('./percentage-calculator.vue'),
|
||||
icon: Percentage,
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Phone } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Phone parser and formatter',
|
||||
name: translate('tools.phone-parser-and-formatter.title'),
|
||||
path: '/phone-parser-and-formatter',
|
||||
description:
|
||||
'Parse, validate and format phone numbers. Get information about the phone number, like the country code, type, etc.',
|
||||
description: translate('tools.phone-parser-and-formatter.description'),
|
||||
keywords: [
|
||||
'phone',
|
||||
'parser',
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Qrcode } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'QR Code generator',
|
||||
name: translate('tools.qrcode-generator.title'),
|
||||
path: '/qrcode-generator',
|
||||
description:
|
||||
'Generate and download QR-code for an url or just a text and customize the background and foreground colors.',
|
||||
description: translate('tools.qrcode-generator.description'),
|
||||
keywords: ['qr', 'code', 'generator', 'square', 'color', 'link', 'low', 'medium', 'quartile', 'high', 'transparent'],
|
||||
component: () => import('./qr-code-generator.vue'),
|
||||
icon: Qrcode,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Server } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Random port generator',
|
||||
name: translate('tools.random-port-generator.title'),
|
||||
path: '/random-port-generator',
|
||||
description: 'Generate random port numbers outside of the range of "known" ports (0-1023).',
|
||||
description: translate('tools.random-port-generator.description'),
|
||||
keywords: ['system', 'port', 'lan', 'generator', 'random', 'development', 'computer'],
|
||||
component: () => import('./random-port-generator.vue'),
|
||||
icon: Server,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { LetterX } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Roman numeral converter',
|
||||
name: translate('tools.roman-numeral-converter.title'),
|
||||
path: '/roman-numeral-converter',
|
||||
description: 'Convert Roman numerals to numbers and convert numbers to Roman numerals.',
|
||||
description: translate('tools.roman-numeral-converter.description'),
|
||||
keywords: ['roman', 'arabic', 'converter', 'X', 'I', 'V', 'L', 'C', 'D', 'M'],
|
||||
component: () => import('./roman-numeral-converter.vue'),
|
||||
icon: LetterX,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Certificate } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'RSA key pair generator',
|
||||
name: translate('tools.rsa-key-pair-generator.title'),
|
||||
path: '/rsa-key-pair-generator',
|
||||
description: 'Generate new random RSA private and public key pem certificates.',
|
||||
description: translate('tools.rsa-key-pair-generator.description'),
|
||||
keywords: ['rsa', 'key', 'pair', 'generator', 'public', 'private', 'secret', 'ssh', 'pem'],
|
||||
component: () => import('./rsa-key-pair-generator.vue'),
|
||||
icon: Certificate,
|
||||
|
12
src/tools/safelink-decoder/index.ts
Normal file
12
src/tools/safelink-decoder/index.ts
Normal file
@ -0,0 +1,12 @@
|
||||
import { Mailbox } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Outlook Safelink decoder',
|
||||
path: '/safelink-decoder',
|
||||
description: 'Decode Outlook SafeLink links',
|
||||
keywords: ['outlook', 'safelink', 'decoder'],
|
||||
component: () => import('./safelink-decoder.vue'),
|
||||
icon: Mailbox,
|
||||
createdAt: new Date('2024-03-11'),
|
||||
});
|
21
src/tools/safelink-decoder/safelink-decoder.service.test.ts
Normal file
21
src/tools/safelink-decoder/safelink-decoder.service.test.ts
Normal file
@ -0,0 +1,21 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { decodeSafeLinksURL } from './safelink-decoder.service';
|
||||
|
||||
describe('safelink-decoder', () => {
|
||||
describe('decodeSafeLinksURL', () => {
|
||||
describe('decode outlook safelink urls', () => {
|
||||
it('should decode basic safelink urls', () => {
|
||||
expect(decodeSafeLinksURL('https://aus01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3Dsafelink%26rlz%3D1&data=05%7C02%7C%7C1ed07253975b46da1d1508dc3443752a%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C638442711583216725%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=%2BQY0HBnnxfI7pzZoxzlhZdDvYu80LwQB0zUUjrffVnk%3D&reserved=0'))
|
||||
.toBe('https://www.google.com/search?q=safelink&rlz=1');
|
||||
});
|
||||
it('should decode encoded safelink urls', () => {
|
||||
expect(decodeSafeLinksURL('https://aus01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.google.com%2Fsearch%3Fq%3Dsafelink%26rlz%3D1&data=05%7C02%7C%7C1ed07253975b46da1d1508dc3443752a%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C638442711583216725%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C0%7C%7C%7C&sdata=%2BQY0HBnnxfI7pzZoxzlhZdDvYu80LwQB0zUUjrffVnk%3D&reserved=0'))
|
||||
.toBe('https://www.google.com/search?q=safelink&rlz=1');
|
||||
});
|
||||
it('throw on not outlook safelink urls', () => {
|
||||
expect(() => decodeSafeLinksURL('https://google.com'))
|
||||
.toThrow('Invalid SafeLinks URL provided');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
7
src/tools/safelink-decoder/safelink-decoder.service.ts
Normal file
7
src/tools/safelink-decoder/safelink-decoder.service.ts
Normal file
@ -0,0 +1,7 @@
|
||||
export function decodeSafeLinksURL(safeLinksUrl: string) {
|
||||
if (!safeLinksUrl.match(/\.safelinks\.protection\.outlook\.com/)) {
|
||||
throw new Error('Invalid SafeLinks URL provided');
|
||||
}
|
||||
|
||||
return new URL(safeLinksUrl).searchParams.get('url');
|
||||
}
|
32
src/tools/safelink-decoder/safelink-decoder.vue
Normal file
32
src/tools/safelink-decoder/safelink-decoder.vue
Normal file
@ -0,0 +1,32 @@
|
||||
<script setup lang="ts">
|
||||
import { decodeSafeLinksURL } from './safelink-decoder.service';
|
||||
import TextareaCopyable from '@/components/TextareaCopyable.vue';
|
||||
|
||||
const inputSafeLinkUrl = ref('');
|
||||
const outputDecodedUrl = computed(() => {
|
||||
try {
|
||||
return decodeSafeLinksURL(inputSafeLinkUrl.value);
|
||||
}
|
||||
catch (e: any) {
|
||||
return e.toString();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<c-input-text
|
||||
v-model:value="inputSafeLinkUrl"
|
||||
raw-text
|
||||
placeholder="Your input Outlook SafeLink Url..."
|
||||
autofocus
|
||||
label="Your input Outlook SafeLink Url:"
|
||||
/>
|
||||
|
||||
<n-divider />
|
||||
|
||||
<n-form-item label="Output decoded URL:">
|
||||
<TextareaCopyable :value="outputDecodedUrl" :word-wrap="true" />
|
||||
</n-form-item>
|
||||
</div>
|
||||
</template>
|
@ -1,10 +1,11 @@
|
||||
import { AbcRound } from '@vicons/material';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Slugify string',
|
||||
name: translate('tools.slugify-string.title'),
|
||||
path: '/slugify-string',
|
||||
description: 'Make a string url, filename and id safe.',
|
||||
description: translate('tools.slugify-string.description'),
|
||||
keywords: ['slugify', 'string', 'escape', 'emoji', 'special', 'character', 'space', 'trim'],
|
||||
component: () => import('./slugify-string.vue'),
|
||||
icon: AbcRound,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Database } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'SQL prettify and format',
|
||||
name: translate('tools.sql-prettify.title'),
|
||||
path: '/sql-prettify',
|
||||
description: 'Format and prettify your SQL queries online (it supports various SQL dialects).',
|
||||
description: translate('tools.sql-prettify.description'),
|
||||
keywords: [
|
||||
'sql',
|
||||
'prettify',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { EyeOff } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'String obfuscator',
|
||||
name: translate('tools.string-obfuscator.title'),
|
||||
path: '/string-obfuscator',
|
||||
description: 'Obfuscate a string (like a secret, an IBAN, or a token) to make it shareable and identifiable without revealing its content.',
|
||||
description: translate('tools.string-obfuscator.description'),
|
||||
keywords: ['string', 'obfuscator', 'secret', 'token', 'hide', 'obscure', 'mask', 'masking'],
|
||||
component: () => import('./string-obfuscator.vue'),
|
||||
icon: EyeOff,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { ImageOutlined } from '@vicons/material';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'SVG placeholder generator',
|
||||
name: translate('tools.svg-placeholder-generator.title'),
|
||||
path: '/svg-placeholder-generator',
|
||||
description: 'Generate svg images to use as placeholder in your applications.',
|
||||
description: translate('tools.svg-placeholder-generator.description'),
|
||||
keywords: ['svg', 'placeholder', 'generator', 'image', 'size', 'mockup'],
|
||||
component: () => import('./svg-placeholder-generator.vue'),
|
||||
icon: ImageOutlined,
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Temperature } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Temperature converter',
|
||||
name: translate('tools.temperature-converter.title'),
|
||||
path: '/temperature-converter',
|
||||
description:
|
||||
'Temperature degrees conversions for Kelvin, Celsius, Fahrenheit, Rankine, Delisle, Newton, Réaumur and Rømer.',
|
||||
description: translate('tools.temperature-converter.description'),
|
||||
keywords: [
|
||||
'temperature',
|
||||
'converter',
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { FileDiff } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Text diff',
|
||||
name: translate('tools.text-diff.title'),
|
||||
path: '/text-diff',
|
||||
description: 'Compare two texts and see the differences between them.',
|
||||
description: translate('tools.text-diff.description'),
|
||||
keywords: ['text', 'diff', 'compare', 'string', 'text diff', 'code'],
|
||||
component: () => import('./text-diff.vue'),
|
||||
icon: FileDiff,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { FileText } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Text statistics',
|
||||
name: translate('tools.text-statistics.title'),
|
||||
path: '/text-statistics',
|
||||
description: 'Get information about a text, the amount of characters, the amount of words, it\'s size, ...',
|
||||
description: translate('tools.text-statistics.description'),
|
||||
keywords: ['text', 'statistics', 'length', 'characters', 'count', 'size', 'bytes'],
|
||||
component: () => import('./text-statistics.vue'),
|
||||
icon: FileText,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Binary } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Text to ASCII binary',
|
||||
name: translate('tools.text-to-binary.title'),
|
||||
path: '/text-to-binary',
|
||||
description: 'Convert text to its ASCII binary representation and vice versa.',
|
||||
description: translate('tools.text-to-binary.description'),
|
||||
keywords: ['text', 'to', 'binary', 'converter', 'encode', 'decode', 'ascii'],
|
||||
component: () => import('./text-to-binary.vue'),
|
||||
icon: Binary,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Speakerphone } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Text to NATO alphabet',
|
||||
name: translate('tools.text-to-nato-alphabet.title'),
|
||||
path: '/text-to-nato-alphabet',
|
||||
description: 'Transform text into NATO phonetic alphabet for oral transmission.',
|
||||
description: translate('tools.text-to-nato-alphabet.description'),
|
||||
keywords: ['string', 'nato', 'alphabet', 'phonetic', 'oral', 'transmission'],
|
||||
component: () => import('./text-to-nato-alphabet.vue'),
|
||||
icon: Speakerphone,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { TextWrap } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Text to Unicode',
|
||||
name: translate('tools.text-to-unicode.title'),
|
||||
path: '/text-to-unicode',
|
||||
description: 'Parse and convert text to unicode and vice-versa',
|
||||
description: translate('tools.text-to-unicode.description'),
|
||||
keywords: ['text', 'to', 'unicode'],
|
||||
component: () => import('./text-to-unicode.vue'),
|
||||
icon: TextWrap,
|
||||
|
@ -13,11 +13,11 @@ const { copy: copyText } = useCopy({ source: textFromUnicode });
|
||||
|
||||
<template>
|
||||
<c-card title="Text to Unicode">
|
||||
<c-input-text v-model:value="inputText" multiline placeholder="e.g. 'Hello Avengers'" label="Enter text to convert to binary" autosize autofocus raw-text test-id="text-to-unicode-input" />
|
||||
<c-input-text v-model:value="inputText" multiline placeholder="e.g. 'Hello Avengers'" label="Enter text to convert to unicode" autosize autofocus raw-text test-id="text-to-unicode-input" />
|
||||
<c-input-text v-model:value="unicodeFromText" label="Unicode from your text" multiline raw-text readonly mt-2 placeholder="The unicode representation of your text will be here" test-id="text-to-unicode-output" />
|
||||
<div mt-2 flex justify-center>
|
||||
<c-button :disabled="!unicodeFromText" @click="copyUnicode()">
|
||||
Copy binary to clipboard
|
||||
Copy unicode to clipboard
|
||||
</c-button>
|
||||
</div>
|
||||
</c-card>
|
||||
|
@ -1,15 +0,0 @@
|
||||
tools:
|
||||
token-generator:
|
||||
title: Token generator
|
||||
description: Generate random string with the chars you want, uppercase or lowercase letters, numbers and/or symbols.
|
||||
|
||||
uppercase: Uppercase (ABC...)
|
||||
lowercase: Lowercase (abc...)
|
||||
numbers: Numbers (123...)
|
||||
symbols: Symbols (!-;...)
|
||||
length: Length
|
||||
tokenPlaceholder: 'The token...'
|
||||
copied: Token copied to the clipboard
|
||||
button:
|
||||
copy: Copy
|
||||
refresh: Refresh
|
@ -1,15 +0,0 @@
|
||||
tools:
|
||||
token-generator:
|
||||
title: Token generator
|
||||
description: Genera una cadena aleatoria con los caracteres que desees, letras mayúsculas o minúsculas, números y/o símbolos.
|
||||
|
||||
uppercase: Mayúsculas (ABC...)
|
||||
lowercase: Minúsculas (abc...)
|
||||
numbers: Números (123...)
|
||||
symbols: Símbolos (!-;...)
|
||||
length: Longitud
|
||||
tokenPlaceholder: 'The token...'
|
||||
copied: Token copiado al portapapeles
|
||||
button:
|
||||
copy: Copiar
|
||||
refresh: Actualizar
|
@ -1,16 +0,0 @@
|
||||
tools:
|
||||
token-generator:
|
||||
title: Générateur de token
|
||||
description: >-
|
||||
Génère une chaîne aléatoire avec les caractères que vous voulez, lettres
|
||||
majuscules ou minuscules, chiffres et/ou symboles.
|
||||
uppercase: Majuscules (ABC...)
|
||||
lowercase: Minuscules (abc...)
|
||||
numbers: Chiffres (123...)
|
||||
symbols: Symboles (!-;...)
|
||||
button:
|
||||
copy: Copier
|
||||
refresh: Rafraichir
|
||||
copied: Le token a été copié
|
||||
length: Longueur
|
||||
tokenPlaceholder: Le token...
|
@ -1,11 +1,12 @@
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
import BracketIcon from '~icons/mdi/code-brackets';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'TOML to JSON',
|
||||
name: translate('tools.toml-to-json.title'),
|
||||
path: '/toml-to-json',
|
||||
description: 'Parse and convert TOML to JSON.',
|
||||
description: translate('tools.toml-to-json.description'),
|
||||
keywords: ['toml', 'json', 'convert', 'online', 'transform', 'parser'],
|
||||
component: () => import('./toml-to-json.vue'),
|
||||
icon: BracketIcon,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
import BracketIcon from '~icons/mdi/code-brackets';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'TOML to YAML',
|
||||
name: translate('tools.toml-to-yaml.title'),
|
||||
path: '/toml-to-yaml',
|
||||
description: 'Parse and convert TOML to YAML.',
|
||||
description: translate('tools.toml-to-yaml.description'),
|
||||
keywords: ['toml', 'yaml', 'convert', 'online', 'transform', 'parse'],
|
||||
component: () => import('./toml-to-yaml.vue'),
|
||||
icon: BracketIcon,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { SortDescendingNumbers } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'ULID generator',
|
||||
name: translate('tools.ulid-generator.title'),
|
||||
path: '/ulid-generator',
|
||||
description: 'Generate random Universally Unique Lexicographically Sortable Identifier (ULID).',
|
||||
description: translate('tools.ulid-generator.description'),
|
||||
keywords: ['ulid', 'generator', 'random', 'id', 'alphanumeric', 'identity', 'token', 'string', 'identifier', 'unique'],
|
||||
component: () => import('./ulid-generator.vue'),
|
||||
icon: SortDescendingNumbers,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Link } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Encode/decode url formatted strings',
|
||||
name: translate('tools.url-encoder.title'),
|
||||
path: '/url-encoder',
|
||||
description: 'Encode to url-encoded format (also known as "percent-encoded") or decode from it.',
|
||||
description: translate('tools.url-encoder.description'),
|
||||
keywords: ['url', 'encode', 'decode', 'percent', '%20', 'format'],
|
||||
component: () => import('./url-encoder.vue'),
|
||||
icon: Link,
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Unlink } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'Url parser',
|
||||
name: translate('tools.url-parser.title'),
|
||||
path: '/url-parser',
|
||||
description:
|
||||
'Parse an url string to get all the different parts (protocol, origin, params, port, username-password, ...)',
|
||||
description: translate('tools.url-parser.description'),
|
||||
keywords: ['url', 'parser', 'protocol', 'origin', 'params', 'port', 'username', 'password', 'href'],
|
||||
component: () => import('./url-parser.vue'),
|
||||
icon: Unlink,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Browser } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'User-agent parser',
|
||||
name: translate('tools.user-agent-parser.title'),
|
||||
path: '/user-agent-parser',
|
||||
description: 'Detect and parse Browser, Engine, OS, CPU, and Device type/model from an user-agent string.',
|
||||
description: translate('tools.user-agent-parser.description'),
|
||||
keywords: ['user', 'agent', 'parser', 'browser', 'engine', 'os', 'cpu', 'device', 'user-agent', 'client'],
|
||||
component: () => import('./user-agent-parser.vue'),
|
||||
icon: Browser,
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Fingerprint } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'UUIDs generator',
|
||||
name: translate('tools.uuid-generator.title'),
|
||||
path: '/uuid-generator',
|
||||
description:
|
||||
'A Universally Unique Identifier (UUID) is a 128-bit number used to identify information in computer systems. The number of possible UUIDs is 16^32, which is 2^128 or about 3.4x10^38 (which is a lot!).',
|
||||
description: translate('tools.uuid-generator.description'),
|
||||
keywords: ['uuid', 'v4', 'random', 'id', 'alphanumeric', 'identity', 'token', 'string', 'identifier', 'unique', 'v1', 'v3', 'v5', 'nil'],
|
||||
component: () => import('./uuid-generator.vue'),
|
||||
icon: Fingerprint,
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Qrcode } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'WiFi QR Code generator',
|
||||
name: translate('tools.wifi-qrcode-generator.title'),
|
||||
path: '/wifi-qrcode-generator',
|
||||
description:
|
||||
'Generate and download QR-codes for quick connections to WiFi networks.',
|
||||
description: translate('tools.wifi-qrcode-generator.description'),
|
||||
keywords: ['qr', 'code', 'generator', 'square', 'color', 'link', 'low', 'medium', 'quartile', 'high', 'transparent', 'wifi'],
|
||||
component: () => import('./wifi-qr-code-generator.vue'),
|
||||
icon: Qrcode,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { Code } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'XML formatter',
|
||||
name: translate('tools.xml-formatter.title'),
|
||||
path: '/xml-formatter',
|
||||
description: 'Prettify your XML string to a human friendly readable format.',
|
||||
description: translate('tools.xml-formatter.description'),
|
||||
keywords: ['xml', 'prettify', 'format'],
|
||||
component: () => import('./xml-formatter.vue'),
|
||||
icon: Code,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { AlignJustified } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'YAML to JSON converter',
|
||||
name: translate('tools.yaml-to-json-converter.title'),
|
||||
path: '/yaml-to-json-converter',
|
||||
description: 'Simply convert YAML to JSON with this live online converter.',
|
||||
description: translate('tools.yaml-to-json-converter.description'),
|
||||
keywords: ['yaml', 'to', 'json'],
|
||||
component: () => import('./yaml-to-json.vue'),
|
||||
icon: AlignJustified,
|
||||
|
@ -1,10 +1,11 @@
|
||||
import { AlignJustified } from '@vicons/tabler';
|
||||
import { defineTool } from '../tool';
|
||||
import { translate } from '@/plugins/i18n.plugin';
|
||||
|
||||
export const tool = defineTool({
|
||||
name: 'YAML to TOML',
|
||||
name: translate('tools.yaml-to-toml.title'),
|
||||
path: '/yaml-to-toml',
|
||||
description: 'Parse and convert YAML to TOML.',
|
||||
description: translate('tools.yaml-to-toml.description'),
|
||||
keywords: ['yaml', 'to', 'toml', 'convert', 'transform'],
|
||||
component: () => import('./yaml-to-toml.vue'),
|
||||
icon: AlignJustified,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user