diff --git a/README.md b/README.md index 2b7a4c9..636b5da 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# EmojiCrypt Version 3.2.0 🌈 +# EmojiCrypt Version 3.3.2 🌈 Your convenient and secure text encryption, where emojis are all that matters. This repo is hosted here: @@ -22,8 +22,8 @@ The idea is to implement a protocol where only you and the receiver knows what t - Generate emoji keys which look like encrypted messages - Save keys within the browser - Site can be added to homescreen on Android and iOS to act as an app (Webapp) -- The web app is available in 7 languages (feel free to improve the automated translations, not all features have been translated yet) -- Dark mode +- The web app is available in 7 languages (feel free to improve the automated translations) +- Auto Dark mode ### Basic Security Information 🔐 @@ -50,7 +50,7 @@ The idea is to implement a protocol where only you and the receiver knows what t 3. The hash before that 4. A custom, fixed salt that differs in each of the 16 switch cases - Custom Hash Loop Lengths: As of version 1.1.0, different encryption algorithms have varying hash loop lengths and intermediate salt integers. Therefore, each of the three encryption algorithms uses a custom, deterministically derived key: 256-bit for AES and 4096-byte for XOR (as of version 3.0.0) -- *On modern devices, the hashing time can range from a minimum of 400 to a maximum of 1500 miliseconds and it is heavily dependent of the random salt* +- *On modern devices, the hashing time can range from a minimum of ~700 to a maximum of ~1000 miliseconds and it is dependent of the random salt resulting in more or less hash rounds and a different distribution in more computationally intensive hash functions (SHA-384,SHA-512)* - Additional obfuscation: As of version 3.1.0, the binary-to-emoji algorithm employs a unique emoji sorting order derived from the input key. ## Includes ⤴️ diff --git a/index.html b/index.html index 84f9409..447d90f 100644 --- a/index.html +++ b/index.html @@ -128,12 +128,20 @@
- +
- Your browser does not support this application. Please update your system. + Your browser does not support this application. Please update your browser or system.
+ +
@@ -224,12 +232,12 @@

- 💎 Private Algorithm + 💎 Private Algorithm
- Your link to the private conversion algorithm:
+ Your link to the private conversion algorithm:
🧬 @@ -243,7 +251,7 @@
- You can use a private algorithm with a unique key to obfuscate your messages. + You can use a private algorithm with a unique key to obfuscate your messages.
@@ -335,6 +343,31 @@
+ +
+
+
+ +
+
+
+
+ + To use the private algorithm: +
    +
  • Ensure you're on the Conversion app (the default app).
  • +
  • Click 💎 Private Algorithm and generate a key.
  • +
  • You can use the conversion app like before.
  • +
  • Share the link with your receipient.
  • +
  • When the key does not match, the output is gibberish.
  • +
  • The more you use the same key for different messages and the longer the messages are, the easier it is to crack the key.
  • +
