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
JavaScript
/**
* 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,
},
};
}
;