← back to Handbag Auth Nextjs
src/lib/translateJapanese.ts
137 lines
// Translate Japanese luxury brand and model names to English
interface Translation {
[key: string]: string
}
// Common luxury brand translations
const BRAND_TRANSLATIONS: Translation = {
'エルメス': 'Hermès',
'シャネル': 'Chanel',
'ルイヴィトン': 'Louis Vuitton',
'ルイ・ヴィトン': 'Louis Vuitton',
'ディオール': 'Dior',
'グッチ': 'Gucci',
'プラダ': 'Prada',
'ボッテガヴェネタ': 'Bottega Veneta',
'ボッテガ・ヴェネタ': 'Bottega Veneta',
'セリーヌ': 'Celine',
'バレンシアガ': 'Balenciaga',
'サンローラン': 'Saint Laurent',
'イヴサンローラン': 'Yves Saint Laurent',
'フェンディ': 'Fendi',
'ロエベ': 'Loewe',
'バーバリー': 'Burberry',
'クロエ': 'Chloé',
'ジバンシィ': 'Givenchy',
'ジバンシー': 'Givenchy'
}
// Common model name translations
const MODEL_TRANSLATIONS: Translation = {
// Hermès
'バーキン': 'Birkin',
'ケリー': 'Kelly',
'コンスタンス': 'Constance',
'ボリード': 'Bolide',
'エブリン': 'Evelyne',
'ガーデンパーティ': 'Garden Party',
'ピコタン': 'Picotin',
// Chanel
'マトラッセ': 'Classic Flap',
'チェーンショルダー': 'Chain Shoulder',
'ボーイシャネル': 'Boy Chanel',
'ボーイ': 'Boy',
'タイムレスクラシック': 'Timeless Classic',
// Louis Vuitton
'スピーディ': 'Speedy',
'ネヴァーフル': 'Neverfull',
'アルマ': 'Alma',
'カプシーヌ': 'Capucines',
'ツイスト': 'Twist',
'ポシェット': 'Pochette',
// Dior
'レディディオール': 'Lady Dior',
'サドル': 'Saddle',
// Gucci
'ディオニュソス': 'Dionysus',
'マーモント': 'Marmont',
'ジャッキー': 'Jackie',
'バンブー': 'Bamboo',
// Bottega Veneta
'カセット': 'Cassette',
'ジョディ': 'Jodie',
'イントレチャート': 'Intrecciato',
// Common words
'ショルダーバッグ': 'Shoulder Bag',
'ハンドバッグ': 'Handbag',
'トートバッグ': 'Tote Bag',
'クラッチバッグ': 'Clutch Bag',
'財布': 'Wallet',
'長財布': 'Long Wallet',
'二つ折り財布': 'Bifold Wallet',
'ポーチ': 'Pouch',
// Materials
'レザー': 'Leather',
'カーフレザー': 'Calfskin',
'ラムレザー': 'Lambskin',
'キャンバス': 'Canvas',
'エナメル': 'Patent Leather',
'クロコダイル': 'Crocodile',
'アリゲーター': 'Alligator',
'リザード': 'Lizard',
'スエード': 'Suede',
// Sizes
'25cm': '25cm',
'30cm': '30cm',
'35cm': '35cm',
'40cm': '40cm',
'ミニ': 'Mini',
'スモール': 'Small',
'ミディアム': 'Medium',
'ラージ': 'Large'
}
/**
* Translate Japanese text to English for luxury brands/models
*/
export function translateJapanese(text: string): string {
if (!text) return text
let translated = text
// Replace brand names
for (const [jp, en] of Object.entries(BRAND_TRANSLATIONS)) {
translated = translated.replace(new RegExp(jp, 'g'), en)
}
// Replace model names
for (const [jp, en] of Object.entries(MODEL_TRANSLATIONS)) {
translated = translated.replace(new RegExp(jp, 'g'), en)
}
return translated.trim()
}
/**
* Translate brand name specifically
*/
export function translateBrand(brand: string): string {
return BRAND_TRANSLATIONS[brand] || brand
}
/**
* Translate model name specifically
*/
export function translateModel(model: string): string {
return translateJapanese(model)
}