+
+
+
+
@@ -764,7 +797,7 @@
Privacy Policy for NasaEmoji
if ( privateConversionId ) { customEmojiArray = await generateSecurePermutationFromString(privateConversionId, getEmojiArray()); $('#privateConversionLink').val(window.location.href); - $('#convertTopMessage').html("A private algorithm is used.
Click '💎 Private Algorithm' for more information.
") + $('#convertTopMessage').html(getTranslation('privateAlgorithmHeader', languageIndex)); $('#disablePrivateConversionButton').removeClass('d-none'); } else { customEmojiArray = null; @@ -787,6 +820,25 @@
Privacy Policy for NasaEmoji
{ code: 'fr', name: 'French 🇫🇷' }, { code: 'ar', name: 'Arabic 🇸🇦' }, ]; + + /** + * Retrieves the matching language code from the global languages array by reading the user set language. + * + * @returns {string|null} The matching language code if found, otherwise `null`. + */ + function getUserLanguageCode() { + // Get the user's preferred language from the browser + const userLanguage = navigator.language || (navigator.languages && navigator.languages[0]) || 'en'; + + // Extract the primary language code (e.g., 'en' from 'en-US') + const primaryCode = userLanguage.split('-')[0].toLowerCase(); + + // Find the language with the primary code + const language = languages.find(lang => lang.code.toLowerCase() === primaryCode); + + // Return the language code if found, otherwise null + return language ? language.code : null; + } /** * Get the language code from the URL parameter 'lang'. @@ -811,10 +863,11 @@
Privacy Policy for NasaEmoji
* @returns {Object} An object containing languageCode and languageIndex. */ function initializeLanguage() { - let languageCode = getLanguageCodeFromURL() || localStorage.getItem('lang') || 'en'; + let languageCode = getLanguageCodeFromURL() || localStorage.getItem('lang') || getUserLanguageCode() || 'en'; let languageIndex = getLanguageIndexFromCode(languageCode); if (languageIndex === -1) { + languageCode = 'en'; languageIndex = 0; } @@ -851,6 +904,13 @@
Privacy Policy for NasaEmoji
{ selector: '#explanation', key: 'explanation' }, { selector: '#footerHighlight', key: 'footerHighlight' }, { selector: '#footerSource', key: 'footerSource' }, + { selector: '#privateLinkText', key: 'privateLinkText' }, + { selector: '#copyPrivateConversionLink', key: 'copyPrivateConversionLink' }, + { selector: '#disablePrivateConversionButton', key: 'disablePrivateConversionButton' }, + { selector: '#privateAlgorithmDisclaimer', key: 'privateAlgorithmDisclaimer' }, + { selector: '#generatePrivateConversionButton', key: 'generatePrivateConversionButton' }, + { selector: '#privateAlgorithmFooter', key: 'privateAlgorithmFooter' }, + { selector: '#showPrivateAlgorithmButton', key: 'showPrivateAlgorithmButton' }, ]; // Elements to update placeholder attributes @@ -865,7 +925,7 @@
Privacy Policy for NasaEmoji
* @param {number} languageIndex - Index of the current language. */ function updateFAQItems(languageIndex) { - const faqItemCount = 24; + const faqItemCount = 25; for (let i = 1; i <= faqItemCount; i++) { $(`#faqQuestion${i}`).html(getTranslation(`faqQuestion${i}`, languageIndex)); $(`#faqAnswer${i}`).html(getTranslation(`faqAnswer${i}`, languageIndex)); @@ -957,11 +1017,22 @@
Privacy Policy for NasaEmoji
/** * Check if dark mode is enabled. - * @returns {boolean} True if dark mode is enabled. + * @returns {boolean} True if dark mode is enabled */ function isDarkModeEnabled() { return localStorage.getItem('darkMode') === 'true'; } + + /** + * DarkMode Toggle for site device + */ + function handleDarkModeToggle () { + if (isDarkModeEnabled()) { + disableDarkMode(); + } else { + enableDarkMode(); + } + } const darkModeClassToggles = [ { selector: 'body', classes: 'bg-dark text-light dark-mode' }, @@ -978,11 +1049,11 @@
Privacy Policy for NasaEmoji
{ selector: '.form-control', classes: 'bg-secondary text-light' }, { selector: 'footer', removeClasses: 'bg-light', classes: 'bg-dark text-light' }, ]; - + /** * Enable dark mode by adding appropriate classes. */ - function enableDarkMode() { + function enableDarkMode(fromToggle = false) { darkModeClassToggles.forEach((item) => { if (item.removeClasses) { $(item.selector).removeClass(item.removeClasses); @@ -1022,6 +1093,22 @@
Privacy Policy for NasaEmoji
localStorage.setItem('darkMode', 'false'); $('#darkModeMenu').html(getTranslation('enableDarkMode', languageIndex)); } + + function setAutoDarkMode () { + if (darkModeDeviceIsActive()) { + enableDarkMode(); + } else { + disableDarkMode(); + } + } + /** + * Get device dark mode information + * + * @returns {boolean} Returns True if device dark mode is enabled + */ + function darkModeDeviceIsActive() { + return (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches); + } // ======================================= // Section Transition Handling @@ -1209,16 +1296,16 @@
Privacy Policy for NasaEmoji
switch (currentMenu) { case 'encryptSection': - title = 'Encrypt Text with Emojis - Emoji Encryption Tool'; - description = 'Securely encrypt and decrypt messages using emojis.'; + title = getTranslation('metaTitleEncrypt', languageIndex); + description = getTranslation('metaDescriptionEncrypt', languageIndex); break; case 'convertSection': - title = 'Convert Text to Emojis - Emoji Conversion Tool'; - description = 'Easily convert your text into emojis and back.'; + title = getTranslation('metaTitleConvert', languageIndex); + description = getTranslation('metaTitleEncrypt', languageIndex); break; case 'aboutSection': - title = 'About Emoji Encryption Tool'; - description = 'Learn more about our emoji encryption and conversion tool.'; + title = getTranslation('metaTitleAbout', languageIndex); + description = getTranslation('metaDescriptionAbout', languageIndex); break; } @@ -1270,17 +1357,17 @@
Privacy Policy for NasaEmoji
}; // Dark Mode Toggle - if (isDarkModeEnabled()) { - enableDarkMode(); - } else { - disableDarkMode(); - } + setAutoDarkMode(); $('#darkModeMenu').click(function () { - if (isDarkModeEnabled()) { - disableDarkMode(); - } else { + handleDarkModeToggle() + }); + + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { + if (event.matches) { enableDarkMode(); + } else { + disableDarkMode(); } }); @@ -1483,17 +1570,17 @@
Privacy Policy for NasaEmoji
$('#privateConversionLink').val(window.location.href); $('#disablePrivateConversionButton').removeClass('d-none'); - $('#convertTopMessage').html("A private algorithm is used.
Click '💎 Private Algorithm' for more information.
") - $thisButton.removeClass('bg-dark').addClass('bg-success').text("⚙️ Private algorithm generated!"); + $('#convertTopMessage').html(getTranslation('privateAlgorithmHeader', languageIndex)); + $thisButton.removeClass('bg-dark').addClass('bg-success').text(getTranslation('btnPrivateAlgorithmGenerated', languageIndex)); await new Promise((r) => setTimeout(r, 5000)); - $thisButton.addClass('bg-dark').removeClass('bg-success').text("🔮 Generate (new) private algorithm"); + $thisButton.addClass('bg-dark').removeClass('bg-success').text(getTranslation('generatePrivateConversionButton', languageIndex)); }); // Handle remove private algorithm button $('#disablePrivateConversionButton').click(async function () { if (customEmojiArray) { - if (confirm("Do you want to remove the private algorithm?")) { + if (confirm(getTranslation('modalDisablePrivateAlgorithm', languageIndex))) { if (localStorage.getItem("pa")) { localStorage.removeItem("pa"); } @@ -1503,10 +1590,10 @@
Privacy Policy for NasaEmoji
updateURLParameter(); $('#privateConversionLink').val(null); $('#convertTopMessage').addClass('d-none'); - $thisButton.text("Algorithm removed."); + $thisButton.text(getTranslation('btnPrivateAlgorithmRemoved', languageIndex)); await new Promise((r) => setTimeout(r, 4000)); $thisButton.addClass('d-none'); - $thisButton.text("🗑️ Remove private algorithm"); + $thisButton.text(getTranslation('disablePrivateConversionButton', languageIndex)); } } }); @@ -1538,6 +1625,7 @@
Privacy Policy for NasaEmoji
// Update the UI language updateUILanguage(); + updateMetadata(); // Update the URL history.pushState(null, '', href); diff --git a/js/emo.js b/js/emo.js index a53dcd5..8f6856a 100644 --- a/js/emo.js +++ b/js/emo.js @@ -3,9 +3,19 @@ * @returns {string} The current version. */ function getVersion() { - return "3.2.0"; + return "3.3.2"; } +/* +Hash count analysis + +let s1 = 0; +let s2 = 0; +let s3 = 0; +let s5 = 0; + +*/ + /** * Calculates a security level based on the SHA-256 hash of the password. * @param {string} pass - The password input. @@ -61,72 +71,91 @@ async function returnHash(seed) { nibbles.push(byte & 0xF); } + const caseSalts = [ + encodeUTF8("SF39"), + encodeUTF8("DS44"), + encodeUTF8("XL55"), + encodeUTF8("NC01"), + encodeUTF8("LU50"), + encodeUTF8("GL12"), + encodeUTF8("GG31"), + encodeUTF8("HL11"), + encodeUTF8("XF91"), + encodeUTF8("BM15"), + encodeUTF8("TT85"), + encodeUTF8("RF19"), + encodeUTF8("MS25"), + encodeUTF8("0X80"), + encodeUTF8("MX55"), + encodeUTF8("WT66"), + ]; + for (const nibble of nibbles) { let hashInput; switch (nibble) { case 0: - hashInput = concatUint8Arrays(key, encodeUTF8("SF39"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[0], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-384'); break; case 1: - hashInput = concatUint8Arrays(key, encodeUTF8("DS44"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[1], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-384'); break; case 2: - hashInput = concatUint8Arrays(key, encodeUTF8("XL55"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[2], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-384'); break; case 3: - hashInput = concatUint8Arrays(key, encodeUTF8("NC01"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[3], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-384'); break; case 4: - hashInput = concatUint8Arrays(key, encodeUTF8("LU50"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[4], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-512'); break; case 5: - hashInput = concatUint8Arrays(key, encodeUTF8("GL12"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[5], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-512'); break; case 6: - hashInput = concatUint8Arrays(key, encodeUTF8("GG31"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[6], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-512'); break; case 7: - hashInput = concatUint8Arrays(key, encodeUTF8("HL11"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[7], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-512'); break; case 8: - hashInput = concatUint8Arrays(key, encodeUTF8("XF91"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[8], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-256'); break; case 9: - hashInput = concatUint8Arrays(key, encodeUTF8("BM15"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[9], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-256'); break; case 10: - hashInput = concatUint8Arrays(key, encodeUTF8("TT85"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[10], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-256'); break; case 11: - hashInput = concatUint8Arrays(key, encodeUTF8("RF19"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[11], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-1'); break; case 12: - hashInput = concatUint8Arrays(key, encodeUTF8("MS25"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[12], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-1'); break; case 13: - hashInput = concatUint8Arrays(key, encodeUTF8("0X80"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[13], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-1'); break; case 14: - hashInput = concatUint8Arrays(key, encodeUTF8("MX55"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[14], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-1'); break; case 15: - hashInput = concatUint8Arrays(key, encodeUTF8("WT66"), pastHashes[0], pastHashes[1]); + hashInput = concatUint8Arrays(key, caseSalts[15], pastHashes[0], pastHashes[1]); key = await hashData(hashInput, 'SHA-256'); break; } @@ -136,7 +165,10 @@ async function returnHash(seed) { pastHashes.shift(); } - return key; + const finalHashInput = concatUint8Arrays(...pastHashes); + const finalHash = await hashData(finalHashInput, 'SHA-512'); + + return finalHash; } /** @@ -188,7 +220,7 @@ async function getCryptoKeys(keyInput, inputSalt = null) { const securityLevelKeyBased = await getSecLevel(keyInput); const securityLevelSaltBased = customSalt[0]; const securityLevelCombined = Math.floor((securityLevelKeyBased + securityLevelSaltBased) / 2); - const securityLevel = 383 + securityLevelCombined - 25; + const securityLevel = 383 + securityLevelCombined - 121; // Step 4: Iterate hashPass based on security level for (let i = 0; i < securityLevel; i++) { @@ -244,6 +276,16 @@ async function getCryptoKeys(keyInput, inputSalt = null) { console.timeEnd("keyHash"); + /* + Hash count analysis + console.log(s1, s2, s3, s5, s1+s2+s3+s5) + + s1 = 0; + s2 = 0; + s3 = 0; + s5 = 0; + */ + return { aesKey1, aesKey2, xorKey, customSalt }; } @@ -279,7 +321,7 @@ async function encrypt(message, keyInput) { // Step 6: Convert Encrypted Data to Emojis const encryptedEmoji = mapBytesToSymbols(finalOutput, emojiArrayPermutation); - return encryptedEmoji.join("​"); + return encryptedEmoji.join(''); } /** @@ -295,7 +337,9 @@ async function decrypt(message, keyInput) { const standardEmojiArray = getEmojiArray(); const emojiArrayPermutation = await generateSecurePermutationFromString(keyInput, standardEmojiArray); - const decodedBytes = mapSymbolsToBytes(message.split("​"), emojiArrayPermutation); + const emojiArray = extractEmojis(message); + + const decodedBytes = mapSymbolsToBytes(emojiArray, emojiArrayPermutation); // Step 0.5: Split between salt and encrypted bytes and get the CryptoKeys using the salt const customSalt = decodedBytes.slice(0,6); @@ -323,20 +367,20 @@ async function decrypt(message, keyInput) { /** * Encodes a message into emojis without encryption. * @param {string} message - The message to encode. - * @param {Array} customEmojiArray - An custom order of the emoji Array generated by the private algorithm + * @param {Array} customEmojiArray - A custom order of the emoji Array generated by the private algorithm * @returns {string} The encoded message represented as emojis. */ function encode(message, customEmojiArray = null) { const bytes = new TextEncoder().encode(message); const emojis = customEmojiArray || getEmojiArray(); const encodedEmoji = mapBytesToSymbols(bytes, emojis); - return encodedEmoji.join("​"); + return encodedEmoji.join(''); } /** * Decodes a message from emojis without decryption. * @param {string} message - The message represented as emojis. - * @param {Array} customEmojiArray - An custom order of the emoji Array generated by the private algorithm + * @param {Array} customEmojiArray - A custom order of the emoji Array generated by the private algorithm * @returns {string} The decoded message. */ function decode(message, customEmojiArray = null) { @@ -345,7 +389,9 @@ function decode(message, customEmojiArray = null) { const emojis = customEmojiArray || getEmojiArray(); try { // Split into array and map emojis to bytes - bytes = mapSymbolsToBytes(message.split("​"), emojis); + const emojiArray = extractEmojis(message); + + bytes = mapSymbolsToBytes(emojiArray, emojis); decoded = new TextDecoder().decode(Uint8Array.from(bytes)); } catch (err) { return ""; @@ -383,14 +429,14 @@ async function generateRandomKey() { * @returns {string|boolean} Returns 'emoji' if it's an encoded emoji string, otherwise false. */ function checkInputString(inputString) { + const counts = countEmojisAndNonEmojis(inputString); + if (inputString === "") { console.log("Input is empty"); return false; } - - // Count the number of zero-width spaces (used as separators) - if ((inputString.split('​').length - 1) > 2) { - console.log("Input is Encoded Emoji"); + // at least 3 emojis and emoji only should count as encoded + if (counts.matches > 2 && counts.notMatches == 0) { return "emoji"; } return false; diff --git a/js/lang.js b/js/lang.js index f824950..53d3ce9 100644 --- a/js/lang.js +++ b/js/lang.js @@ -7,7 +7,7 @@ function getTranslation(key, langIndex) { const translations = { // Navbar elements - "navbarBrand": [ + navbarBrand: [ "Text 📄 🔄 🌈 Emoji", "Text 📄 🔄 🌈 Emoji", // German "文本 📄 🔄 🌈 Emoji", // Modern Chinese @@ -15,9 +15,69 @@ function getTranslation(key, langIndex) { "Texto 📄 🔄 🌈 Emoji", // Spanish "Texte 📄 🔄 🌈 Emoji", // French "النص 📄 🔄 🌈 إيموجي", // Arabic - "" // Placeholder for additional languages - ], - "enableDarkMode": [ + "", // Placeholder for additional languages + ], + metaTitleEncrypt: [ + "Encrypt Text with Emojis - Emoji Encryption Tool", + "Verschlüssele Text mit Emojis - Emoji-Verschlüsselungstool", + "使用表情符号加密文本 - 表情符号加密工具", + "Зашифруйте текст с помощью эмодзи - Инструмент шифрования эмодзи", + "Cifrar Texto con Emojis - Herramienta de Encriptación de Emojis", + "Chiffrer du texte avec des emojis - Outil de cryptage Emoji", + "تشفير النص باستخدام الرموز التعبيرية - أداة تشفير الرموز التعبيرية", + "", + ], + metaDescriptionEncrypt: [ + "Securely encrypt and decrypt messages using emojis.", + "Verschlüssele und entschlüssele Nachrichten sicher mit Emojis.", + "使用表情符号安全地加密和解密消息。", + "Безопасно шифруйте и расшифровывайте сообщения с помощью эмодзи.", + "Encripta y desencripta mensajes de forma segura usando emojis.", + "Sécurise le cryptage et le décryptage des messages avec des emojis.", + "قم بتشفير وفك تشفير الرسائل بأمان باستخدام الرموز التعبيرية.", + "", + ], + metaTitleConvert: [ + "Convert Text to Emojis - Emoji Conversion Tool", + "Text in Emojis umwandeln - Emoji-Konvertierungstool", + "将文本转换为表情符号 - 表情符号转换工具", + "Преобразуйте текст в эмодзи - Инструмент конвертации эмодзи", + "Convertir Texto a Emojis - Herramienta de Conversión de Emojis", + "Convertir du texte en emojis - Outil de conversion Emoji", + "تحويل النص إلى رموز تعبيرية - أداة تحويل الرموز التعبيرية", + "", + ], + metaDescriptionConvert: [ + "Securely convert your text to emojis and back.", + "Konvertiere deinen Text sicher in Emojis und zurück.", + "安全地将文本转换为表情符号并恢复。", + "Безопасно преобразуйте ваш текст в эмодзи и обратно.", + "Convierte tu texto a emojis y viceversa de forma segura.", + "Convertis ton texte en emojis et inversement en toute sécurité.", + "حوّل نصك إلى رموز تعبيرية والعكس بأمان.", + "", + ], + metaTitleAbout: [ + "About Emoji Encryption Tool", + "Über das Emoji-Verschlüsselungstool", + "关于表情符号加密工具", + "О инструменте шифрования эмодзи", + "Acerca de la Herramienta de Encriptación de Emojis", + "À propos de l'outil de cryptage Emoji", + "حول أداة تشفير الرموز التعبيرية", + "", + ], + metaDescriptionAbout: [ + "Learn more about our emoji encryption and conversion tool.", + "Erfahre mehr über unser Emoji-Verschlüsselungs- und -Konvertierungstool.", + "了解更多关于我们的表情符号加密和转换工具。", + "Узнайте больше о нашем инструменте шифрования и конвертации эмодзи.", + "Aprende más sobre nuestra herramienta de encriptación y conversión de emojis.", + "En savoir plus sur notre outil de cryptage et de conversion Emoji.", + "تعرف أكثر على أداتنا لتشفير وتحويل الرموز التعبيرية.", + "", + ], + enableDarkMode: [ "Dark Mode", "Dunkler Modus", "深色模式", @@ -25,9 +85,9 @@ function getTranslation(key, langIndex) { "Modo Oscuro", "Mode Sombre", "الوضع الداكن", - "" + "", ], - "disableDarkMode": [ + disableDarkMode: [ "Light Mode", "Heller Modus", "浅色模式", @@ -35,9 +95,9 @@ function getTranslation(key, langIndex) { "Modo Claro", "Mode Clair", "الوضع الفاتح", - "" + "", ], - "chooseAppMenu": [ + chooseAppMenu: [ "Choose App", "App auswählen", "选择应用", @@ -45,9 +105,9 @@ function getTranslation(key, langIndex) { "Elegir aplicación", "Choisir l'application", "اختر التطبيق", - "" + "", ], - "convertMenu": [ + convertMenu: [ "🔄 Convert", "🔄 Konvertieren", "🔄 转换", @@ -55,9 +115,9 @@ function getTranslation(key, langIndex) { "🔄 Convertir", "🔄 Convertir", "🔄 تحويل", - "" + "", ], - "encryptMenu": [ + encryptMenu: [ "🔐 Encrypt", "🔐 Verschlüsseln", "🔐 加密", @@ -65,9 +125,9 @@ function getTranslation(key, langIndex) { "🔐 Encriptar", "🔐 Chiffrer", "🔐 تشفير", - "" + "", ], - "aboutMenu": [ + aboutMenu: [ "About", "Über", "关于", @@ -75,10 +135,10 @@ function getTranslation(key, langIndex) { "Acerca de", "À propos", "حول", - "" + "", ], // Encryption section elements - "clearEncryptInputButton": [ + clearEncryptInputButton: [ "Delete
Message", "Nachricht
löschen", "删除
消息", @@ -86,9 +146,9 @@ function getTranslation(key, langIndex) { "Eliminar
Mensaje", "Supprimer
Message", "حذف
الرسالة", - "" + "", ], - "encryptDecryptButton": [ + encryptDecryptButton: [ "🔀 Encrypt / Decrypt", "🔀 Verschlüsseln / Entschlüsseln", "🔀 加密 / 解密", @@ -96,9 +156,9 @@ function getTranslation(key, langIndex) { "🔀 Encriptar / Desencriptar", "🔀 Chiffrer / Déchiffrer", "🔀 تشفير / فك تشفير", - "" + "", ], - "copyKeyButton": [ + copyKeyButton: [ "Copy", "Kopieren", "复制", @@ -106,9 +166,9 @@ function getTranslation(key, langIndex) { "Copiar", "Copier", "نسخ", - "" + "", ], - "keyInstructions": [ + keyInstructions: [ "Load or save keys", "Schlüssel laden oder speichern", "加载或保存密钥", @@ -116,9 +176,9 @@ function getTranslation(key, langIndex) { "Cargar o guardar claves", "Charger ou sauvegarder les clés", "تحميل أو حفظ المفاتيح", - "" + "", ], - "loadKeyButton": [ + loadKeyButton: [ "📲 Load", "📲 Laden", "📲 加载", @@ -126,9 +186,9 @@ function getTranslation(key, langIndex) { "📲 Cargar", "📲 Charger", "📲 تحميل", - "" + "", ], - "saveKeyButton": [ + saveKeyButton: [ "💾 Save", "💾 Speichern", "💾 保存", @@ -136,9 +196,9 @@ function getTranslation(key, langIndex) { "💾 Guardar", "💾 Sauvegarder", "💾 حفظ", - "" + "", ], - "copyEncryptOutputButton": [ + copyEncryptOutputButton: [ "Copy
to
clipboard", "In
Zwischenablage
kopieren", "复制
到剪贴板", @@ -146,9 +206,9 @@ function getTranslation(key, langIndex) { "Copiar
al
portapapeles", "Copier
dans le
presse-papiers", "نسخ
إلى
الحافظة", - "" + "", ], - "encryptOutputTextarea": [ + encryptOutputTextarea: [ "Decrypted/Encrypted message", "Entschlüsselte/Verschlüsselte Nachricht", "解密/加密的消息", @@ -156,10 +216,10 @@ function getTranslation(key, langIndex) { "Mensaje desencriptado/encriptado", "Message déchiffré/chiffré", "الرسالة المفكوكة / المشفرة", - "" + "", ], // Convert section elements - "convertButton": [ + convertButton: [ "🔄 Convert", "🔄 Konvertieren", "🔄 转换", @@ -167,9 +227,9 @@ function getTranslation(key, langIndex) { "🔄 Convertir", "🔄 Convertir", "🔄 تحويل", - "" + "", ], - "clearConvertInputButton": [ + clearConvertInputButton: [ "Delete
Message", "Nachricht
löschen", "删除
消息", @@ -177,9 +237,9 @@ function getTranslation(key, langIndex) { "Eliminar
Mensaje", "Supprimer
Message", "حذف
الرسالة", - "" + "", ], - "copyConvertOutputButton": [ + copyConvertOutputButton: [ "Copy
to clipboard", "In
Zwischenablage
kopieren", "复制
到剪贴板", @@ -187,9 +247,9 @@ function getTranslation(key, langIndex) { "Copiar
al
portapapeles", "Copier
dans le
presse-papiers", "نسخ
إلى الحافظة", - "" + "", ], - "convertOutputTextarea": [ + convertOutputTextarea: [ "Converted message", "Konvertierte Nachricht", "转换后的消息", @@ -197,9 +257,9 @@ function getTranslation(key, langIndex) { "Mensaje convertido", "Message converti", "الرسالة المحولة", - "" + "", ], - "encryptMessageInput": [ + encryptMessageInput: [ "Message", "Nachricht", "消息", @@ -207,9 +267,9 @@ function getTranslation(key, langIndex) { "Mensaje", "Message", "الرسالة", - "" + "", ], - "convertMessageInput": [ + convertMessageInput: [ "Message", "Nachricht", "消息", @@ -217,9 +277,9 @@ function getTranslation(key, langIndex) { "Mensaje", "Message", "الرسالة", - "" + "", ], - "keyInput": [ + keyInput: [ "Secure password", "Sicheres Passwort", "安全的密码", @@ -227,20 +287,145 @@ function getTranslation(key, langIndex) { "Contraseña segura", "Mot de passe sécurisé", "كلمة مرور آمنة", - "" + "", + ], + // Private Conversion Algorithm + privateLinkText: [ + "Your link to the private conversion algorithm:", + "Dein Link zum privaten Konvertierungsalgorithmus:", + "你链接到私有转换算法:", + "Твоя ссылка на приватный алгоритм конвертации:", + "Tu enlace al algoritmo de conversión privado:", + "Ton lien vers l'algorithme privé de conversion :", + "رابطك إلى خوارزمية التحويل الخاصة:", + "", + ], + copyPrivateConversionLink: [ + "Copy", + "Kopieren", + "复制", + "Копировать", + "Copiar", + "Copier", + "نسخ", + "", + ], + disablePrivateConversionButton: [ + "🗑️ Remove private algorithm", + "🗑️ Deaktivieren", + "🗑️ 移除私有算法", + "🗑️ Удалить приватный алгоритм", + "🗑️ Eliminar algoritmo privado", + "🗑️ Supprimer l'algorithme privé", + "🗑️ إزالة الخوارزمية الخاصة", + "", + ], + privateAlgorithmDisclaimer: [ + "Using a private algorithm is just another layer of obfuscation, but can be cracked pretty easily.
Especially, when using the same algorithm more than once.", + "Der private Algorithmus ist nur als weitere Verschleierungsmethode gedacht, kann aber leicht geknackt werden.
Besonders, wenn derselbe Algorithmus häufiger als einmal verwendet wird.", + "使用私有算法只是另一层混淆,但很容易被破解。
尤其是,当多次使用相同的算法时。", + "Использование приватного алгоритма — это просто еще один слой обфускации, но его можно довольно легко взломать.
Особенно, если использовать один и тот же алгоритм несколько раз.", + "Usar un algoritmo privado es solo otra capa de ofuscación, pero puede ser descifrado bastante fácil.
Especialmente cuando se usa el mismo algoritmo más de una vez.", + "Utiliser un algorithme privé est juste une couche supplémentaire d'obfuscation, mais il peut être assez facilement craqué.
Surtout, quand on utilise le même algorithme plus d'une fois.", + "استخدام خوارزمية خاصة هو مجرد طبقة إضافية من الإخفاء، ولكن يمكن اختراقها بسهولة.
خاصة عند استخدام نفس الخوارزمية أكثر من مرة.", + "", + ], + generatePrivateConversionButton: [ + "🔮 Generate (new) private algorithm", + "🔮 (Neuer) Algorithmus generieren", + "🔮 生成(新的)私有算法", + "🔮 Создать (новый) приватный алгоритм", + "🔮 Generar algoritmo privado (nuevo)", + "🔮 Générer un algorithme privé (nouveau)", + "🔮 إنشاء خوارزمية خاصة (جديدة)", + "", + ], + btnPrivateAlgorithmRemoved: [ + "Algorithm removed", + "Algorithmus entfernt", + "算法已移除", + "Алгоритм удален", + "Algoritmo eliminado", + "Algorithme supprimé", + "تمت إزالة الخوارزمية", + "", + ], + btnPrivateAlgorithmGenerated: [ + "⚙️ Private algorithm generated!", + "⚙️ Privater Algorithmus erstellt!", + "⚙️ 私有算法已生成!", + "⚙️ Приватный алгоритм создан!", + "⚙️ ¡Algoritmo privado generado!", + "⚙️ Algorithme privé généré !", + "⚙️ تم إنشاء الخوارزمية الخاصة!", + "", + ], + modalDisablePrivateAlgorithm: [ + "Do you want to remove the private algorithm?", + "Möchtest du den privaten Algorithmus entfernen?", + "你想移除私有算法吗?", + "Ты хочешь удалить приватный алгоритм?", + "¿Quieres eliminar el algoritmo privado?", + "Tu veux supprimer l'algorithme privé ?", + "هل تريد إزالة الخوارزمية الخاصة؟", + "", + ], + privateAlgorithmFooter: [ + "You can use a private algorithm with a unique key to obfuscate your messages.", + "Mit einem privaten Algorithmus kannst du deine Nachrichten mit einem einzigenartigen Schlüssel zusätzlich verschleiern.", + "你可以使用带有唯一密钥的私有算法来混淆你的消息。", + "Ты можешь использовать приватный алгоритм с уникальным ключом для обфускации своих сообщений.", + "Puedes usar un algoritmo privado con una clave única para ofuscar tus mensajes.", + "Tu peux utiliser un algorithme privé avec une clé unique pour obfusquer tes messages.", + "يمكنك استخدام خوارزمية خاصة بمفتاح فريد لإخفاء رسائلك.", + "", + ], + showPrivateAlgorithmButton: [ + "💎 Private Algorithm", + "💎 Privater Algorithmus", + "💎 私有算法", + "💎 Приватный алгоритм", + "💎 Algoritmo Privado", + "💎 Algorithme privé", + "💎 الخوارزمية الخاصة", + "", + ], + privateAlgorithmHeader: [ + "A private algorithm is used.
Click '💎 Private Algorithm' for more information.
", + "Ein privater Konvertierungsalgorithmus wird verwendet.
Klicke '💎 Privater Algorithmus' für mehr Informationen.
", + "正在使用私有算法。
点击‘💎 私有算法’了解更多信息。
", + "Используется приватный алгоритм.
Нажми '💎 Приватный алгоритм' для получения дополнительной информации.
", + "Se está utilizando un algoritmo privado.
Haz clic en '💎 Algoritmo Privado' para más información.
", + "Un algorithme privé est utilisé.
Clique sur '💎 Algorithme privé' pour plus d'informations.
", + "يتم استخدام خوارزمية خاصة.
اضغط على '💎 الخوارزمية الخاصة' للمزيد من المعلومات.
", + "", ], // Messages and other elements - "footerHighlight": [ - "Secure on-device encryption! Version " + getVersion() + "
Combined AES-256 & XOR
No data sent. No cookies = no tracking. No logging.", - "Sichere Verschlüsselung auf dem Gerät! Version " + getVersion() + "
Kombiniert AES-256 & XOR
Keine Daten werden gesendet. Keine Cookies = kein Tracking. Kein Logging.", - "设备上的安全加密!版本 " + getVersion() + "
组合 AES-256 和 XOR
不发送数据。没有 Cookie = 无跟踪。无日志。", - "Безопасное шифрование на устройстве! Версия " + getVersion() + "
Комбинация AES-256 & XOR
Данные не отправляются. Нет куки = нет отслеживания. Нет логирования.", - "¡Encriptación segura en el dispositivo! Versión " + getVersion() + "
Combinación de AES-256 y XOR
No se envían datos. Sin cookies = sin seguimiento. Sin registros.", - "Chiffrement sécurisé sur l'appareil ! Version " + getVersion() + "
Combinaison AES-256 & XOR
Aucune donnée envoyée. Pas de cookies = pas de suivi. Pas de journalisation.", - "تشفير آمن على الجهاز! الإصدار " + getVersion() + "
يجمع بين AES-256 و XOR
لا يتم إرسال بيانات. لا كوكيز = لا تتبع. لا سجلات.", - "" - ], - "footerSource": [ + footerHighlight: [ + "Secure on-device encryption! Version " + + getVersion() + + "
Combined AES-256 & XOR
No data sent. No cookies = no tracking. No logging.", + "Sichere Verschlüsselung auf dem Gerät! Version " + + getVersion() + + "
Kombiniert AES-256 & XOR
Keine Daten werden gesendet. Keine Cookies = kein Tracking. Kein Logging.", + "设备上的安全加密!版本 " + + getVersion() + + "
组合 AES-256 和 XOR
不发送数据。没有 Cookie = 无跟踪。无日志。", + "Безопасное шифрование на устройстве! Версия " + + getVersion() + + "
Комбинация AES-256 & XOR
Данные не отправляются. Нет куки = нет отслеживания. Нет логирования.", + "¡Encriptación segura en el dispositivo! Versión " + + getVersion() + + "
Combinación de AES-256 y XOR
No se envían datos. Sin cookies = sin seguimiento. Sin registros.", + "Chiffrement sécurisé sur l'appareil ! Version " + + getVersion() + + "
Combinaison AES-256 & XOR
Aucune donnée envoyée. Pas de cookies = pas de suivi. Pas de journalisation.", + "تشفير آمن على الجهاز! الإصدار " + + getVersion() + + "
يجمع بين AES-256 و XOR
لا يتم إرسال بيانات. لا كوكيز = لا تتبع. لا سجلات.", + "", + ], + footerSource: [ "Sourcecode (Github)", "Quellcode (Github)", "源代码(Github)", @@ -248,9 +433,9 @@ function getTranslation(key, langIndex) { "Código fuente (Github)", "Code source (Github)", "شفرة المصدر (GitHub)", - "" + "", ], - "explanation": [ + explanation: [ "
Encrypt or decrypt texts or messages with a password. The output is emojis, the key is emojis. With NasaEmoji, you can send secret messages to anyone! Generate and share a common key with your recipient using a method of your choice. Save the key in one of the 5 slots for ease of access.
", "
Verschlüssele oder entschlüssele Texte oder Nachrichten mit einem Passwort. Die Ausgabe sind Emojis, der Schlüssel sind Emojis. Mit NasaEmoji kannst du geheime Nachrichten an jeden senden! Erstelle und teile einen gemeinsamen Schlüssel mit deinem Empfänger auf eine beliebige Weise. Speichere den Schlüssel in einem der 5 Slots, um leichter darauf zugreifen zu können.
", "
使用密码加密或解密文本或消息。输出是表情符号,密钥是表情符号。使用 NasaEmoji,你可以向任何人发送秘密消息!使用你选择的方法生成并与你的收件人分享一个共同的密钥。将密钥保存在 5 个插槽中的一个,以方便访问。
", @@ -258,10 +443,10 @@ function getTranslation(key, langIndex) { "
¡Cifra o descifra textos o mensajes con una contraseña! La salida son emojis, la clave son emojis. Con NasaEmoji, ¡puedes enviar mensajes secretos a cualquiera! Genera y comparte una clave común con tu destinatario usando el método que prefieras. Guarda la clave en uno de los 5 espacios para acceder fácilmente.
", "
Tu peux chiffrer ou déchiffrer des textes ou des messages avec un mot de passe. Le résultat ? Des emojis, et la clé, c'est aussi des emojis. Avec NasaEmoji, tu peux envoyer des messages secrets à qui tu veux ! Crée et partage une clé avec ton destinataire comme tu veux. Garde la clé dans un des 5 emplacements pour la retrouver facilement.
", "
قم بتشفير أو فك تشفير النصوص أو الرسائل باستخدام كلمة مرور. المخرجات هي إيموجي، والمفتاح هو إيموجي. مع NasaEmoji، يمكنك إرسال رسائل سرية إلى أي شخص! قم بإنشاء ومشاركة مفتاح مشترك مع مستلمك باستخدام الطريقة التي تختارها. احفظ المفتاح في أحد الخمسة فتحات لسهولة الوصول.
", - "" + "", ], // Status messages - "saved": [ + saved: [ "💾 Saved", "💾 Gespeichert", "💾 已保存", @@ -269,9 +454,9 @@ function getTranslation(key, langIndex) { "💾 Guardado", "💾 Enregistré", "💾 محفوظ", - "" + "", ], - "loadKey": [ + loadKey: [ "📲 Loaded", "📲 Geladen", "📲 已加载", @@ -279,9 +464,9 @@ function getTranslation(key, langIndex) { "📲 Cargado", "📲 Chargé", "📲 محمل", - "" + "", ], - "error": [ + error: [ "❌ Error", "❌ Fehler", "❌ 错误", @@ -289,10 +474,10 @@ function getTranslation(key, langIndex) { "❌ Error", "❌ Erreur", "❌ خطأ", - "" + "", ], // Messages during encryption/decryption - "btnEncodeWorking": [ + btnEncodeWorking: [ "⚙️ Encrypting...", "⚙️ Verschlüsseln...", "⚙️ 加密中...", @@ -300,9 +485,9 @@ function getTranslation(key, langIndex) { "⚙️ Encriptando...", "⚙️ Chiffrement...", "⚙️ جاري التشفير...", - "" + "", ], - "btnEncodeFailed": [ + btnEncodeFailed: [ "💔 Error. Try again?", "💔 Fehler. Nochmal versuchen?", "💔 出错。再试一次?", @@ -310,9 +495,9 @@ function getTranslation(key, langIndex) { "💔 Error. ¿Intentar de nuevo?", "💔 Erreur. Réessayer ?", "💔 خطأ. حاول مرة أخرى؟", - "" + "", ], - "btnEncodeSuccess": [ + btnEncodeSuccess: [ "💚 Encrypted!", "💚 Verschlüsselt!", "💚 已加密!", @@ -320,9 +505,9 @@ function getTranslation(key, langIndex) { "💚 ¡Encriptado!", "💚 Chiffré !", "💚 تم التشفير!", - "" + "", ], - "btnDecodeWorking": [ + btnDecodeWorking: [ "⚙️ Decrypting...", "⚙️ Entschlüsseln...", "⚙️ 解密中...", @@ -330,9 +515,9 @@ function getTranslation(key, langIndex) { "⚙️ Desencriptando...", "⚙️ Déchiffrement...", "⚙️ جاري فك التشفير...", - "" + "", ], - "btnDecodeFailed": [ + btnDecodeFailed: [ "💔 Failed. Wrong key/password?", "💔 Fehlgeschlagen. Falsches Passwort?", "💔 失败。密钥/密码错误?", @@ -340,9 +525,9 @@ function getTranslation(key, langIndex) { "💔 Falló. ¿Clave/contraseña incorrecta?", "💔 Échec. Mauvaise clé/mot de passe ?", "💔 فشل. مفتاح / كلمة مرور خاطئة؟", - "" + "", ], - "btnDecodeSuccess": [ + btnDecodeSuccess: [ "💚 Decrypted!", "💚 Entschlüsselt!", "💚 已解密!", @@ -350,71 +535,71 @@ function getTranslation(key, langIndex) { "💚 ¡Desencriptado!", "💚 Déchiffré !", "💚 تم فك التشفير!", - "" + "", ], // Messages during conversion - "btnEncodeWorkingConvert": [ + btnEncodeWorkingConvert: [ "⚙️ Encoding...", - "⚙️ Kodieren...", + "⚙️ Umwandeln...", "⚙️ 编码中...", "⚙️ Кодируем...", "⚙️ Codificando...", "⚙️ Encodage...", "⚙️ جاري الترميز...", - "" + "", ], - "btnEncodeFailedConvert": [ + btnEncodeFailedConvert: [ "💔 Encoding failed", - "💔 Kodierung fehlgeschlagen", + "💔 Umwandeln fehlgeschlagen", "💔 编码失败", "💔 Кодирование не удалось", "💔 Falló la codificación", "💔 Échec de l'encodage", "💔 فشل الترميز", - "" + "", ], - "btnEncodeSuccessConvert": [ + btnEncodeSuccessConvert: [ "💚 Encoded!", - "💚 Kodiert!", + "💚 Umgewandelt!", "💚 已编码!", "💚 Закодировано!", "💚 ¡Codificado!", "💚 Encodé !", "💚 تم الترميز!", - "" + "", ], - "btnDecodeWorkingConvert": [ + btnDecodeWorkingConvert: [ "⚙️ Decoding...", - "⚙️ Dekodieren...", + "⚙️ Umwandeln...", "⚙️ 解码中...", "⚙️ Декодируем...", "⚙️ Decodificando...", "⚙️ Décodage...", "⚙️ جاري فك الترميز...", - "" + "", ], - "btnDecodeFailedConvert": [ + btnDecodeFailedConvert: [ "💔 Decoding failed", - "💔 Dekodierung fehlgeschlagen", + "💔 Umwandeln fehlgeschlagen", "💔 解码失败", "💔 Декодирование не удалось", "💔 Falló la decodificación", "💔 Échec du décodage", "💔 فشل فك الترميز", - "" + "", ], - "btnDecodeSuccessConvert": [ + btnDecodeSuccessConvert: [ "💚 Decoded!", - "💚 Dekodiert!", + "💚 Umgewandelt!", "💚 已解码!", "💚 Декодировано!", "💚 ¡Decodificado!", "💚 Décodé !", "💚 تم فك الترميز!", - "" + "", ], // FAQ - "faqQuestion1": [ + faqQuestion1: [ "What is NasaEmoji?", "Was ist NasaEmoji?", "NasaEmoji 是什么?", @@ -422,9 +607,9 @@ function getTranslation(key, langIndex) { "¿Qué es NasaEmoji?", "Qu'est-ce que NasaEmoji ?", "ما هو NasaEmoji؟", - "" + "", ], - "faqAnswer1": [ + faqAnswer1: [ "NasaEmoji is a versatile tool that allows you to convert text to emojis and encrypt messages using emojis. The site offers two main apps: Conversion and Encryption. The Conversion app lets you transform any text into emojis and back without encryption, while the Encryption app enables you to securely encrypt and decrypt messages using emojis as keys and output.", "NasaEmoji ist ein vielseitiges Tool, mit dem du Text in Emojis umwandeln und Nachrichten mit Emojis verschlüsseln kannst. Die Website bietet zwei Hauptanwendungen: Konvertierung und Verschlüsselung. Die Konvertierungs-App ermöglicht es dir, jeden Text in Emojis und zurück ohne Verschlüsselung zu verwandeln, während die Verschlüsselungs-App es dir erlaubt, Nachrichten sicher zu verschlüsseln und zu entschlüsseln, wobei Emojis als Schlüssel und Ausgabe verwendet werden.", "NasaEmoji 是一个多功能工具,允许你将文本转换为表情符号并使用表情符号加密消息。该网站提供两个主要应用程序:转换加密。转换应用程序让你能够将任何文本转换为表情符号并在不加密的情况下返回,而加密应用程序则允许你使用表情符号作为密钥和输出,安全地加密和解密消息。", @@ -432,129 +617,129 @@ function getTranslation(key, langIndex) { "NasaEmoji es una herramienta versátil que te permite convertir texto a emojis y encriptar mensajes usando emojis. El sitio ofrece dos aplicaciones principales: Conversión y Encriptación. La aplicación de Conversión te permite transformar cualquier texto en emojis y viceversa sin encriptación, mientras que la aplicación de Encriptación te permite encriptar y desencriptar mensajes de manera segura usando emojis como claves y salida.", "NasaEmoji est un outil polyvalent qui vous permet de convertir du texte en émojis et de chiffrer des messages en utilisant des émojis. Le site propose deux applications principales : Conversion et Cryptage. L'application de Conversion vous permet de transformer n'importe quel texte en émojis et vice versa sans cryptage, tandis que l'application de Cryptage vous permet de chiffrer et déchiffrer des messages de manière sécurisée en utilisant des émojis comme clés et sorties.", "NasaEmoji هو أداة متعددة الاستخدامات تتيح لك تحويل النص إلى إيموجي وتشفير الرسائل باستخدام إيموجي. يقدم الموقع تطبيقين رئيسيين: التحويل والتشفير. يتيح لك تطبيق التحويل تحويل أي نص إلى إيموجي والعودة دون تشفير، بينما يمكِّنك تطبيق التشفير من تشفير وفك تشفير الرسائل بأمان باستخدام إيموجي كمفاتيح ومخرجات.", - "" - ], - "faqQuestion2": [ - "How do I use NasaEmoji?", - "Wie benutze ich NasaEmoji?", - "我如何使用 NasaEmoji?", - "Как использовать NasaEmoji?", - "¿Cómo uso NasaEmoji?", - "Comment utiliser NasaEmoji ?", - "كيف أستخدم NasaEmoji؟", - "" - ], - "faqAnswer2": [ - "NasaEmoji features two apps: Conversion and Encryption. By default, the site opens with the Conversion app. You can switch between apps using the Choose App dropdown in the navigation bar.To Convert Text to Emojis:
  • Ensure you're on the Conversion app.
  • Enter your message in the input field.
  • Click the 🔄 Convert button.
  • Your converted message will appear in the output field.
To Encrypt a Message:
  • Switch to the Encryption app using the Choose App dropdown.
  • Enter your message in the input field.
  • Generate a key by clicking the 🔄 button next to the key input field, or enter your own key.
  • Click the 🔀 Encrypt / Decrypt button.
  • Your encrypted message will appear in the output field.
", - "NasaEmoji verfügt über zwei Apps: Konvertierung und Verschlüsselung. Standardmäßig öffnet sich die Website mit der Konvertierung-App. Du kannst zwischen den Apps wechseln, indem du das App auswählen-Dropdown in der Navigationsleiste verwendest.Um Text in Emojis zu konvertieren:
  • Stelle sicher, dass du in der Konvertierung-App bist.
  • Gib deine Nachricht im Eingabefeld ein.
  • Klicke auf die 🔄 Konvertieren-Schaltfläche.
  • Die konvertierte Nachricht erscheint im Ausgabefeld.
Um eine Nachricht zu verschlüsseln:
  • Wechsle zur Verschlüsselung-App mithilfe des App auswählen-Dropdowns.
  • Gib deine Nachricht im Eingabefeld ein.
  • Generiere einen Schlüssel, indem du auf die 🔄-Schaltfläche neben dem Schlüssel-Eingabefeld klickst, oder gib deinen eigenen Schlüssel ein.
  • Klicke auf die 🔀 Verschlüsseln / Entschlüsseln-Schaltfläche.
  • Deine verschlüsselte Nachricht erscheint im Ausgabefeld.
", - "NasaEmoji 具有两个应用程序:转换加密。默认情况下,网站以转换应用程序打开。你可以使用导航栏中的选择应用下拉菜单在应用程序之间切换。将文本转换为表情符号:
  • 确保你在转换应用程序中。
  • 在输入字段中输入你的消息。
  • 点击 🔄 转换 按钮。
  • 你的转换后消息将显示在输出字段中。
加密消息:
  • 使用 选择应用 下拉菜单切换到 加密 应用程序。
  • 在输入字段中输入你的消息。
  • 通过点击密钥输入字段旁边的 🔄 按钮生成一个密钥,或输入你自己的密钥。
  • 点击 🔀 加密 / 解密 按钮。
  • 你的加密消息将显示在输出字段中。
", - "NasaEmoji имеет два приложения: Конвертация и Шифрование. По умолчанию сайт открывается с приложением Конвертация. Вы можете переключаться между приложениями, используя выпадающее меню Выбрать приложение в навигационной панели.Чтобы конвертировать текст в эмодзи:
  • Убедитесь, что вы находитесь в приложении Конвертация.
  • Введите ваше сообщение в поле ввода.
  • Нажмите кнопку 🔄 Конвертировать.
  • Ваше конвертированное сообщение появится в поле вывода.
Чтобы зашифровать сообщение:
  • Переключитесь на приложение Шифрование, используя выпадающее меню Выбрать приложение.
  • Введите ваше сообщение в поле ввода.
  • Сгенерируйте ключ, нажав кнопку 🔄 рядом с полем ввода ключа, или введите свой собственный ключ.
  • Нажмите кнопку 🔀 Шифровать / Расшифровывать.
  • Ваше зашифрованное сообщение появится в поле вывода.
", - "NasaEmoji cuenta con dos aplicaciones: Conversión y Encriptación. Por defecto, el sitio se abre con la aplicación Conversión. Puedes cambiar entre aplicaciones usando el menú desplegable Elegir aplicación en la barra de navegación.Para Convertir Texto a Emojis:
  • Asegúrate de estar en la aplicación Conversión.
  • Ingresa tu mensaje en el campo de entrada.
  • Haz clic en el botón 🔄 Convertir.
  • Tu mensaje convertido aparecerá en el campo de salida.
Para Encriptar un Mensaje:
  • Cambia a la aplicación Encriptación usando el menú desplegable Elegir aplicación.
  • Ingresa tu mensaje en el campo de entrada.
  • Genera una clave haciendo clic en el botón 🔄 junto al campo de entrada de clave, o ingresa tu propia clave.
  • Haz clic en el botón 🔀 Encriptar / Desencriptar.
  • Tu mensaje encriptado aparecerá en el campo de salida.
", - "NasaEmoji dispose de deux applications : Conversion et Cryptage. Par défaut, le site s'ouvre avec l'application Conversion. Vous pouvez basculer entre les applications en utilisant le menu déroulant Choisir l'application dans la barre de navigation.Pour convertir du texte en émojis :
  • Assurez-vous que vous êtes dans l'application Conversion.
  • Entrez votre message dans le champ de saisie.
  • Cliquez sur le bouton 🔄 Convertir.
  • Votre message converti apparaîtra dans le champ de sortie.
Pour chiffrer un message :
  • Changez pour l'application Cryptage en utilisant le menu déroulant Choisir l'application.
  • Entrez votre message dans le champ de saisie.
  • Générez une clé en cliquant sur le bouton 🔄 à côté du champ de saisie de clé, ou entrez votre propre clé.
  • Cliquez sur le bouton 🔀 Chiffrer / Déchiffrer.
  • Votre message chiffré apparaîtra dans le champ de sortie.
", - "يحتوي NasaEmoji على تطبيقين: التحويل والتشفير. بشكل افتراضي، يفتح الموقع مع تطبيق التحويل. يمكنك التبديل بين التطبيقات باستخدام القائمة المنسدلة اختر التطبيق في شريط التنقل.لتحويل النص إلى إيموجي:
  • تأكد من أنك في تطبيق التحويل.
  • أدخل رسالتك في حقل الإدخال.
  • انقر على زر 🔄 تحويل.
  • ستظهر رسالتك المحولة في حقل الإخراج.
لتشفير رسالة:
  • انتقل إلى تطبيق التشفير باستخدام القائمة المنسدلة اختر التطبيق.
  • أدخل رسالتك في حقل الإدخال.
  • قم بإنشاء مفتاح بالنقر على زر 🔄 بجانب حقل إدخال المفتاح، أو أدخل مفتاحك الخاص.
  • انقر على زر 🔀 تشفير / فك تشفير.
  • ستظهر رسالتك المشفرة في حقل الإخراج.
", - "" - ], - "faqQuestion3": [ - "How do I convert text to emojis?", - "Wie konvertiere ich Text in Emojis?", - "我如何将文本转换为表情符号?", - "Как я могу конвертировать текст в эмодзи?", - "¿Cómo convierto texto a emojis?", - "Comment convertir du texte en émojis ?", - "كيف أحول النص إلى إيموجي؟", - "" - ], - "faqAnswer3": [ - "To convert text to emojis:
  • Ensure you're on the Conversion app (the default app).
  • Enter your message in the input field.
  • Click the 🔄 Convert button.
  • The converted message will appear in the output field.
  • You can copy the output using the Copy to clipboard button.
", - "Um Text in Emojis zu konvertieren:
  • Stelle sicher, dass du in der Konvertierung-App bist (die Standard-App).
  • Gib deine Nachricht im Eingabefeld ein.
  • Klicke auf die 🔄 Konvertieren-Schaltfläche.
  • Die konvertierte Nachricht erscheint im Ausgabefeld.
  • Du kannst die Ausgabe mit der In die Zwischenablage kopieren-Schaltfläche kopieren.
", - "将文本转换为表情符号的方法:
  • 确保你在 转换 应用程序中(默认应用程序)。
  • 在输入字段中输入你的消息。
  • 点击 🔄 转换 按钮。
  • 转换后的消息将显示在输出字段中。
  • 你可以使用 复制到剪贴板 按钮复制输出。
", - "Чтобы конвертировать текст в эмодзи:
  • Убедитесь, что вы находитесь в приложении Конвертация (приложение по умолчанию).
  • Введите свое сообщение в поле ввода.
  • Нажмите кнопку 🔄 Конвертировать.
  • Конвертированное сообщение появится в поле вывода.
  • Вы можете скопировать вывод, используя кнопку Скопировать в буфер обмена.
", - "Para convertir texto a emojis:
  • Asegúrate de estar en la aplicación Conversión (la aplicación predeterminada).
  • Ingresa tu mensaje en el campo de entrada.
  • Haz clic en el botón 🔄 Convertir.
  • Tu mensaje convertido aparecerá en el campo de salida.
  • Puedes copiar la salida usando el botón Copiar al portapapeles.
", - "Pour convertir du texte en émojis :
  • Assurez-vous que vous êtes dans l'application Conversion (l'application par défaut).
  • Entrez votre message dans le champ de saisie.
  • Cliquez sur le bouton 🔄 Convertir.
  • Le message converti apparaîtra dans le champ de sortie.
  • Vous pouvez copier la sortie en utilisant le bouton Copier dans le presse-papiers.
", - "لتحويل النص إلى إيموجي:
  • تأكد من أنك في تطبيق التحويل (التطبيق الافتراضي).
  • أدخل رسالتك في حقل الإدخال.
  • انقر على زر 🔄 تحويل.
  • ستظهر رسالتك المحولة في حقل الإخراج.
  • يمكنك نسخ المخرجات باستخدام زر نسخ إلى الحافظة.
", - "" - ], - "faqQuestion4": [ - "How do I encrypt a message?", - "Wie verschlüssele ich eine Nachricht?", - "我如何加密消息?", - "Как зашифровать сообщение?", - "¿Cómo encripto un mensaje?", - "Comment chiffrer un message ?", - "كيف أشفر رسالة؟", - "" - ], - "faqAnswer4": [ - "To encrypt a message:
  • Switch to the Encryption app using the Choose App dropdown.
  • Enter your message in the input field.
  • Generate a key by clicking the 🔄 button next to the key input field, or enter your own key.
  • Click the 🔀 Encrypt / Decrypt button.
  • Your encrypted message will appear in the output field.
", - "Um eine Nachricht zu verschlüsseln:
  • Wechsle zur Verschlüsselung-App mithilfe des App auswählen-Dropdowns.
  • Gib deine Nachricht im Eingabefeld ein.
  • Generiere einen Schlüssel, indem du auf die 🔄-Schaltfläche neben dem Schlüssel-Eingabefeld klickst, oder gib deinen eigenen Schlüssel ein.
  • Klicke auf die 🔀 Verschlüsseln / Entschlüsseln-Schaltfläche.
  • Deine verschlüsselte Nachricht erscheint im Ausgabefeld.
", - "要加密消息:
  • 使用 选择应用 下拉菜单切换到 加密 应用程序。
  • 在输入字段中输入你的消息。
  • 通过点击密钥输入字段旁边的 🔄 按钮生成一个密钥,或输入你自己的密钥。
  • 点击 🔀 加密 / 解密 按钮。
  • 你的加密消息将显示在输出字段中。
", - "Чтобы зашифровать сообщение:
  • Переключитесь на приложение Шифрование, используя выпадающее меню Выбрать приложение.
  • Введите свое сообщение в поле ввода.
  • Сгенерируйте ключ, нажав кнопку 🔄 рядом с полем ввода ключа, или введите свой собственный ключ.
  • Нажмите кнопку 🔀 Шифровать / Расшифровывать.
  • Ваше зашифрованное сообщение появится в поле вывода.
", - "Para encriptar un mensaje:
  • Cambia a la aplicación Encriptación usando el menú desplegable Elegir aplicación.
  • Ingresa tu mensaje en el campo de entrada.
  • Genera una clave haciendo clic en el botón 🔄 junto al campo de entrada de clave, o ingresa tu propia clave.
  • Haz clic en el botón 🔀 Encriptar / Desencriptar.
  • Tu mensaje encriptado aparecerá en el campo de salida.
", - "Pour chiffrer un message :
  • Changez pour l'application Cryptage en utilisant le menu déroulant Choisir l'application.
  • Entrez votre message dans le champ de saisie.
  • Générez une clé en cliquant sur le bouton 🔄 à côté du champ de saisie de clé, ou entrez votre propre clé.
  • Cliquez sur le bouton 🔀 Chiffrer / Déchiffrer.
  • Votre message chiffré apparaîtra dans le champ de sortie.
", - "لتشفير رسالة:
  • انتقل إلى تطبيق التشفير باستخدام القائمة المنسدلة اختر التطبيق.
  • أدخل رسالتك في حقل الإدخال.
  • قم بإنشاء مفتاح بالنقر على زر 🔄 بجانب حقل إدخال المفتاح، أو أدخل مفتاحك الخاص.
  • انقر على زر 🔀 تشفير / فك تشفير.
  • ستظهر رسالتك المشفرة في حقل الإخراج.
", - "" - ], - "faqQuestion5": [ - "How do I decrypt a message?", - "Wie entschlüssele ich eine Nachricht?", - "我如何解密消息?", - "Как расшифровать сообщение?", - "¿Cómo desencripto un mensaje?", - "Comment déchiffrer un message ?", - "كيف أفك تشفير رسالة؟", - "" - ], - "faqAnswer5": [ - "To decrypt a message:
  • Switch to the Encryption app.
  • Paste the encrypted emoji message into the input field.
  • Enter the key used for encryption in the key input field.
  • Click the 🔀 Encrypt / Decrypt button.
  • Your decrypted message will appear in the output field.
", - "Um eine Nachricht zu entschlüsseln:
  • Wechsle zur Verschlüsselung-App.
  • Füge die verschlüsselte Emoji-Nachricht in das Eingabefeld ein.
  • Gib den zur Verschlüsselung verwendeten Schlüssel im Schlüssel-Eingabefeld ein.
  • Klicke auf die 🔀 Verschlüsseln / Entschlüsseln-Schaltfläche.
  • Deine entschlüsselte Nachricht erscheint im Ausgabefeld.
", - "要解密消息:
  • 切换到 加密 应用程序。
  • 将加密的表情符号消息粘贴到输入字段中。
  • 在密钥输入字段中输入用于加密的密钥。
  • 点击 🔀 加密 / 解密 按钮。
  • 你的解密消息将显示在输出字段中。
", - "Чтобы расшифровать сообщение:
  • Переключитесь на приложение Шифрование.
  • Вставьте зашифрованное сообщение-эмодзи в поле ввода.
  • Введите ключ, использованный для шифрования, в поле ввода ключа.
  • Нажмите кнопку 🔀 Шифровать / Расшифровывать.
  • Ваше расшифрованное сообщение появится в поле вывода.
", - "Para desencriptar un mensaje:
  • Cambia a la aplicación Encriptación.
  • Pega el mensaje de emoji encriptado en el campo de entrada.
  • Ingresa la clave utilizada para la encriptación en el campo de entrada de clave.
  • Haz clic en el botón 🔀 Encriptar / Desencriptar.
  • Tu mensaje desencriptado aparecerá en el campo de salida.
", - "Pour déchiffrer un message :
  • Changez pour l'application Cryptage.
  • Collez le message emoji chiffré dans le champ de saisie.
  • Entrez la clé utilisée pour le cryptage dans le champ de saisie de clé.
  • Cliquez sur le bouton 🔀 Chiffrer / Déchiffrer.
  • Votre message déchiffré apparaîtra dans le champ de sortie.
", - "لفك تشفير رسالة:
  • انتقل إلى تطبيق التشفير.
  • الصق الرسالة المشفرة بإيموجي في حقل الإدخال.
  • أدخل المفتاح المستخدم في التشفير في حقل إدخال المفتاح.
  • انقر على زر 🔀 تشفير / فك تشفير.
  • ستظهر رسالتك المفكوكة في حقل الإخراج.
", - "" - ], - "faqQuestion6": [ - "How do I generate an emoji key?", - "Wie generiere ich einen Emoji-Schlüssel?", - "我如何生成表情符号密钥?", - "Как сгенерировать эмодзи-ключ?", - "¿Cómo genero una clave de emoji?", - "Comment générer une clé emoji ?", - "كيف أُولّد مفتاح إيموجي؟", - "" - ], - "faqAnswer6": [ - "To generate an emoji key in the Encryption app:
  • Click the 🔄 button next to the key input field.
  • The generated key will appear in the key input field.
  • You can copy the key using the Copy button.
  • Save the key in one of the 5 available slots using the 💾 Save button for future use.
", - "Um einen Emoji-Schlüssel in der Verschlüsselung-App zu generieren:
  • Klicke auf die 🔄-Schaltfläche neben dem Schlüssel-Eingabefeld.
  • Der generierte Schlüssel erscheint im Schlüssel-Eingabefeld.
  • Du kannst den Schlüssel mit der Copy-Schaltfläche kopieren.
  • Speichere den Schlüssel in einem der 5 verfügbaren Slots mit der 💾 Speichern-Schaltfläche für die zukünftige Verwendung.
", - "在 加密 应用程序中生成表情符号密钥的方法:
  • 点击密钥输入字段旁边的 🔄 按钮。
  • 生成的密钥将出现在密钥输入字段中。
  • 你可以使用 复制 按钮复制密钥。
  • 使用 💾 保存 按钮将密钥保存在5个可用槽之一中以备将来使用。
", - "Чтобы сгенерировать эмодзи-ключ в приложении Шифрование:
  • Нажмите кнопку 🔄 рядом с полем ввода ключа.
  • Сгенерированный ключ появится в поле ввода ключа.
  • Вы можете скопировать ключ, используя кнопку Copy.
  • Сохраните ключ в одном из 5 доступных слотов, используя кнопку 💾 Сохранить для дальнейшего использования.
", - "Para generar una clave de emoji en la aplicación Encriptación:
  • Haz clic en el botón 🔄 junto al campo de entrada de clave.
  • La clave generada aparecerá en el campo de entrada de clave.
  • Puedes copiar la clave usando el botón Copiar.
  • Guarda la clave en una de las 5 ranuras disponibles usando el botón 💾 Guardar para uso futuro.
", - "Pour générer une clé emoji dans l'application Cryptage :
  • Cliquez sur le bouton 🔄 à côté du champ de saisie de clé.
  • La clé générée apparaîtra dans le champ de saisie de clé.
  • Vous pouvez copier la clé en utilisant le bouton Copier.
  • Sauvegardez la clé dans l'un des 5 emplacements disponibles en utilisant le bouton 💾 Sauvegarder pour une utilisation future.
", - "لإنشاء مفتاح إيموجي في تطبيق التشفير:
  • انقر على زر 🔄 بجانب حقل إدخال المفتاح.
  • سيظهر المفتاح المُولد في حقل إدخال المفتاح.
  • يمكنك نسخ المفتاح باستخدام زر نسخ.
  • احفظ المفتاح في أحد الخمسة فتحات المتاحة باستخدام زر 💾 حفظ للاستخدام المستقبلي.
", - "" - ], - "faqQuestion9": [ - "How do I add NasaEmoji to my home screen or desktop?", - "Wie füge ich NasaEmoji zu meinem Startbildschirm oder Desktop hinzu?", - "我如何将 NasaEmoji 添加到我的主屏幕或桌面?", - "Как добавить NasaEmoji на главный экран или рабочий стол?", - "¿Cómo agrego NasaEmoji a mi pantalla de inicio o escritorio?", - "Comment ajouter NasaEmoji à votre écran d'accueil ou bureau ?", - "كيف أضيف NasaEmoji إلى شاشة البداية أو سطح المكتب؟", - "" - ], - "faqAnswer9": [ - "You can add NasaEmoji as a Progressive Web App (PWA) to your home screen or desktop for quick access.
On iOS (Safari):
  1. Open https://NasaEmoji.com in Safari.
  2. Tap the Share icon (a square with an upward arrow).
  3. Scroll down and tap Add to Home Screen.
  4. Tap Add in the upper-right corner.
On Android (Chrome and other browsers):
  1. Open https://NasaEmoji.com in your browser.
  2. Tap the Menu icon (three dots) in the upper-right corner.
  3. Select Add to Home screen or Install App.
  4. Follow the on-screen instructions.
On macOS (Safari):
  1. Open https://NasaEmoji.com in Safari.
  2. Go to File > Add to Dock.
On Desktop (Chrome):
  1. Open https://NasaEmoji.com in Chrome.
  2. Click the Install icon in the address bar (a computer with a down arrow).
  3. Click Install.
On Desktop (Firefox and other browsers):

Firefox does not support installing PWAs directly. You can bookmark the site or create a shortcut manually.

", - "Du kannst NasaEmoji als Progressive Web App (PWA) zu deinem Startbildschirm oder Desktop für einen schnellen Zugriff hinzufügen.
Auf iOS (Safari):
  1. Öffne https://NasaEmoji.com in Safari.
  2. Tippe auf das Teilen-Symbol (ein Quadrat mit einem nach oben zeigenden Pfeil).
  3. Scroll nach unten und tippe auf Zum Home-Bildschirm hinzufügen.
  4. Tippe oben rechts auf Hinzufügen.
Auf Android (Chrome und anderen Browsern):
  1. Öffne https://NasaEmoji.com in deinem Browser.
  2. Tippe auf das Menü-Symbol (drei Punkte) oben rechts.
  3. Wähle Zum Startbildschirm hinzufügen oder App installieren.
  4. Folge den Anweisungen auf dem Bildschirm.
Auf macOS (Safari):
  1. Öffne https://NasaEmoji.com in Safari.
  2. Gehe zu Datei > Zum Dock hinzufügen.
Auf Desktop (Chrome):
  1. Öffne https://NasaEmoji.com in Chrome.
  2. Klicke auf das Installieren-Symbol in der Adressleiste (ein Computer mit einem nach unten zeigenden Pfeil).
  3. Klicke auf Installieren.
Auf Desktop (Firefox und andere Browser):

Firefox unterstützt die Installation von PWAs nicht direkt. Du kannst die Website zu deinen Lesezeichen hinzufügen oder eine Verknüpfung manuell erstellen.

", - "你可以将 NasaEmoji 作为渐进式网页应用程序(PWA)添加到你的主屏幕或桌面,以便快速访问。
在 iOS(Safari)上:
  1. 在 Safari 中打开 https://NasaEmoji.com。
  2. 点击 分享 图标(一个带有向上箭头的方形)。
  3. 向下滚动并点击 添加到主屏幕
  4. 点击右上角的 添加
在 Android(Chrome 和其他浏览器)上:
  1. 在你的浏览器中打开 https://NasaEmoji.com。
  2. 点击右上角的 菜单 图标(三个点)。
  3. 选择 添加到主屏幕安装应用
  4. 按照屏幕上的指示操作。
在 macOS(Safari)上:
  1. 在 Safari 中打开 https://NasaEmoji.com。
  2. 转到 文件 > 添加到 Dock
在桌面(Chrome)上:
  1. 在 Chrome 中打开 https://NasaEmoji.com。
  2. 点击地址栏中的 安装 图标(一个带有向下箭头的电脑)。
  3. 点击 安装
在桌面(Firefox 和其他浏览器)上:

Firefox 不支持直接安装 PWA。你可以将该网站添加到书签或手动创建快捷方式。

", - "Ты можешь добавить NasaEmoji как Progressive Web App (PWA) на свой главный экран или рабочий стол для быстрого доступа.
На iOS (Safari):
  1. Открой https://NasaEmoji.com в Safari.
  2. Нажми на значок Поделиться (квадрат со стрелкой вверх).
  3. Прокрути вниз и нажми Добавить на главный экран.
  4. Нажми Добавить в правом верхнем углу.
На Android (Chrome и других браузерах):
  1. Открой https://NasaEmoji.com в своем браузере.
  2. Нажми на значок Меню (три точки) в правом верхнем углу.
  3. Выбери Добавить на главный экран или Установить приложение.
  4. Следуй инструкциям на экране.
На macOS (Safari):
  1. Открой https://NasaEmoji.com в Safari.
  2. Перейди в Файл > Добавить в Dock.
На рабочем столе (Chrome):
  1. Открой https://NasaEmoji.com в Chrome.
  2. Нажми на значок Установить в адресной строке (компьютер со стрелкой вниз).
  3. Нажми на Установить.
На рабочем столе (Firefox и других браузерах):

Firefox не поддерживает прямую установку PWA. Ты можешь добавить сайт в закладки или создать ярлык вручную.

", - "Puedes agregar NasaEmoji como una Aplicación Web Progresiva (PWA) a tu pantalla de inicio o escritorio para un acceso rápido.
En iOS (Safari):
  1. Abre https://NasaEmoji.com en Safari.
  2. Toca el ícono de Compartir (un cuadrado con una flecha hacia arriba).
  3. Desplázate hacia abajo y toca Agregar a la pantalla de inicio.
  4. Toca Agregar en la esquina superior derecha.
En Android (Chrome y otros navegadores):
  1. Abre https://NasaEmoji.com en tu navegador.
  2. Toca el ícono de Menú (tres puntos) en la esquina superior derecha.
  3. Selecciona Agregar a la pantalla de inicio o Instalar aplicación.
  4. Sigue las instrucciones en pantalla.
En macOS (Safari):
  1. Abre https://NasaEmoji.com en Safari.
  2. Ve a Archivo > Agregar al Dock.
En el escritorio (Chrome):
  1. Abre https://NasaEmoji.com en Chrome.
  2. Haz clic en el ícono de Instalar en la barra de direcciones (una computadora con una flecha hacia abajo).
  3. Haz clic en Instalar.
En el escritorio (Firefox y otros navegadores):

Firefox no soporta la instalación de PWA directamente. Puedes agregar el sitio a tus marcadores o crear un acceso directo manualmente.

", - "Tu peux ajouter NasaEmoji en tant qu'application web progressive (PWA) à ton écran d'accueil ou bureau pour un accès rapide.
Sur iOS (Safari) :
  1. Ouvre https://NasaEmoji.com dans Safari.
  2. Tape sur l'icône Partager (un carré avec une flèche vers le haut).
  3. Fais défiler vers le bas et tape sur Ajouter à l'écran d'accueil.
  4. Tape sur Ajouter dans le coin supérieur droit.
Sur Android (Chrome et autres navigateurs) :
  1. Ouvre https://NasaEmoji.com dans ton navigateur.
  2. Tape sur l'icône Menu (trois points) dans le coin supérieur droit.
  3. Sélectionne Ajouter à l'écran d'accueil ou Installer l'application.
  4. Suivez les instructions à l'écran.
Sur macOS (Safari) :
  1. Ouvre https://NasaEmoji.com dans Safari.
  2. Va dans Fichier > Ajouter au Dock.
Sur Desktop (Chrome) :
  1. Ouvre https://NasaEmoji.com dans Chrome.
  2. Clique sur l'icône Installer dans la barre d'adresse (un ordinateur avec une flèche vers le bas).
  3. Clique sur Installer.
Sur Desktop (Firefox et autres navigateurs) :

Firefox ne prend pas en charge l'installation directe des PWA. Tu peux ajouter le site à tes favoris ou créer un raccourci manuellement.

", - "يمكنك إضافة NasaEmoji كتطبيق ويب تقدمي (PWA) إلى شاشة البداية أو سطح المكتب للوصول السريع.
على iOS (Safari):
  1. افتح https://NasaEmoji.com في Safari.
  2. اضغط على أيقونة مشاركة (مربع مع سهم لأعلى).
  3. قم بالتمرير لأسفل واضغط على إضافة إلى شاشة البداية.
  4. اضغط على إضافة في الزاوية العليا اليمنى.
على Android (Chrome ومتصفحات أخرى):
  1. افتح https://NasaEmoji.com في متصفحك.
  2. اضغط على أيقونة القائمة (ثلاث نقاط) في الزاوية العليا اليمنى.
  3. اختر إضافة إلى شاشة البداية أو تثبيت التطبيق.
  4. اتبع التعليمات على الشاشة.
على macOS (Safari):
  1. افتح https://NasaEmoji.com في Safari.
  2. اذهب إلى ملف > إضافة إلى Dock.
على سطح المكتب (Chrome):
  1. افتح https://NasaEmoji.com في Chrome.
  2. انقر على أيقونة تثبيت في شريط العنوان (كمبيوتر مع سهم للأسفل).
  3. انقر على تثبيت.
على سطح المكتب (Firefox ومتصفحات أخرى):

Firefox لا يدعم تثبيت PWA مباشرة. يمكنك إضافة الموقع إلى المفضلة أو إنشاء اختصار يدويًا.

", - "" - ], - "faqQuestion10": [ + "", + ], + faqQuestion2: [ + "How do I use NasaEmoji?", + "Wie benutze ich NasaEmoji?", + "我如何使用 NasaEmoji?", + "Как использовать NasaEmoji?", + "¿Cómo uso NasaEmoji?", + "Comment utiliser NasaEmoji ?", + "كيف أستخدم NasaEmoji؟", + "", + ], + faqAnswer2: [ + "NasaEmoji features two apps: Conversion and Encryption. By default, the site opens with the Conversion app. You can switch between apps using the Choose App dropdown in the navigation bar.To Convert Text to Emojis:
  • Ensure you're on the Conversion app.
  • Enter your message in the input field.
  • Click the 🔄 Convert button.
  • Your converted message will appear in the output field.
To Encrypt a Message:
  • Switch to the Encryption app using the Choose App dropdown.
  • Enter your message in the input field.
  • Generate a key by clicking the 🔄 button next to the key input field, or enter your own key.
  • Click the 🔀 Encrypt / Decrypt button.
  • Your encrypted message will appear in the output field.
", + "NasaEmoji verfügt über zwei Apps: Konvertierung und Verschlüsselung. Standardmäßig öffnet sich die Website mit der Konvertierung-App. Du kannst zwischen den Apps wechseln, indem du das App auswählen-Dropdown in der Navigationsleiste verwendest.Um Text in Emojis zu konvertieren:
  • Stelle sicher, dass du in der Konvertierung-App bist.
  • Gib deine Nachricht im Eingabefeld ein.
  • Klicke auf die 🔄 Konvertieren-Schaltfläche.
  • Die konvertierte Nachricht erscheint im Ausgabefeld.
Um eine Nachricht zu verschlüsseln:
  • Wechsle zur Verschlüsselung-App mithilfe des App auswählen-Dropdowns.
  • Gib deine Nachricht im Eingabefeld ein.
  • Generiere einen Schlüssel, indem du auf die 🔄-Schaltfläche neben dem Schlüssel-Eingabefeld klickst, oder gib deinen eigenen Schlüssel ein.
  • Klicke auf die 🔀 Verschlüsseln / Entschlüsseln-Schaltfläche.
  • Deine verschlüsselte Nachricht erscheint im Ausgabefeld.
", + "NasaEmoji 具有两个应用程序:转换加密。默认情况下,网站以转换应用程序打开。你可以使用导航栏中的选择应用下拉菜单在应用程序之间切换。将文本转换为表情符号:
  • 确保你在转换应用程序中。
  • 在输入字段中输入你的消息。
  • 点击 🔄 转换 按钮。
  • 你的转换后消息将显示在输出字段中。
加密消息:
  • 使用 选择应用 下拉菜单切换到 加密 应用程序。
  • 在输入字段中输入你的消息。
  • 通过点击密钥输入字段旁边的 🔄 按钮生成一个密钥,或输入你自己的密钥。
  • 点击 🔀 加密 / 解密 按钮。
  • 你的加密消息将显示在输出字段中。
", + "NasaEmoji имеет два приложения: Конвертация и Шифрование. По умолчанию сайт открывается с приложением Конвертация. Вы можете переключаться между приложениями, используя выпадающее меню Выбрать приложение в навигационной панели.Чтобы конвертировать текст в эмодзи:
  • Убедитесь, что вы находитесь в приложении Конвертация.
  • Введите ваше сообщение в поле ввода.
  • Нажмите кнопку 🔄 Конвертировать.
  • Ваше конвертированное сообщение появится в поле вывода.
Чтобы зашифровать сообщение:
  • Переключитесь на приложение Шифрование, используя выпадающее меню Выбрать приложение.
  • Введите ваше сообщение в поле ввода.
  • Сгенерируйте ключ, нажав кнопку 🔄 рядом с полем ввода ключа, или введите свой собственный ключ.
  • Нажмите кнопку 🔀 Шифровать / Расшифровывать.
  • Ваше зашифрованное сообщение появится в поле вывода.
", + "NasaEmoji cuenta con dos aplicaciones: Conversión y Encriptación. Por defecto, el sitio se abre con la aplicación Conversión. Puedes cambiar entre aplicaciones usando el menú desplegable Elegir aplicación en la barra de navegación.Para Convertir Texto a Emojis:
  • Asegúrate de estar en la aplicación Conversión.
  • Ingresa tu mensaje en el campo de entrada.
  • Haz clic en el botón 🔄 Convertir.
  • Tu mensaje convertido aparecerá en el campo de salida.
Para Encriptar un Mensaje:
  • Cambia a la aplicación Encriptación usando el menú desplegable Elegir aplicación.
  • Ingresa tu mensaje en el campo de entrada.
  • Genera una clave haciendo clic en el botón 🔄 junto al campo de entrada de clave, o ingresa tu propia clave.
  • Haz clic en el botón 🔀 Encriptar / Desencriptar.
  • Tu mensaje encriptado aparecerá en el campo de salida.
", + "NasaEmoji dispose de deux applications : Conversion et Cryptage. Par défaut, le site s'ouvre avec l'application Conversion. Vous pouvez basculer entre les applications en utilisant le menu déroulant Choisir l'application dans la barre de navigation.Pour convertir du texte en émojis :
  • Assurez-vous que vous êtes dans l'application Conversion.
  • Entrez votre message dans le champ de saisie.
  • Cliquez sur le bouton 🔄 Convertir.
  • Votre message converti apparaîtra dans le champ de sortie.
Pour chiffrer un message :
  • Changez pour l'application Cryptage en utilisant le menu déroulant Choisir l'application.
  • Entrez votre message dans le champ de saisie.
  • Générez une clé en cliquant sur le bouton 🔄 à côté du champ de saisie de clé, ou entrez votre propre clé.
  • Cliquez sur le bouton 🔀 Chiffrer / Déchiffrer.
  • Votre message chiffré apparaîtra dans le champ de sortie.
", + "يحتوي NasaEmoji على تطبيقين: التحويل والتشفير. بشكل افتراضي، يفتح الموقع مع تطبيق التحويل. يمكنك التبديل بين التطبيقات باستخدام القائمة المنسدلة اختر التطبيق في شريط التنقل.لتحويل النص إلى إيموجي:
  • تأكد من أنك في تطبيق التحويل.
  • أدخل رسالتك في حقل الإدخال.
  • انقر على زر 🔄 تحويل.
  • ستظهر رسالتك المحولة في حقل الإخراج.
لتشفير رسالة:
  • انتقل إلى تطبيق التشفير باستخدام القائمة المنسدلة اختر التطبيق.
  • أدخل رسالتك في حقل الإدخال.
  • قم بإنشاء مفتاح بالنقر على زر 🔄 بجانب حقل إدخال المفتاح، أو أدخل مفتاحك الخاص.
  • انقر على زر 🔀 تشفير / فك تشفير.
  • ستظهر رسالتك المشفرة في حقل الإخراج.
", + "", + ], + faqQuestion3: [ + "How do I convert text to emojis?", + "Wie konvertiere ich Text in Emojis?", + "我如何将文本转换为表情符号?", + "Как я могу конвертировать текст в эмодзи?", + "¿Cómo convierto texto a emojis?", + "Comment convertir du texte en émojis ?", + "كيف أحول النص إلى إيموجي؟", + "", + ], + faqAnswer3: [ + "To convert text to emojis:
  • Ensure you're on the Conversion app (the default app).
  • Enter your message in the input field.
  • Click the 🔄 Convert button.
  • The converted message will appear in the output field.
  • You can copy the output using the Copy to clipboard button.
", + "Um Text in Emojis zu konvertieren:
  • Stelle sicher, dass du in der Konvertierung-App bist (die Standard-App).
  • Gib deine Nachricht im Eingabefeld ein.
  • Klicke auf die 🔄 Konvertieren-Schaltfläche.
  • Die konvertierte Nachricht erscheint im Ausgabefeld.
  • Du kannst die Ausgabe mit der In die Zwischenablage kopieren-Schaltfläche kopieren.
", + "将文本转换为表情符号的方法:
  • 确保你在 转换 应用程序中(默认应用程序)。
  • 在输入字段中输入你的消息。
  • 点击 🔄 转换 按钮。
  • 转换后的消息将显示在输出字段中。
  • 你可以使用 复制到剪贴板 按钮复制输出。
", + "Чтобы конвертировать текст в эмодзи:
  • Убедитесь, что вы находитесь в приложении Конвертация (приложение по умолчанию).
  • Введите свое сообщение в поле ввода.
  • Нажмите кнопку 🔄 Конвертировать.
  • Конвертированное сообщение появится в поле вывода.
  • Вы можете скопировать вывод, используя кнопку Скопировать в буфер обмена.
", + "Para convertir texto a emojis:
  • Asegúrate de estar en la aplicación Conversión (la aplicación predeterminada).
  • Ingresa tu mensaje en el campo de entrada.
  • Haz clic en el botón 🔄 Convertir.
  • Tu mensaje convertido aparecerá en el campo de salida.
  • Puedes copiar la salida usando el botón Copiar al portapapeles.
", + "Pour convertir du texte en émojis :
  • Assurez-vous que vous êtes dans l'application Conversion (l'application par défaut).
  • Entrez votre message dans le champ de saisie.
  • Cliquez sur le bouton 🔄 Convertir.
  • Le message converti apparaîtra dans le champ de sortie.
  • Vous pouvez copier la sortie en utilisant le bouton Copier dans le presse-papiers.
", + "لتحويل النص إلى إيموجي:
  • تأكد من أنك في تطبيق التحويل (التطبيق الافتراضي).
  • أدخل رسالتك في حقل الإدخال.
  • انقر على زر 🔄 تحويل.
  • ستظهر رسالتك المحولة في حقل الإخراج.
  • يمكنك نسخ المخرجات باستخدام زر نسخ إلى الحافظة.
", + "", + ], + faqQuestion4: [ + "How do I encrypt a message?", + "Wie verschlüssele ich eine Nachricht?", + "我如何加密消息?", + "Как зашифровать сообщение?", + "¿Cómo encripto un mensaje?", + "Comment chiffrer un message ?", + "كيف أشفر رسالة؟", + "", + ], + faqAnswer4: [ + "To encrypt a message:
  • Switch to the Encryption app using the Choose App dropdown.
  • Enter your message in the input field.
  • Generate a key by clicking the 🔄 button next to the key input field, or enter your own key.
  • Click the 🔀 Encrypt / Decrypt button.
  • Your encrypted message will appear in the output field.
", + "Um eine Nachricht zu verschlüsseln:
  • Wechsle zur Verschlüsselung-App mithilfe des App auswählen-Dropdowns.
  • Gib deine Nachricht im Eingabefeld ein.
  • Generiere einen Schlüssel, indem du auf die 🔄-Schaltfläche neben dem Schlüssel-Eingabefeld klickst, oder gib deinen eigenen Schlüssel ein.
  • Klicke auf die 🔀 Verschlüsseln / Entschlüsseln-Schaltfläche.
  • Deine verschlüsselte Nachricht erscheint im Ausgabefeld.
", + "要加密消息:
  • 使用 选择应用 下拉菜单切换到 加密 应用程序。
  • 在输入字段中输入你的消息。
  • 通过点击密钥输入字段旁边的 🔄 按钮生成一个密钥,或输入你自己的密钥。
  • 点击 🔀 加密 / 解密 按钮。
  • 你的加密消息将显示在输出字段中。
", + "Чтобы зашифровать сообщение:
  • Переключитесь на приложение Шифрование, используя выпадающее меню Выбрать приложение.
  • Введите свое сообщение в поле ввода.
  • Сгенерируйте ключ, нажав кнопку 🔄 рядом с полем ввода ключа, или введите свой собственный ключ.
  • Нажмите кнопку 🔀 Шифровать / Расшифровывать.
  • Ваше зашифрованное сообщение появится в поле вывода.
", + "Para encriptar un mensaje:
  • Cambia a la aplicación Encriptación usando el menú desplegable Elegir aplicación.
  • Ingresa tu mensaje en el campo de entrada.
  • Genera una clave haciendo clic en el botón 🔄 junto al campo de entrada de clave, o ingresa tu propia clave.
  • Haz clic en el botón 🔀 Encriptar / Desencriptar.
  • Tu mensaje encriptado aparecerá en el campo de salida.
", + "Pour chiffrer un message :
  • Changez pour l'application Cryptage en utilisant le menu déroulant Choisir l'application.
  • Entrez votre message dans le champ de saisie.
  • Générez une clé en cliquant sur le bouton 🔄 à côté du champ de saisie de clé, ou entrez votre propre clé.
  • Cliquez sur le bouton 🔀 Chiffrer / Déchiffrer.
  • Votre message chiffré apparaîtra dans le champ de sortie.
", + "لتشفير رسالة:
  • انتقل إلى تطبيق التشفير باستخدام القائمة المنسدلة اختر التطبيق.
  • أدخل رسالتك في حقل الإدخال.
  • قم بإنشاء مفتاح بالنقر على زر 🔄 بجانب حقل إدخال المفتاح، أو أدخل مفتاحك الخاص.
  • انقر على زر 🔀 تشفير / فك تشفير.
  • ستظهر رسالتك المشفرة في حقل الإخراج.
", + "", + ], + faqQuestion5: [ + "How do I decrypt a message?", + "Wie entschlüssele ich eine Nachricht?", + "我如何解密消息?", + "Как расшифровать сообщение?", + "¿Cómo desencripto un mensaje?", + "Comment déchiffrer un message ?", + "كيف أفك تشفير رسالة؟", + "", + ], + faqAnswer5: [ + "To decrypt a message:
  • Switch to the Encryption app.
  • Paste the encrypted emoji message into the input field.
  • Enter the key used for encryption in the key input field.
  • Click the 🔀 Encrypt / Decrypt button.
  • Your decrypted message will appear in the output field.
", + "Um eine Nachricht zu entschlüsseln:
  • Wechsle zur Verschlüsselung-App.
  • Füge die verschlüsselte Emoji-Nachricht in das Eingabefeld ein.
  • Gib den zur Verschlüsselung verwendeten Schlüssel im Schlüssel-Eingabefeld ein.
  • Klicke auf die 🔀 Verschlüsseln / Entschlüsseln-Schaltfläche.
  • Deine entschlüsselte Nachricht erscheint im Ausgabefeld.
", + "要解密消息:
  • 切换到 加密 应用程序。
  • 将加密的表情符号消息粘贴到输入字段中。
  • 在密钥输入字段中输入用于加密的密钥。
  • 点击 🔀 加密 / 解密 按钮。
  • 你的解密消息将显示在输出字段中。
", + "Чтобы расшифровать сообщение:
  • Переключитесь на приложение Шифрование.
  • Вставьте зашифрованное сообщение-эмодзи в поле ввода.
  • Введите ключ, использованный для шифрования, в поле ввода ключа.
  • Нажмите кнопку 🔀 Шифровать / Расшифровывать.
  • Ваше расшифрованное сообщение появится в поле вывода.
", + "Para desencriptar un mensaje:
  • Cambia a la aplicación Encriptación.
  • Pega el mensaje de emoji encriptado en el campo de entrada.
  • Ingresa la clave utilizada para la encriptación en el campo de entrada de clave.
  • Haz clic en el botón 🔀 Encriptar / Desencriptar.
  • Tu mensaje desencriptado aparecerá en el campo de salida.
", + "Pour déchiffrer un message :
  • Changez pour l'application Cryptage.
  • Collez le message emoji chiffré dans le champ de saisie.
  • Entrez la clé utilisée pour le cryptage dans le champ de saisie de clé.
  • Cliquez sur le bouton 🔀 Chiffrer / Déchiffrer.
  • Votre message déchiffré apparaîtra dans le champ de sortie.
", + "لفك تشفير رسالة:
  • انتقل إلى تطبيق التشفير.
  • الصق الرسالة المشفرة بإيموجي في حقل الإدخال.
  • أدخل المفتاح المستخدم في التشفير في حقل إدخال المفتاح.
  • انقر على زر 🔀 تشفير / فك تشفير.
  • ستظهر رسالتك المفكوكة في حقل الإخراج.
", + "", + ], + faqQuestion6: [ + "How do I generate an emoji key?", + "Wie generiere ich einen Emoji-Schlüssel?", + "我如何生成表情符号密钥?", + "Как сгенерировать эмодзи-ключ?", + "¿Cómo genero una clave de emoji?", + "Comment générer une clé emoji ?", + "كيف أُولّد مفتاح إيموجي؟", + "", + ], + faqAnswer6: [ + "To generate an emoji key in the Encryption app:
  • Click the 🔄 button next to the key input field.
  • The generated key will appear in the key input field.
  • You can copy the key using the Copy button.
  • Save the key in one of the 5 available slots using the 💾 Save button for future use.
", + "Um einen Emoji-Schlüssel in der Verschlüsselung-App zu generieren:
  • Klicke auf die 🔄-Schaltfläche neben dem Schlüssel-Eingabefeld.
  • Der generierte Schlüssel erscheint im Schlüssel-Eingabefeld.
  • Du kannst den Schlüssel mit der Copy-Schaltfläche kopieren.
  • Speichere den Schlüssel in einem der 5 verfügbaren Slots mit der 💾 Speichern-Schaltfläche für die zukünftige Verwendung.
", + "在 加密 应用程序中生成表情符号密钥的方法:
  • 点击密钥输入字段旁边的 🔄 按钮。
  • 生成的密钥将出现在密钥输入字段中。
  • 你可以使用 复制 按钮复制密钥。
  • 使用 💾 保存 按钮将密钥保存在5个可用槽之一中以备将来使用。
", + "Чтобы сгенерировать эмодзи-ключ в приложении Шифрование:
  • Нажмите кнопку 🔄 рядом с полем ввода ключа.
  • Сгенерированный ключ появится в поле ввода ключа.
  • Вы можете скопировать ключ, используя кнопку Copy.
  • Сохраните ключ в одном из 5 доступных слотов, используя кнопку 💾 Сохранить для дальнейшего использования.
", + "Para generar una clave de emoji en la aplicación Encriptación:
  • Haz clic en el botón 🔄 junto al campo de entrada de clave.
  • La clave generada aparecerá en el campo de entrada de clave.
  • Puedes copiar la clave usando el botón Copiar.
  • Guarda la clave en una de las 5 ranuras disponibles usando el botón 💾 Guardar para uso futuro.
", + "Pour générer une clé emoji dans l'application Cryptage :
  • Cliquez sur le bouton 🔄 à côté du champ de saisie de clé.
  • La clé générée apparaîtra dans le champ de saisie de clé.
  • Vous pouvez copier la clé en utilisant le bouton Copier.
  • Sauvegardez la clé dans l'un des 5 emplacements disponibles en utilisant le bouton 💾 Sauvegarder pour une utilisation future.
", + "لإنشاء مفتاح إيموجي في تطبيق التشفير:
  • انقر على زر 🔄 بجانب حقل إدخال المفتاح.
  • سيظهر المفتاح المُولد في حقل إدخال المفتاح.
  • يمكنك نسخ المفتاح باستخدام زر نسخ.
  • احفظ المفتاح في أحد الخمسة فتحات المتاحة باستخدام زر 💾 حفظ للاستخدام المستقبلي.
", + "", + ], + faqQuestion9: [ + "How do I add NasaEmoji to my home screen or desktop?", + "Wie füge ich NasaEmoji zu meinem Startbildschirm oder Desktop hinzu?", + "我如何将 NasaEmoji 添加到我的主屏幕或桌面?", + "Как добавить NasaEmoji на главный экран или рабочий стол?", + "¿Cómo agrego NasaEmoji a mi pantalla de inicio o escritorio?", + "Comment ajouter NasaEmoji à votre écran d'accueil ou bureau ?", + "كيف أضيف NasaEmoji إلى شاشة البداية أو سطح المكتب؟", + "", + ], + faqAnswer9: [ + "You can add NasaEmoji as a Progressive Web App (PWA) to your home screen or desktop for quick access.
On iOS (Safari):
  1. Open https://NasaEmoji.com in Safari.
  2. Tap the Share icon (a square with an upward arrow).
  3. Scroll down and tap Add to Home Screen.
  4. Tap Add in the upper-right corner.
On Android (Chrome and other browsers):
  1. Open https://NasaEmoji.com in your browser.
  2. Tap the Menu icon (three dots) in the upper-right corner.
  3. Select Add to Home screen or Install App.
  4. Follow the on-screen instructions.
On macOS (Safari):
  1. Open https://NasaEmoji.com in Safari.
  2. Go to File > Add to Dock.
On Desktop (Chrome):
  1. Open https://NasaEmoji.com in Chrome.
  2. Click the Install icon in the address bar (a computer with a down arrow).
  3. Click Install.
On Desktop (Firefox and other browsers):

Firefox does not support installing PWAs directly. You can bookmark the site or create a shortcut manually.

", + "Du kannst NasaEmoji als Progressive Web App (PWA) zu deinem Startbildschirm oder Desktop für einen schnellen Zugriff hinzufügen.
Auf iOS (Safari):
  1. Öffne https://NasaEmoji.com in Safari.
  2. Tippe auf das Teilen-Symbol (ein Quadrat mit einem nach oben zeigenden Pfeil).
  3. Scroll nach unten und tippe auf Zum Home-Bildschirm hinzufügen.
  4. Tippe oben rechts auf Hinzufügen.
Auf Android (Chrome und anderen Browsern):
  1. Öffne https://NasaEmoji.com in deinem Browser.
  2. Tippe auf das Menü-Symbol (drei Punkte) oben rechts.
  3. Wähle Zum Startbildschirm hinzufügen oder App installieren.
  4. Folge den Anweisungen auf dem Bildschirm.
Auf macOS (Safari):
  1. Öffne https://NasaEmoji.com in Safari.
  2. Gehe zu Datei > Zum Dock hinzufügen.
Auf Desktop (Chrome):
  1. Öffne https://NasaEmoji.com in Chrome.
  2. Klicke auf das Installieren-Symbol in der Adressleiste (ein Computer mit einem nach unten zeigenden Pfeil).
  3. Klicke auf Installieren.
Auf Desktop (Firefox und andere Browser):

Firefox unterstützt die Installation von PWAs nicht direkt. Du kannst die Website zu deinen Lesezeichen hinzufügen oder eine Verknüpfung manuell erstellen.

", + "你可以将 NasaEmoji 作为渐进式网页应用程序(PWA)添加到你的主屏幕或桌面,以便快速访问。
在 iOS(Safari)上:
  1. 在 Safari 中打开 https://NasaEmoji.com。
  2. 点击 分享 图标(一个带有向上箭头的方形)。
  3. 向下滚动并点击 添加到主屏幕
  4. 点击右上角的 添加
在 Android(Chrome 和其他浏览器)上:
  1. 在你的浏览器中打开 https://NasaEmoji.com。
  2. 点击右上角的 菜单 图标(三个点)。
  3. 选择 添加到主屏幕安装应用
  4. 按照屏幕上的指示操作。
在 macOS(Safari)上:
  1. 在 Safari 中打开 https://NasaEmoji.com。
  2. 转到 文件 > 添加到 Dock
在桌面(Chrome)上:
  1. 在 Chrome 中打开 https://NasaEmoji.com。
  2. 点击地址栏中的 安装 图标(一个带有向下箭头的电脑)。
  3. 点击 安装
在桌面(Firefox 和其他浏览器)上:

Firefox 不支持直接安装 PWA。你可以将该网站添加到书签或手动创建快捷方式。

", + "Ты можешь добавить NasaEmoji как Progressive Web App (PWA) на свой главный экран или рабочий стол для быстрого доступа.
На iOS (Safari):
  1. Открой https://NasaEmoji.com в Safari.
  2. Нажми на значок Поделиться (квадрат со стрелкой вверх).
  3. Прокрути вниз и нажми Добавить на главный экран.
  4. Нажми Добавить в правом верхнем углу.
На Android (Chrome и других браузерах):
  1. Открой https://NasaEmoji.com в своем браузере.
  2. Нажми на значок Меню (три точки) в правом верхнем углу.
  3. Выбери Добавить на главный экран или Установить приложение.
  4. Следуй инструкциям на экране.
На macOS (Safari):
  1. Открой https://NasaEmoji.com в Safari.
  2. Перейди в Файл > Добавить в Dock.
На рабочем столе (Chrome):
  1. Открой https://NasaEmoji.com в Chrome.
  2. Нажми на значок Установить в адресной строке (компьютер со стрелкой вниз).
  3. Нажми на Установить.
На рабочем столе (Firefox и других браузерах):

Firefox не поддерживает прямую установку PWA. Ты можешь добавить сайт в закладки или создать ярлык вручную.

", + "Puedes agregar NasaEmoji como una Aplicación Web Progresiva (PWA) a tu pantalla de inicio o escritorio para un acceso rápido.
En iOS (Safari):
  1. Abre https://NasaEmoji.com en Safari.
  2. Toca el ícono de Compartir (un cuadrado con una flecha hacia arriba).
  3. Desplázate hacia abajo y toca Agregar a la pantalla de inicio.
  4. Toca Agregar en la esquina superior derecha.
En Android (Chrome y otros navegadores):
  1. Abre https://NasaEmoji.com en tu navegador.
  2. Toca el ícono de Menú (tres puntos) en la esquina superior derecha.
  3. Selecciona Agregar a la pantalla de inicio o Instalar aplicación.
  4. Sigue las instrucciones en pantalla.
En macOS (Safari):
  1. Abre https://NasaEmoji.com en Safari.
  2. Ve a Archivo > Agregar al Dock.
En el escritorio (Chrome):
  1. Abre https://NasaEmoji.com en Chrome.
  2. Haz clic en el ícono de Instalar en la barra de direcciones (una computadora con una flecha hacia abajo).
  3. Haz clic en Instalar.
En el escritorio (Firefox y otros navegadores):

Firefox no soporta la instalación de PWA directamente. Puedes agregar el sitio a tus marcadores o crear un acceso directo manualmente.

", + "Tu peux ajouter NasaEmoji en tant qu'application web progressive (PWA) à ton écran d'accueil ou bureau pour un accès rapide.
Sur iOS (Safari) :
  1. Ouvre https://NasaEmoji.com dans Safari.
  2. Tape sur l'icône Partager (un carré avec une flèche vers le haut).
  3. Fais défiler vers le bas et tape sur Ajouter à l'écran d'accueil.
  4. Tape sur Ajouter dans le coin supérieur droit.
Sur Android (Chrome et autres navigateurs) :
  1. Ouvre https://NasaEmoji.com dans ton navigateur.
  2. Tape sur l'icône Menu (trois points) dans le coin supérieur droit.
  3. Sélectionne Ajouter à l'écran d'accueil ou Installer l'application.
  4. Suivez les instructions à l'écran.
Sur macOS (Safari) :
  1. Ouvre https://NasaEmoji.com dans Safari.
  2. Va dans Fichier > Ajouter au Dock.
Sur Desktop (Chrome) :
  1. Ouvre https://NasaEmoji.com dans Chrome.
  2. Clique sur l'icône Installer dans la barre d'adresse (un ordinateur avec une flèche vers le bas).
  3. Clique sur Installer.
Sur Desktop (Firefox et autres navigateurs) :

Firefox ne prend pas en charge l'installation directe des PWA. Tu peux ajouter le site à tes favoris ou créer un raccourci manuellement.

", + "يمكنك إضافة NasaEmoji كتطبيق ويب تقدمي (PWA) إلى شاشة البداية أو سطح المكتب للوصول السريع.
على iOS (Safari):
  1. افتح https://NasaEmoji.com في Safari.
  2. اضغط على أيقونة مشاركة (مربع مع سهم لأعلى).
  3. قم بالتمرير لأسفل واضغط على إضافة إلى شاشة البداية.
  4. اضغط على إضافة في الزاوية العليا اليمنى.
على Android (Chrome ومتصفحات أخرى):
  1. افتح https://NasaEmoji.com في متصفحك.
  2. اضغط على أيقونة القائمة (ثلاث نقاط) في الزاوية العليا اليمنى.
  3. اختر إضافة إلى شاشة البداية أو تثبيت التطبيق.
  4. اتبع التعليمات على الشاشة.
على macOS (Safari):
  1. افتح https://NasaEmoji.com في Safari.
  2. اذهب إلى ملف > إضافة إلى Dock.
على سطح المكتب (Chrome):
  1. افتح https://NasaEmoji.com في Chrome.
  2. انقر على أيقونة تثبيت في شريط العنوان (كمبيوتر مع سهم للأسفل).
  3. انقر على تثبيت.
على سطح المكتب (Firefox ومتصفحات أخرى):

Firefox لا يدعم تثبيت PWA مباشرة. يمكنك إضافة الموقع إلى المفضلة أو إنشاء اختصار يدويًا.

", + "", + ], + faqQuestion10: [ "Is my data secure?", "Sind meine Daten sicher?", "我的数据安全吗?", @@ -562,9 +747,9 @@ function getTranslation(key, langIndex) { "¿Está segura mi información?", "Mes données sont-elles sécurisées ?", "هل بياناتي آمنة؟", - "" + "", ], - "faqAnswer10": [ + faqAnswer10: [ "Yes, all encryption and decryption happen locally on your device. No data is sent anywhere, ensuring your messages remain private.", "Ja, alle Verschlüsselungen und Entschlüsselungen erfolgen lokal auf deinem Gerät. Es werden keine Daten irgendwohin gesendet, wodurch deine Nachrichten privat bleiben.", "是的,所有加密和解密过程都在你的设备上本地进行。不会将任何数据发送到任何地方,确保你的消息保持私密。", @@ -572,9 +757,9 @@ function getTranslation(key, langIndex) { "Sí, todas las encriptaciones y desencriptaciones ocurren localmente en tu dispositivo. No se envían datos a ningún lado, asegurando que tus mensajes permanezcan privados.", "Oui, tous les processus de chiffrement et de déchiffrement se déroulent localement sur votre appareil. Aucune donnée n'est envoyée nulle part, garantissant que vos messages restent privés.", "نعم، جميع عمليات التشفير وفك التشفير تتم محليًا على جهازك. لا يقوم NasaEmoji بإرسال أي بيانات عبر الإنترنت.", - "" + "", ], - "faqQuestion11": [ + faqQuestion11: [ "Can I convert text to emojis without encryption?", "Kann ich Text ohne Verschlüsselung in Emojis umwandeln?", "我可以在不加密的情况下将文本转换为表情符号吗?", @@ -582,19 +767,19 @@ function getTranslation(key, langIndex) { "¿Puedo convertir texto a emojis sin encriptación?", "Puis-je convertir du texte en émojis sans chiffrement ?", "هل يمكنني تحويل النص إلى إيموجي بدون تشفير؟", - "" + "", ], - "faqAnswer11": [ - "Yes, NasaEmoji allows you to convert any text to emojis and back without encryption using the \"Convert\" feature.", - "Ja, NasaEmoji ermöglicht es dir, jeden Text ohne Verschlüsselung in Emojis und zurück zu konvertieren, indem du die Funktion \"Convert\" verwendest.", + faqAnswer11: [ + 'Yes, NasaEmoji allows you to convert any text to emojis and back without encryption using the "Convert" feature.', + 'Ja, NasaEmoji ermöglicht es dir, jeden Text ohne Verschlüsselung in Emojis und zurück zu konvertieren, indem du die Funktion "Convert" verwendest.', "是的,NasaEmoji 允许你使用“转换”功能在不加密的情况下将任何文本转换为表情符号并返回。", - "Да, NasaEmoji позволяет конвертировать любой текст в эмодзи и обратно без шифрования, используя функцию \"Convert\".", - "Sí, NasaEmoji te permite convertir cualquier texto a emojis y viceversa sin encriptación utilizando la función \"Convert\".", - "Oui, NasaEmoji vous permet de convertir n'importe quel texte en émojis et vice versa sans chiffrement en utilisant la fonctionnalité \"Convert\".", - "نعم، يتيح لك NasaEmoji تحويل أي نص إلى إيموجي والعودة بدون تشفير باستخدام ميزة \"تحويل\".", - "" + 'Да, NasaEmoji позволяет конвертировать любой текст в эмодзи и обратно без шифрования, используя функцию "Convert".', + 'Sí, NasaEmoji te permite convertir cualquier texto a emojis y viceversa sin encriptación utilizando la función "Convert".', + 'Oui, NasaEmoji vous permet de convertir n\'importe quel texte en émojis et vice versa sans chiffrement en utilisant la fonctionnalité "Convert".', + 'نعم، يتيح لك NasaEmoji تحويل أي نص إلى إيموجي والعودة بدون تشفير باستخدام ميزة "تحويل".', + "", ], - "faqQuestion12": [ + faqQuestion12: [ "What encryption algorithms does NasaEmoji use?", "Welche Verschlüsselungsalgorithmen verwendet NasaEmoji?", "NasaEmoji 使用了哪些加密算法?", @@ -602,9 +787,9 @@ function getTranslation(key, langIndex) { "¿Qué algoritmos de cifrado utiliza NasaEmoji?", "Quels algorithmes de chiffrement NasaEmoji utilise-t-il ?", "ما هي خوارزميات التشفير التي يستخدمها NasaEmoji؟", - "" + "", ], - "faqAnswer12": [ + faqAnswer12: [ "NasaEmoji uses a combination of AES-GCM, AES-CTR, and XOR encryption algorithms to secure your messages.", "NasaEmoji verwendet eine Kombination aus AES-GCM, AES-CTR und XOR Verschlüsselungsalgorithmen, um deine Nachrichten zu sichern.", "NasaEmoji 使用 AES-GCM、AES-CTR 和 XOR 加密算法的组合来保护您的消息。", @@ -612,9 +797,9 @@ function getTranslation(key, langIndex) { "NasaEmoji utiliza una combinación de algoritmos de cifrado AES-GCM, AES-CTR y XOR para asegurar tus mensajes.", "NasaEmoji utilise une combinaison des algorithmes de chiffrement AES-GCM, AES-CTR et XOR pour sécuriser tes messages.", "يستخدم NasaEmoji مزيجًا من خوارزميات التشفير AES-GCM و AES-CTR و XOR لتأمين رسائلك.", - "" + "", ], - "faqQuestion13": [ + faqQuestion13: [ "Why are multiple encryption algorithms used?", "Warum werden mehrere Verschlüsselungsalgorithmen verwendet?", "为什么使用多个加密算法?", @@ -622,9 +807,9 @@ function getTranslation(key, langIndex) { "¿Por qué se utilizan múltiples algoritmos de cifrado?", "Pourquoi plusieurs algorithmes de chiffrement sont-ils utilisés ?", "لماذا يتم استخدام خوارزميات تشفير متعددة؟", - "" + "", ], - "faqAnswer13": [ + faqAnswer13: [ "Using multiple algorithms enhances security by adding layers of encryption, making it more difficult for unauthorized parties to decrypt the message.", "Durch die Verwendung mehrerer Algorithmen wird die Sicherheit erhöht, indem Verschlüsselungsebenen hinzugefügt werden, was es Unbefugten erschwert, die Nachricht zu entschlüsseln.", "使用多个算法通过添加加密层来增强安全性,使未经授权的方更难解密消息。", @@ -632,9 +817,9 @@ function getTranslation(key, langIndex) { "El uso de múltiples algoritmos mejora la seguridad al agregar capas de cifrado, lo que dificulta que partes no autorizadas descifren el mensaje.", "L'utilisation de plusieurs algorithmes améliore la sécurité en ajoutant des couches de chiffrement, ce qui rend plus difficile pour les parties non autorisées de déchiffrer le message.", "يعمل استخدام خوارزميات متعددة على تعزيز الأمان عن طريق إضافة طبقات من التشفير، مما يجعل من الصعب على الأطراف غير المصرح لها فك تشفير الرسالة.", - "" + "", ], - "faqQuestion14": [ + faqQuestion14: [ "What is key hashing and why is it used?", "Was ist Schlüssel-Hashing und warum wird es verwendet?", "什么是密钥哈希,为什么要使用它?", @@ -642,9 +827,9 @@ function getTranslation(key, langIndex) { "¿Qué es el hash de clave y por qué se utiliza?", "Qu'est-ce que le hachage de clé et pourquoi est-il utilisé ?", "ما هو تجزئة المفتاح ولماذا يتم استخدامها؟", - "" + "", ], - "faqAnswer14": [ + faqAnswer14: [ "Key hashing transforms your key into a fixed-size hash using multiple algorithms, enhancing security by preventing direct access to the original key and making brute-force attacks more difficult.", "Schlüssel-Hashing wandelt deinen Schlüssel mithilfe mehrerer Algorithmen in einen Hash fester Größe um, wodurch die Sicherheit erhöht wird, indem der direkte Zugriff auf den ursprünglichen Schlüssel verhindert und Brute-Force-Angriffe erschwert werden.", "密钥哈希使用多个算法将您的密钥转换为固定大小的哈希,增强安全性,防止直接访问原始密钥,并使暴力攻击更加困难。", @@ -652,9 +837,9 @@ function getTranslation(key, langIndex) { "El hash de clave transforma tu clave en un hash de tamaño fijo utilizando múltiples algoritmos, mejorando la seguridad al prevenir el acceso directo a la clave original y dificultar los ataques de fuerza bruta.", "Le hachage de clé transforme ta clé en un hachage de taille fixe en utilisant plusieurs algorithmes, améliorant la sécurité en empêchant l'accès direct à la clé originale et en rendant les attaques par force brute plus difficiles.", "تجزئة المفتاح تحول مفتاحك إلى تجزئة بحجم ثابت باستخدام خوارزميات متعددة، مما يعزز الأمان عن طريق منع الوصول المباشر إلى المفتاح الأصلي وجعل هجمات القوة الغاشمة أكثر صعوبة.", - "" + "", ], - "faqQuestion15": [ + faqQuestion15: [ "How does key hashing prevent brute-force attacks?", "Wie verhindert Schlüssel-Hashing Brute-Force-Angriffe?", "密钥哈希如何防止暴力攻击?", @@ -662,9 +847,9 @@ function getTranslation(key, langIndex) { "¿Cómo previene el hash de clave los ataques de fuerza bruta?", "Comment le hachage de clé prévient-il les attaques par force brute ?", "كيف يمنع تجزئة المفتاح هجمات القوة الغاشمة؟", - "" + "", ], - "faqAnswer15": [ + faqAnswer15: [ "By hashing the key multiple times with different algorithms and salts, it increases the computational effort required to guess the key, thus deterring brute-force attempts.", "Durch mehrmaliges Hashing des Schlüssels mit verschiedenen Algorithmen und Salzen wird der rechnerische Aufwand erhöht, um den Schlüssel zu erraten, wodurch Brute-Force-Versuche abgeschreckt werden.", "通过使用不同的算法和盐对密钥进行多次哈希,增加了猜测密钥所需的计算努力,从而阻止暴力攻击。", @@ -672,9 +857,9 @@ function getTranslation(key, langIndex) { "Al hashear la clave múltiples veces con diferentes algoritmos y sales, aumenta el esfuerzo computacional requerido para adivinar la clave, disuadiendo así los intentos de fuerza bruta.", "En hachant la clé plusieurs fois avec différents algorithmes et sels, cela augmente l'effort computationnel nécessaire pour deviner la clé, dissuadant ainsi les tentatives par force brute.", "من خلال تجزئة المفتاح عدة مرات باستخدام خوارزميات وأملاح مختلفة، يزيد ذلك من الجهد الحسابي المطلوب لتخمين المفتاح، وبالتالي يردع محاولات القوة الغاشمة.", - "" + "", ], - "faqQuestion16": [ + faqQuestion16: [ "What is the CryptoJS library?", "Was ist die CryptoJS-Bibliothek?", "什么是 CryptoJS 库?", @@ -682,9 +867,9 @@ function getTranslation(key, langIndex) { "¿Qué es la biblioteca CryptoJS?", "Qu'est-ce que la bibliothèque CryptoJS ?", "ما هي مكتبة CryptoJS؟", - "" + "", ], - "faqAnswer17": [ + faqAnswer17: [ "CryptoJS is considered secure as it implements well-known cryptographic algorithms correctly. It is used in many applications for secure data handling.", "CryptoJS gilt als sicher, da es bekannte kryptografische Algorithmen korrekt implementiert. Es wird in vielen Anwendungen für die sichere Datenverarbeitung verwendet.", "CryptoJS 被认为是安全的,因为它正确地实现了众所周知的加密算法。它在许多应用程序中用于安全的数据处理。", @@ -692,9 +877,9 @@ function getTranslation(key, langIndex) { "CryptoJS se considera segura ya que implementa correctamente algoritmos criptográficos bien conocidos. Se utiliza en muchas aplicaciones para el manejo seguro de datos.", "CryptoJS est considérée comme sécurisée car elle implémente correctement des algorithmes cryptographiques bien connus. Elle est utilisée dans de nombreuses applications pour la gestion sécurisée des données.", "تعتبر CryptoJS آمنة حيث تقوم بتنفيذ خوارزميات التشفير المعروفة بشكل صحيح. يتم استخدامها في العديد من التطبيقات لمعالجة البيانات بأمان.", - "" + "", ], - "faqQuestion18": [ + faqQuestion18: [ "How does NasaEmoji handle key storage?", "Wie verwaltet NasaEmoji die Schlüssel-Speicherung?", "NasaEmoji 如何处理密钥存储?", @@ -702,9 +887,9 @@ function getTranslation(key, langIndex) { "¿Cómo maneja NasaEmoji el almacenamiento de claves?", "Comment NasaEmoji gère-t-il le stockage des clés ?", "كيف يتعامل NasaEmoji مع تخزين المفاتيح؟", - "" + "", ], - "faqAnswer18": [ + faqAnswer18: [ "You can save keys locally in one of the 5 available slots using your browser's local storage for quick access.", "Du kannst Schlüssel lokal in einem der 5 verfügbaren Slots speichern, indem du den lokalen Speicher deines Browsers für schnellen Zugriff nutzt.", "您可以使用浏览器的本地存储将密钥本地保存在 5 个可用插槽中的一个,以便快速访问。", @@ -712,9 +897,9 @@ function getTranslation(key, langIndex) { "Puedes guardar claves localmente en una de las 5 ranuras disponibles utilizando el almacenamiento local de tu navegador para un acceso rápido.", "Tu peux enregistrer des clés localement dans l'un des 5 emplacements disponibles en utilisant le stockage local de ton navigateur pour un accès rapide.", "يمكنك حفظ المفاتيح محليًا في أحد الخمسة فتحات المتاحة باستخدام التخزين المحلي لمتصفحك للوصول السريع.", - "" + "", ], - "faqQuestion19": [ + faqQuestion19: [ "Does NasaEmoji send any data over the internet?", "Sendet NasaEmoji irgendwelche Daten über das Internet?", "NasaEmoji 会通过互联网发送任何数据吗?", @@ -722,9 +907,9 @@ function getTranslation(key, langIndex) { "¿NasaEmoji envía datos a través de Internet?", "NasaEmoji envoie-t-il des données sur Internet ?", "هل يرسل NasaEmoji أي بيانات عبر الإنترنت؟", - "" + "", ], - "faqAnswer19": [ + faqAnswer19: [ "No, all operations are performed locally on your device. NasaEmoji does not send any data over the internet.", "Nein, alle Operationen werden lokal auf deinem Gerät ausgeführt. NasaEmoji sendet keine Daten über das Internet.", "不,所有操作都在您的设备上本地执行。NasaEmoji 不会通过互联网发送任何数据。", @@ -732,9 +917,9 @@ function getTranslation(key, langIndex) { "No, todas las operaciones se realizan localmente en tu dispositivo. NasaEmoji no envía ningún dato a través de Internet.", "Non, toutes les opérations sont effectuées localement sur ton appareil. NasaEmoji n'envoie aucune donnée sur Internet.", "لا، جميع العمليات تتم محليًا على جهازك. لا يقوم NasaEmoji بإرسال أي بيانات عبر الإنترنت.", - "" + "", ], - "faqQuestion20": [ + faqQuestion20: [ "Can I use NasaEmoji offline?", "Kann ich NasaEmoji offline nutzen?", "我可以离线使用 NasaEmoji 吗?", @@ -742,19 +927,19 @@ function getTranslation(key, langIndex) { "¿Puedo usar NasaEmoji sin conexión?", "Puis-je utiliser NasaEmoji hors ligne ?", "هل يمكنني استخدام NasaEmoji بدون اتصال بالإنترنت؟", - "" - ], - "faqAnswer20": [ - "Yes, you can download NasaEmoji for local execution and use it offline without an internet connection. The latest release of the program can be downloaded under this link.
  • Download the source code on GitHub as a zip.
  • Unpack the zip.
  • Open index.html with the browser of your choice.
", - "Ja, du kannst NasaEmoji für die lokale Ausführung herunterladen und es offline ohne Internetverbindung nutzen. Die neueste Version des Programms kann unter diesem Link heruntergeladen werden.
  • Lade den Quellcode auf GitHub als ZIP herunter.
  • Entpacke die ZIP-Datei.
  • Öffne index.html mit dem Browser deiner Wahl.
", - "是的,您可以下载 NasaEmoji 进行本地执行,并在没有互联网连接的情况下离线使用。程序的最新版本可通过此 链接 下载。
  • 在 GitHub 上以 zip 格式下载源代码。
  • 解压 zip 文件。
  • 使用您选择的浏览器打开 index.html。
", - "Да, вы можете скачать NasaEmoji для локального использования и использовать его офлайн без подключения к интернету. Последнюю версию программы можно скачать по этой ссылке.
  • Скачайте исходный код на GitHub в формате zip.
  • Распакуйте zip.
  • Откройте index.html в браузере по вашему выбору.
", - "Sí, puedes descargar NasaEmoji para ejecución local y usarlo sin conexión a Internet. La última versión del programa se puede descargar en este enlace.
  • Descarga el código fuente en GitHub como zip.
  • Descomprime el zip.
  • Abre index.html con el navegador de tu elección.
", - "Oui, tu peux télécharger NasaEmoji pour une exécution locale et l'utiliser hors ligne sans connexion Internet. La dernière version du programme peut être téléchargée via ce lien.
  • Télécharge le code source sur GitHub au format zip.
  • Décompresse le zip.
  • Ouvre index.html avec le navigateur de ton choix.
", - "نعم، يمكنك تنزيل NasaEmoji للتشغيل المحلي واستخدامه بدون اتصال بالإنترنت. يمكن تنزيل أحدث إصدار من البرنامج تحت هذا الرابط.
  • قم بتنزيل شفرة المصدر من GitHub كملف zip.
  • افتح ملف zip.
  • افتح index.html باستخدام المتصفح الذي تختاره.
", - "" - ], - "faqQuestion21": [ + "", + ], + faqAnswer20: [ + 'Yes, you can download NasaEmoji for local execution and use it offline without an internet connection. The latest release of the program can be downloaded under this link.
  • Download the source code on GitHub as a zip.
  • Unpack the zip.
  • Open index.html with the browser of your choice.
', + 'Ja, du kannst NasaEmoji für die lokale Ausführung herunterladen und es offline ohne Internetverbindung nutzen. Die neueste Version des Programms kann unter diesem Link heruntergeladen werden.
  • Lade den Quellcode auf GitHub als ZIP herunter.
  • Entpacke die ZIP-Datei.
  • Öffne index.html mit dem Browser deiner Wahl.
', + '是的,您可以下载 NasaEmoji 进行本地执行,并在没有互联网连接的情况下离线使用。程序的最新版本可通过此 链接 下载。
  • 在 GitHub 上以 zip 格式下载源代码。
  • 解压 zip 文件。
  • 使用您选择的浏览器打开 index.html。
', + 'Да, вы можете скачать NasaEmoji для локального использования и использовать его офлайн без подключения к интернету. Последнюю версию программы можно скачать по этой ссылке.
  • Скачайте исходный код на GitHub в формате zip.
  • Распакуйте zip.
  • Откройте index.html в браузере по вашему выбору.
', + 'Sí, puedes descargar NasaEmoji para ejecución local y usarlo sin conexión a Internet. La última versión del programa se puede descargar en este enlace.
  • Descarga el código fuente en GitHub como zip.
  • Descomprime el zip.
  • Abre index.html con el navegador de tu elección.
', + 'Oui, tu peux télécharger NasaEmoji pour une exécution locale et l\'utiliser hors ligne sans connexion Internet. La dernière version du programme peut être téléchargée via ce lien.
  • Télécharge le code source sur GitHub au format zip.
  • Décompresse le zip.
  • Ouvre index.html avec le navigateur de ton choix.
', + 'نعم، يمكنك تنزيل NasaEmoji للتشغيل المحلي واستخدامه بدون اتصال بالإنترنت. يمكن تنزيل أحدث إصدار من البرنامج تحت هذا الرابط.
  • قم بتنزيل شفرة المصدر من GitHub كملف zip.
  • افتح ملف zip.
  • افتح index.html باستخدام المتصفح الذي تختاره.
', + "", + ], + faqQuestion21: [ "Is the encryption standardized?", "Ist die Verschlüsselung standardisiert?", "加密是标准化的吗?", @@ -762,9 +947,9 @@ function getTranslation(key, langIndex) { "¿El cifrado está estandarizado?", "Le chiffrement est-il standardisé ?", "هل التشفير موحد؟", - "" + "", ], - "faqAnswer21": [ + faqAnswer21: [ "NasaEmoji uses standard encryption algorithms but combines them uniquely. While secure, it is recommended for casual use rather than critical security applications.", "NasaEmoji verwendet standardisierte Verschlüsselungsalgorithmen, kombiniert sie jedoch auf einzigartige Weise. Obwohl sicher, wird es eher für den persönlichen Gebrauch als für kritische Sicherheitsanwendungen empfohlen.", "NasaEmoji 使用标准的加密算法,但以独特的方式组合它们。虽然安全,但建议用于个人用途而非关键的安全应用程序。", @@ -772,9 +957,9 @@ function getTranslation(key, langIndex) { "NasaEmoji utiliza algoritmos de cifrado estándar pero los combina de manera única. Aunque es seguro, se recomienda para uso casual en lugar de aplicaciones de seguridad críticas.", "NasaEmoji utilise des algorithmes de chiffrement standard mais les combine de manière unique. Bien que sécurisé, il est recommandé pour un usage personnel plutôt que pour des applications de sécurité critiques.", "يستخدم NasaEmoji خوارزميات تشفير معيارية ولكنه يجمعها بشكل فريد. على الرغم من أنه آمن، يُنصح بالاستخدام الشخصي بدلاً من تطبيقات الأمان الحيوية.", - "" + "", ], - "faqQuestion22": [ + faqQuestion22: [ "Can I trust NasaEmoji for highly sensitive information?", "Kann ich NasaEmoji für hochsensible Informationen vertrauen?", "我可以信任 NasaEmoji 处理高度敏感的信息吗?", @@ -782,9 +967,9 @@ function getTranslation(key, langIndex) { "¿Puedo confiar en NasaEmoji para información altamente sensible?", "Puis-je faire confiance à NasaEmoji pour des informations hautement sensibles ?", "هل يمكنني الوثوق بـ NasaEmoji للمعلومات الحساسة جدًا؟", - "" + "", ], - "faqAnswer22": [ + faqAnswer22: [ "While NasaEmoji employs strong encryption, it is primarily designed for personal and casual use. For highly sensitive information, consult security professionals.", "Obwohl NasaEmoji starke Verschlüsselung verwendet, ist es hauptsächlich für den persönlichen Gebrauch konzipiert. Für hochsensible Informationen konsultiere bitte Sicherheitsexperten.", "虽然 NasaEmoji 采用强加密,但它主要用于个人和非正式用途。对于高度敏感的信息,请咨询安全专业人员。", @@ -792,9 +977,9 @@ function getTranslation(key, langIndex) { "Aunque NasaEmoji emplea un cifrado fuerte, está diseñado principalmente para uso personal y casual. Para información altamente sensible, consulta a profesionales de seguridad.", "Bien que NasaEmoji utilise un chiffrement fort, il est principalement conçu pour un usage personnel. Pour des informations hautement sensibles, consulte des professionnels de la sécurité.", "بينما يستخدم NasaEmoji تشفيرًا قويًا، فهو مصمم بشكل أساسي للاستخدام الشخصي والعفوي. بالنسبة للمعلومات الحساسة جدًا، يُفضل استشارة متخصصي الأمان.", - "" + "", ], - "faqQuestion23": [ + faqQuestion23: [ "Is NasaEmoji open-source?", "Ist NasaEmoji Open Source?", "NasaEmoji 是开源的吗?", @@ -802,19 +987,19 @@ function getTranslation(key, langIndex) { "¿NasaEmoji es de código abierto?", "NasaEmoji est-il open-source ?", "هل NasaEmoji مفتوح المصدر؟", - "" - ], - "faqAnswer23": [ - "Yes, NasaEmoji's source code is available on GitHub, allowing you to review and contribute to its development.", - "Ja, der Quellcode von NasaEmoji ist auf GitHub verfügbar, sodass du ihn überprüfen und zur Entwicklung beitragen kannst.", - "是的,NasaEmoji 的源代码在 GitHub 上可用,允许您查看并为其开发做出贡献。", - "Да, исходный код NasaEmoji доступен на GitHub, что позволяет вам просматривать и вносить вклад в его разработку.", - "Sí, el código fuente de NasaEmoji está disponible en GitHub, lo que te permite revisar y contribuir a su desarrollo.", - "Oui, le code source de NasaEmoji est disponible sur GitHub, ce qui te permet de le consulter et de contribuer à son développement.", - "نعم، شفرة مصدر NasaEmoji متاحة على GitHub، مما يتيح لك مراجعتها والمساهمة في تطويرها.", - "" - ], - "faqQuestion24": [ + "", + ], + faqAnswer23: [ + 'Yes, NasaEmoji\'s source code is available on GitHub, allowing you to review and contribute to its development.', + 'Ja, der Quellcode von NasaEmoji ist auf GitHub verfügbar, sodass du ihn überprüfen und zur Entwicklung beitragen kannst.', + '是的,NasaEmoji 的源代码在 GitHub 上可用,允许您查看并为其开发做出贡献。', + 'Да, исходный код NasaEmoji доступен на GitHub, что позволяет вам просматривать и вносить вклад в его разработку.', + 'Sí, el código fuente de NasaEmoji está disponible en GitHub, lo que te permite revisar y contribuir a su desarrollo.', + 'Oui, le code source de NasaEmoji est disponible sur GitHub, ce qui te permet de le consulter et de contribuer à son développement.', + 'نعم، شفرة مصدر NasaEmoji متاحة على GitHub، مما يتيح لك مراجعتها والمساهمة في تطويرها.', + "", + ], + faqQuestion24: [ "How can I contribute to NasaEmoji?", "Wie kann ich zu NasaEmoji beitragen?", "我如何为 NasaEmoji 做出贡献?", @@ -822,24 +1007,50 @@ function getTranslation(key, langIndex) { "¿Cómo puedo contribuir a NasaEmoji?", "Comment puis-je contribuer à NasaEmoji ?", "كيف يمكنني المساهمة في NasaEmoji؟", - "" - ], - "faqAnswer24": [ - "You can contribute by visiting the GitHub repository, reporting issues, suggesting improvements, or submitting pull requests. Translation improvements are always appreciated.", - "Du kannst beitragen, indem du das GitHub-Repository besuchst, Probleme meldest, Verbesserungen vorschlägst oder Pull Requests einreichst. Verbesserungen der Übersetzung werden stets begrüßt.", - "您可以通过访问 GitHub 仓库、报告问题、提出改进建议或提交拉取请求来做出贡献。翻译改进始终受到欢迎。", - "Вы можете внести вклад, посетив репозиторий на GitHub, сообщив об ошибках, предложив улучшения или отправив pull-запросы. Улучшения перевода всегда приветствуются.", - "Puedes contribuir visitando el repositorio de GitHub, informando problemas, sugiriendo mejoras o enviando pull requests. Se aprecian siempre las mejoras en las traducciones.", - "Tu peux contribuer en visitant le dépôt GitHub, en signalant des problèmes, en suggérant des améliorations ou en soumettant des pull requests. Les améliorations des traductions sont toujours appréciées.", - "يمكنك المساهمة بزيارة مستودع GitHub، الإبلاغ عن المشكلات، اقتراح التحسينات، أو تقديم طلبات سحب. تحسين الترجمات دائمًا مرحب به.", - "" - ] + "", + ], + faqAnswer24: [ + 'You can contribute by visiting the GitHub repository, reporting issues, suggesting improvements, or submitting pull requests. Translation improvements are always appreciated.', + 'Du kannst beitragen, indem du das GitHub-Repository besuchst, Probleme meldest, Verbesserungen vorschlägst oder Pull Requests einreichst. Verbesserungen der Übersetzung werden stets begrüßt.', + '您可以通过访问 GitHub 仓库、报告问题、提出改进建议或提交拉取请求来做出贡献。翻译改进始终受到欢迎。', + 'Вы можете внести вклад, посетив репозиторий на GitHub, сообщив об ошибках, предложив улучшения или отправив pull-запросы. Улучшения перевода всегда приветствуются.', + 'Puedes contribuir visitando el repositorio de GitHub, informando problemas, sugiriendo mejoras o enviando pull requests. Se aprecian siempre las mejoras en las traducciones.', + 'Tu peux contribuer en visitant le dépôt GitHub, en signalant des problèmes, en suggérant des améliorations ou en soumettant des pull requests. Les améliorations des traductions sont toujours appréciées.', + 'يمكنك المساهمة بزيارة مستودع GitHub، الإبلاغ عن المشكلات، اقتراح التحسينات، أو تقديم طلبات سحب. تحسين الترجمات دائمًا مرحب به.', + "", + ], + faqQuestion25: [ + "How do I use the private algorithm?", + "Wie benutze ich den privaten Algorithmus?", + "如何使用私有算法?", + "Как использовать приватный алгоритм?", + "¿Cómo uso el algoritmo privado?", + "Comment utiliser l'algorithme privé ?", + "كيف أستخدم الخوارزمية الخاصة؟", + "", + ], + faqAnswer25: [ + 'To use the private algorithm:
  • Ensure you are on the Conversion app (the default app).
  • Click 💎 Private Algorithm and generate a key.
  • You can use the Conversion app like before.
  • Share the link with your recipient.
  • When the key does not match, the output is gibberish.
  • The more you use the same key for different messages and the longer the messages are, the easier it is to crack the key.
', + 'Um den privaten Algorithmus zu verwenden:
  • Stelle sicher, dass du dich in der Konvertierungs-App (der Standard-App) befindest.
  • Klicke auf 💎 Privater Algorithmus und generiere einen Schlüssel.
  • Du kannst die Konvertierungs-App wie gewohnt verwenden.
  • Teile den Link mit deinem Empfänger.
  • Wenn der Schlüssel nicht übereinstimmt, ist die Ausgabe unsinnig.
  • Je öfter du denselben Schlüssel für verschiedene Nachrichten verwendest und je länger die Nachrichten sind, desto einfacher ist es, den Schlüssel zu knacken.
', + '要使用私有算法:
  • 确保你在转换应用程序(默认应用)上。
  • 点击 💎 私有算法 并生成一个密钥。
  • 你可以像以前一样使用转换应用。
  • 与接收者分享链接。
  • 当密钥不匹配时,输出将是乱码。
  • 你对不同消息使用相同密钥的次数越多,消息越长,破解密钥就越容易。
', + 'Чтобы использовать приватный алгоритм:
  • Убедитесь, что вы находитесь в приложении Конвертация (приложение по умолчанию).
  • Нажмите 💎 Приватный алгоритм и сгенерируйте ключ.
  • Вы можете использовать приложение Конвертация как раньше.
  • Поделитесь ссылкой с вашим получателем.
  • Если ключ не совпадает, вывод будет бессмысленным.
  • Чем больше вы используете один и тот же ключ для разных сообщений и чем длиннее сообщения, тем легче взломать ключ.
', + 'Para usar el algoritmo privado:
  • Asegúrate de estar en la aplicación Conversión (la aplicación predeterminada).
  • Haz clic en 💎 Algoritmo Privado y genera una clave.
  • Puedes usar la aplicación de conversión como antes.
  • Comparte el enlace con tu destinatario.
  • Cuando la clave no coincide, la salida será ininteligible.
  • Cuantas más veces uses la misma clave para diferentes mensajes y más largos sean los mensajes, más fácil será descifrar la clave.
', + 'Pour utiliser l\'algorithme privé :
  • Assure-toi d\'être dans l\'application Conversion (l\'application par défaut).
  • Clique sur 💎 Algorithme privé et génère une clé.
  • Tu peux utiliser l\'application de conversion comme avant.
  • Partage le lien avec ton destinataire.
  • Lorsque la clé ne correspond pas, la sortie est du charabia.
  • Plus tu utilises la même clé pour différents messages et plus les messages sont longs, plus il est facile de craquer la clé.
', + 'لاستخدام الخوارزمية الخاصة:
  • تأكد من أنك في تطبيق التحويل (التطبيق الافتراضي).
  • اضغط على 💎 الخوارزمية الخاصة وأنشئ مفتاحًا.
  • يمكنك استخدام تطبيق التحويل كما من قبل.
  • شارك الرابط مع المستلم الخاص بك.
  • عندما لا يتطابق المفتاح، يكون الناتج غير مفهوم.
  • كلما استخدمت نفس المفتاح لرسائل مختلفة وكلما كانت الرسائل أطول، أصبح من الأسهل اختراق المفتاح.
', + "", + ], }; + + if (translations[key]) { - return translations[key][langIndex]; + if (translations[key][langIndex]) { + return translations[key][langIndex]; + } + // Return english if langIndex translation is not found + return translations[key][0]; } else { - // Return the key itself if translation is not found + // Return key if translation key is not found return key; } } diff --git a/js/lib.js b/js/lib.js index 6b2c471..627e682 100644 --- a/js/lib.js +++ b/js/lib.js @@ -462,4 +462,95 @@ async function generateSecurePermutationFromString(inputString, symbolsArray) { // Delegate to the main generateSecurePermutation function. return generateSecurePermutation(inputBytes, symbolsArray); +} + +/** + * Extracts all emoji characters from a given string. + * + * This function scans the input string for emojis using a predefined regular expression + * and returns an array containing all matched emoji characters. + * + * @function + * @param {string} str - The input string from which emojis will be extracted. + * @returns {string[]} An array of emoji characters found in the input string. + * + * @example + * const text = "Hello 😊! How are you doing today? 🤔 Let's grab some coffee ☕️."; + * const emojis = extractEmojis(text); + * console.log(emojis); + * // Output: ['😊', '🤔', '☕️'] + */ +function extractEmojis(str) { + const regex = getEmojiRegex(); + let emojis = []; + let match; + + while ((match = regex.exec(str)) !== null) { + emojis.push(match[0]); + } + + console.log(emojis); + return emojis; +} + +/** + * Counts the number of emoji characters and non-emoji characters in a given string. + * + * This function analyzes the input string to determine how many emojis it contains + * and how many non-emoji characters are present. It returns an object with the counts. + * + * @function + * @param {string} str - The input string to be analyzed. + * @returns {{ matches: number, notMatches: number }} An object containing: + * - `matches`: The number of emoji characters found. + * - `notMatches`: The number of non-emoji characters. + * + * @example + * const text = "Hello 😊! How are you doing today? 🤔 Let's grab some coffee ☕️."; + * const counts = countEmojisAndNonEmojis(text); + * console.log(counts); + * // Output: { matches: 3, notMatches: 39 } + */ +function countEmojisAndNonEmojis(str) { + const regex = getEmojiRegex(); + let match; + let matchCount = 0; + let notMatchCount = 0; + let lastIndex = 0; + + while ((match = regex.exec(str)) !== null) { + matchCount++; + + // Calculate the number of non-emoji characters between the last match and the current match + notMatchCount += match.index - lastIndex; + + // Update lastIndex to the end of the current match + lastIndex = regex.lastIndex; + } + + // Add any remaining non-emoji characters after the last match + notMatchCount += str.length - lastIndex; + + const result = { + matches: matchCount, + notMatches: notMatchCount + }; + + console.log(result); + return result; +} + +/** + * Retrieves the regular expression used to match emoji characters. + * + * Source: https://github.com/mathiasbynens/emoji-regex/blob/main/index.js (<3 to all contributors) + * + * @function + * @returns {RegExp} A regular expression that matches all relevant unicode Emoji charcaters including multi-codepoint Emojis. + * + * @example + * const emojiRegex = getEmojiRegex(); + */ +function getEmojiRegex () { + return /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE89\uDE8F-\uDEC2\uDEC6\uDECE-\uDEDC\uDEDF-\uDEE9]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g; } \ No newline at end of file