UNPKG

web3-error-helper

Version:

> 🛠️ Turn confusing Web3 errors into clear, human-friendly messages for developers and users alike.

296 lines (295 loc) 8.75 kB
"use strict"; /** * Default language configuration for web3-error-helper * * This module defines the blockchain-focused language metadata and priorities * based on actual blockchain market adoption and user base. Follows the same * patterns and standards as other configuration modules. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.LANGUAGE_PRIORITY_GROUPS = exports.DEFAULT_LANGUAGES = void 0; exports.getAvailableLanguageCodes = getAvailableLanguageCodes; exports.getLanguageInfo = getLanguageInfo; exports.getLanguagesByTier = getLanguagesByTier; exports.getLanguagesByPriority = getLanguagesByPriority; exports.isLanguageSupported = isLanguageSupported; exports.getBaseLanguageCode = getBaseLanguageCode; exports.findSimilarLanguages = findSimilarLanguages; exports.getRegionalLanguageSuggestions = getRegionalLanguageSuggestions; exports.getBlockchainMarketSize = getBlockchainMarketSize; exports.getLanguageStatistics = getLanguageStatistics; const i18n_1 = require("../types/i18n"); // ============================================================================ // Language Metadata Configuration // ============================================================================ exports.DEFAULT_LANGUAGES = { // Tier 1: Essential (Strong Blockchain Markets) en: { name: 'English', nativeName: 'English', region: 'Global', priority: 1, blockchainMarket: 'Global standard, all major protocols', }, zh: { name: 'Chinese (Simplified)', nativeName: '中文 (简体)', region: 'China, Singapore', priority: 1, blockchainMarket: 'Huge crypto market despite restrictions', }, es: { name: 'Spanish', nativeName: 'Español', region: 'Latin America, Spain, US', priority: 1, blockchainMarket: 'Growing Latin American DeFi adoption', }, // Tier 2: High Priority (Strong Blockchain Markets) pt: { name: 'Portuguese', nativeName: 'Português', region: 'Brazil, Portugal, Africa', priority: 2, blockchainMarket: 'Brazil major crypto market', }, ja: { name: 'Japanese', nativeName: '日本語', region: 'Japan', priority: 2, blockchainMarket: 'Major crypto trading hub', }, ko: { name: 'Korean', nativeName: '한국어', region: 'South Korea', priority: 2, blockchainMarket: 'Very high crypto adoption', }, de: { name: 'German', nativeName: 'Deutsch', region: 'Germany, Austria, Switzerland', priority: 2, blockchainMarket: 'Strong European crypto market', }, ru: { name: 'Russian', nativeName: 'Русский', region: 'Russia, Eastern Europe', priority: 2, blockchainMarket: 'High crypto adoption', }, hi: { name: 'Hindi', nativeName: 'हिन्दी', region: 'India', priority: 2, blockchainMarket: 'India massive crypto market', }, ar: { name: 'Arabic', nativeName: 'العربية', region: 'Middle East, North Africa', priority: 2, blockchainMarket: 'Growing Middle Eastern markets', }, // Tier 3: Growing Markets (Moderate Blockchain Relevance) tr: { name: 'Turkish', nativeName: 'Türkçe', region: 'Turkey', priority: 3, blockchainMarket: 'High crypto adoption', }, vi: { name: 'Vietnamese', nativeName: 'Tiếng Việt', region: 'Vietnam', priority: 3, blockchainMarket: 'Growing crypto adoption', }, th: { name: 'Thai', nativeName: 'ไทย', region: 'Thailand', priority: 3, blockchainMarket: 'Growing crypto market', }, id: { name: 'Indonesian', nativeName: 'Bahasa Indonesia', region: 'Indonesia, Malaysia', priority: 3, blockchainMarket: 'Large population, growing adoption', }, pl: { name: 'Polish', nativeName: 'Polski', region: 'Poland', priority: 3, blockchainMarket: 'Growing European market', }, uk: { name: 'Ukrainian', nativeName: 'Українська', region: 'Ukraine', priority: 3, blockchainMarket: 'Crypto adoption due to conflict', }, he: { name: 'Hebrew', nativeName: 'עברית', region: 'Israel', priority: 3, blockchainMarket: 'Israel tech/crypto scene', }, fr: { name: 'French', nativeName: 'Français', region: 'France, Canada, Africa', priority: 3, blockchainMarket: 'European market', }, it: { name: 'Italian', nativeName: 'Italiano', region: 'Italy, Switzerland', priority: 3, blockchainMarket: 'European market', }, nl: { name: 'Dutch', nativeName: 'Nederlands', region: 'Netherlands, Belgium', priority: 3, blockchainMarket: 'European market', }, }; // ============================================================================ // Language Priority Groups // ============================================================================ exports.LANGUAGE_PRIORITY_GROUPS = { TIER_1: ['en', 'zh', 'es'], TIER_2: ['pt', 'ja', 'ko', 'de', 'ru', 'hi', 'ar'], TIER_3: ['tr', 'vi', 'th', 'id', 'pl', 'uk', 'he', 'fr', 'it', 'nl'], }; // ============================================================================ // Language Utilities // ============================================================================ /** * Get all available language codes */ function getAvailableLanguageCodes() { return Object.keys(exports.DEFAULT_LANGUAGES).map(i18n_1.createLanguageCode); } /** * Get language info by code */ function getLanguageInfo(code) { return exports.DEFAULT_LANGUAGES[code] || null; } /** * Get languages by priority tier */ function getLanguagesByTier(tier) { switch (tier) { case 1: return [...exports.LANGUAGE_PRIORITY_GROUPS.TIER_1]; case 2: return [...exports.LANGUAGE_PRIORITY_GROUPS.TIER_2]; case 3: return [...exports.LANGUAGE_PRIORITY_GROUPS.TIER_3]; default: return []; } } /** * Get all languages sorted by priority */ function getLanguagesByPriority() { return [ ...exports.LANGUAGE_PRIORITY_GROUPS.TIER_1, ...exports.LANGUAGE_PRIORITY_GROUPS.TIER_2, ...exports.LANGUAGE_PRIORITY_GROUPS.TIER_3, ]; } /** * Check if a language code is supported */ function isLanguageSupported(code) { return code in exports.DEFAULT_LANGUAGES; } /** * Get similar language codes (e.g., 'en-US' -> 'en') */ function getBaseLanguageCode(code) { return code.split('-')[0] || code; } /** * Find similar languages based on base code */ function findSimilarLanguages(code) { const baseCode = getBaseLanguageCode(code); const similar = []; for (const availableCode of getAvailableLanguageCodes()) { if (availableCode === baseCode || availableCode.startsWith(`${baseCode}-`)) { similar.push(availableCode); } } return similar; } /** * Get regional language suggestions */ function getRegionalLanguageSuggestions(region) { const regionalMap = { americas: ['en', 'es', 'pt'], europe: ['en', 'de', 'fr', 'it', 'nl', 'pl', 'ru', 'uk'], asia: ['en', 'zh', 'ja', 'ko', 'hi', 'th', 'vi', 'id'], 'middle-east': ['en', 'ar', 'he'], africa: ['en', 'fr', 'ar', 'pt'], oceania: ['en'], }; return regionalMap[region.toLowerCase()] || ['en']; } /** * Get blockchain market size estimate */ function getBlockchainMarketSize(code) { const info = getLanguageInfo(code); if (!info) return 'small'; switch (info.priority) { case 1: return 'large'; case 2: return 'medium'; case 3: return 'small'; default: return 'small'; } } /** * Get language statistics */ function getLanguageStatistics() { const total = getAvailableLanguageCodes().length; const tier1 = exports.LANGUAGE_PRIORITY_GROUPS.TIER_1.length; const tier2 = exports.LANGUAGE_PRIORITY_GROUPS.TIER_2.length; const tier3 = exports.LANGUAGE_PRIORITY_GROUPS.TIER_3.length; return { total, tier1, tier2, tier3, coverage: { large: tier1, medium: tier2, small: tier3, }, }; }