Skip to content

Commit 6233fa9

Browse files
KEN0421claude
andcommitted
feat: localize app descriptions from fastlane metadata (17 languages)
Homepage: Featured Apps + Trace Series descriptions switch with language Support pages: Hero description switches with language Source: fastlane subtitle.txt / description.txt per locale Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 10e399f commit 6233fa9

87 files changed

Lines changed: 372 additions & 108 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

index.html

Lines changed: 28 additions & 22 deletions
Large diffs are not rendered by default.

support/30sec-challenge/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
<div class="hero-emoji">⏱️</div>
8787
<div class="hero-cat">Game</div>
8888
<h1>30sec Challenge</h1>
89-
<p>A fast-paced trivia game where you answer as many questions as possible in 30 seconds.</p>
89+
<p id="heroDesc">A fast-paced trivia game where you answer as many questions as possible in 30 seconds.</p>
9090
</div>
9191

9292
<div class="container">
@@ -166,6 +166,9 @@ <h2 data-i18n="privacy">Privacy &amp; Data</h2>
166166
document.getElementById('langBtn').addEventListener('click',e=>{e.stopPropagation();document.getElementById('langSelector').classList.toggle('open')});
167167
document.addEventListener('click',()=>document.getElementById('langSelector').classList.remove('open'));
168168
applyLang(detectLang());
169+
const APP_T={en:"Record. Compete. Go Viral.",ja:"毎日の動画チャレンジ&投票",zh:"每日短视频挑战与投票",zh_TW:"每日短影音挑戰與投票",ko:"매일 영상 챌린지 & 투표",es:"Reto diario de video y votos",pt:"Desafio diário de vídeo e voto",fr:"Défi vidéo quotidien & votes",de:"Tägliche Video-Challenge &Vote",it:"Sfida video quotidiana e voti",ru:"Ежедневный видеочеллендж",ar:"تحدي الفيديو اليومي والتصويت",th:"ชาเลนจ์วิดีโอรายวันและโหวต",id:"Tantangan video harian voting",tr:"Günlük video meydan okuması",nl:"Dagelijkse video uitdaging",vi:"Thử thách video hàng ngày",};
170+
const _oA=applyLang;applyLang=function(l){_oA(l);const t=APP_T[l]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;};
171+
(function(){const l=localStorage.getItem('sk_lang');const lang=l||detectLang();const t=APP_T[lang]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;})();
169172
</script>
170173
</body>
171174
</html>

support/animal-encyclopedia/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
<div class="hero-emoji">🦁</div>
8787
<div class="hero-cat">Encyclopedia</div>
8888
<h1>Animal Encyclopedia</h1>
89-
<p>Discover the world of animals with detailed profiles, habitats, and fascinating facts.</p>
89+
<p id="heroDesc">Discover the world of animals with detailed profiles, habitats, and fascinating facts.</p>
9090
</div>
9191

9292
<div class="container">
@@ -166,6 +166,9 @@ <h2 data-i18n="privacy">Privacy &amp; Data</h2>
166166
document.getElementById('langBtn').addEventListener('click',e=>{e.stopPropagation();document.getElementById('langSelector').classList.toggle('open')});
167167
document.addEventListener('click',()=>document.getElementById('langSelector').classList.remove('open'));
168168
applyLang(detectLang());
169+
const APP_T={en:"Animal Encyclopedia & Quiz",ja:"動物図鑑 & クイズ",zh:"动物百科全书与测验",zh_TW:"動物百科全書與測驗",ko:"동물 백과사전 & 퀴즈",es:"Enciclopedia Animal y Quiz",pt:"Enciclopédia Animal e Quiz",fr:"Encyclopédie Animale & Quiz",de:"Tierlexikon & Quiz",it:"Enciclopedia Animale e Quiz",ru:"Энциклопедия и викторина",ar:"موسوعة الحيوانات واختبار",th:"สารานุกรมสัตว์และแบบทดสอบ",id:"Ensiklopedia Hewan & Kuis",tr:"Hayvan Ansiklopedisi ve Quiz",nl:"Dierenencyclopedie & Quiz",vi:"Bách Khoa Động Vật & Câu Đố",};
170+
const _oA=applyLang;applyLang=function(l){_oA(l);const t=APP_T[l]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;};
171+
(function(){const l=localStorage.getItem('sk_lang');const lang=l||detectLang();const t=APP_T[lang]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;})();
169172
</script>
170173
</body>
171174
</html>

support/battery-charging-map/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
<div class="hero-emoji">🔋</div>
8787
<div class="hero-cat">Utility</div>
8888
<h1>Battery Charging Map</h1>
89-
<p>Find nearby EV charging stations and battery swap locations with real-time availability.</p>
89+
<p id="heroDesc">Find nearby EV charging stations and battery swap locations with real-time availability.</p>
9090
</div>
9191

9292
<div class="container">
@@ -166,6 +166,9 @@ <h2 data-i18n="privacy">Privacy &amp; Data</h2>
166166
document.getElementById('langBtn').addEventListener('click',e=>{e.stopPropagation();document.getElementById('langSelector').classList.toggle('open')});
167167
document.addEventListener('click',()=>document.getElementById('langSelector').classList.remove('open'));
168168
applyLang(detectLang());
169+
const APP_T={en:"Battery & Charging Map",ja:"充電スタンドの混雑・速度をリアルタイム確認",zh:"实时充电站信息",zh_TW:"即時充電站資訊",ko:"실시간 충전소 정보",es:"Info de carga en tiempo real",pt:"Carregamento em tempo real",fr:"Info de recharge en temps réel",de:"Echtzeit-Ladestationsinfo",it:"Info ricarica in tempo reale",ru:"Информация в реальном времени",ar:"معلومات الشحن الآن",th:"ข้อมูลสถานีชาร์จเรียลไทม์",id:"Info pengisian daya real-time",tr:"Gerçek zamanlı şarj bilgisi",nl:"Realtime laadstationinfo",vi:"Thông tin sạc thời gian thực",};
170+
const _oA=applyLang;applyLang=function(l){_oA(l);const t=APP_T[l]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;};
171+
(function(){const l=localStorage.getItem('sk_lang');const lang=l||detectLang();const t=APP_T[lang]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;})();
169172
</script>
170173
</body>
171174
</html>

support/bird-encyclopedia/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
<div class="hero-emoji">🐦</div>
8787
<div class="hero-cat">Encyclopedia</div>
8888
<h1>FeatherTrace</h1>
89-
<p>A comprehensive guide to bird species worldwide with identification tools and facts.</p>
89+
<p id="heroDesc">A comprehensive guide to bird species worldwide with identification tools and facts.</p>
9090
</div>
9191

9292
<div class="container">
@@ -166,6 +166,9 @@ <h2 data-i18n="privacy">Privacy &amp; Data</h2>
166166
document.getElementById('langBtn').addEventListener('click',e=>{e.stopPropagation();document.getElementById('langSelector').classList.toggle('open')});
167167
document.addEventListener('click',()=>document.getElementById('langSelector').classList.remove('open'));
168168
applyLang(detectLang());
169+
const APP_T={en:"Bird Guide & Song Identifier",ja:"野鳥図鑑 & 鳴き声ガイド",zh:"鸟类百科与鸣声识别",zh_TW:"鳥類百科與鳴聲辨識",ko:"조류 도감 & 새소리 가이드",es:"Guía de Aves y Cantos",pt:"Guia de Aves e Cantos",fr:"Guide Oiseaux & Chants",de:"Vogelführer & Gesangserkennung",it:"Guida Uccelli & Canti",ru:"Птицы: гид и определитель",ar:"موسوعة الطيور وأصواتها",th:"สารานุกรมนกและเสียงร้อง",id:"Ensiklopedia Burung & Suara",tr:"Kuş Rehberi & Ses Tanıma",nl:"Vogelgids & Zangherkenning",vi:"Bách khoa chim & Nhận diện",};
170+
const _oA=applyLang;applyLang=function(l){_oA(l);const t=APP_T[l]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;};
171+
(function(){const l=localStorage.getItem('sk_lang');const lang=l||detectLang();const t=APP_T[lang]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;})();
169172
</script>
170173
</body>
171174
</html>

support/blur/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
<div class="hero-emoji">🔍</div>
8787
<div class="hero-cat">Game</div>
8888
<h1>Blur: Guess the Image</h1>
89-
<p>A fun image guessing game where pictures gradually become clearer. Can you guess before the reveal?</p>
89+
<p id="heroDesc">A fun image guessing game where pictures gradually become clearer. Can you guess before the reveal?</p>
9090
</div>
9191

9292
<div class="container">
@@ -166,6 +166,9 @@ <h2 data-i18n="privacy">Privacy &amp; Data</h2>
166166
document.getElementById('langBtn').addEventListener('click',e=>{e.stopPropagation();document.getElementById('langSelector').classList.toggle('open')});
167167
document.addEventListener('click',()=>document.getElementById('langSelector').classList.remove('open'));
168168
applyLang(detectLang());
169+
const APP_T={en:"Unblur & Guess the Photo",ja:"ぼかし画像を見破れ!",zh:"模糊图片猜猜看",zh_TW:"模糊圖片猜猜看",ko:"블러 이미지 맞추기 게임",es:"Desenfoca y adivina la imagen",pt:"Desvaneça e adivinhe a imagem",fr:"Défloute et devine l\'image",de:"Entschärfe & rate das Bild",it:"Sfoca e indovina l\'immagine",ru:"Размой и угадай изображение",ar:"ازل الضبابية وخمّن الصورة",th:"เบลอแล้วทายรูปภาพ",id:"Buram & tebak gambarnya",tr:"Bulanıklaştır ve resmi tahmin",nl:"Onscherp & raad de afbeelding",vi:"Xóa mờ và đoán hình ảnh",};
170+
const _oA=applyLang;applyLang=function(l){_oA(l);const t=APP_T[l]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;};
171+
(function(){const l=localStorage.getItem('sk_lang');const lang=l||detectLang();const t=APP_T[lang]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;})();
169172
</script>
170173
</body>
171174
</html>

support/brain-burst/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
<div class="hero-emoji">🧠</div>
8787
<div class="hero-cat">Game</div>
8888
<h1>Brain Burst!</h1>
89-
<p>Train your brain with quick cognitive challenges across memory, math, logic, and reaction time.</p>
89+
<p id="heroDesc">Train your brain with quick cognitive challenges across memory, math, logic, and reaction time.</p>
9090
</div>
9191

9292
<div class="container">
@@ -166,6 +166,9 @@ <h2 data-i18n="privacy">Privacy &amp; Data</h2>
166166
document.getElementById('langBtn').addEventListener('click',e=>{e.stopPropagation();document.getElementById('langSelector').classList.toggle('open')});
167167
document.addEventListener('click',()=>document.getElementById('langSelector').classList.remove('open'));
168168
applyLang(detectLang());
169+
const APP_T={en:"AI Trivia Quiz & Battles",ja:"AIクイズ&毎日バトル",zh:"AI问答与每日对战",zh_TW:"AI問答與每日對戰",ko:"AI 퀴즈 & 매일 배틀",es:"Quiz de IA y batalla diaria",pt:"Quiz de IA e batalha diária",fr:"Quiz IA & bataille quotidienne",de:"KI-Quiz & tägliche Battles",it:"Quiz AI e battaglia quotidiana",ru:"ИИ-викторина и ежедневные бои",ar:"مسابقة ذكاء اصطناعي يومية",th:"ควิซ AI และการต่อสู้รายวัน",id:"Kuis AI & pertarungan harian",tr:"Yapay zeka quiz günlük savaş",nl:"AI-quiz en dagelijkse strijd",vi:"Quiz AI trận chiến hàng ngày",};
170+
const _oA=applyLang;applyLang=function(l){_oA(l);const t=APP_T[l]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;};
171+
(function(){const l=localStorage.getItem('sk_lang');const lang=l||detectLang();const t=APP_T[lang]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;})();
169172
</script>
170173
</body>
171174
</html>

support/chaos/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
<div class="hero-emoji">🔥</div>
8787
<div class="hero-cat">Lifestyle</div>
8888
<h1>Chaos: Daily Missions</h1>
89-
<p>Random daily challenges that push you out of your comfort zone and make life more exciting.</p>
89+
<p id="heroDesc">Random daily challenges that push you out of your comfort zone and make life more exciting.</p>
9090
</div>
9191

9292
<div class="container">
@@ -166,6 +166,9 @@ <h2 data-i18n="privacy">Privacy &amp; Data</h2>
166166
document.getElementById('langBtn').addEventListener('click',e=>{e.stopPropagation();document.getElementById('langSelector').classList.toggle('open')});
167167
document.addEventListener('click',()=>document.getElementById('langSelector').classList.remove('open'));
168168
applyLang(detectLang());
169+
const APP_T={en:"Random Dares & Challenges",ja:"コミュニティからの毎日のミッション",zh:"每日社区挑战",zh_TW:"每日社群挑戰任務",ko:"매일 커뮤니티 미션",es:"Desafíos diarios de comunidad",pt:"Desafios diários da comunidade",fr:"Défis communautaires du jour",de:"Tägliche Community-Challenges",it:"Sfide quotidiane community",ru:"Ежедневные задания сообщества",ar:"تحديات يومية من المجتمع",th:"ภารกิจชุมชนประจำวัน",id:"Tantangan komunitas harian",tr:"Günlük topluluk görevleri",nl:"Dagelijkse gemeenschapstaken",vi:"Thử thách cộng đồng hàng ngày",};
170+
const _oA=applyLang;applyLang=function(l){_oA(l);const t=APP_T[l]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;};
171+
(function(){const l=localStorage.getItem('sk_lang');const lang=l||detectLang();const t=APP_T[lang]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;})();
169172
</script>
170173
</body>
171174
</html>

support/chore-roulette/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
<div class="hero-emoji">🎰</div>
8787
<div class="hero-cat">Lifestyle</div>
8888
<h1>Chore Roulette</h1>
89-
<p>Fairly assign household chores with a fun spinning wheel. No more arguments about who does what!</p>
89+
<p id="heroDesc">Fairly assign household chores with a fun spinning wheel. No more arguments about who does what!</p>
9090
</div>
9191

9292
<div class="container">
@@ -166,6 +166,9 @@ <h2 data-i18n="privacy">Privacy &amp; Data</h2>
166166
document.getElementById('langBtn').addEventListener('click',e=>{e.stopPropagation();document.getElementById('langSelector').classList.toggle('open')});
167167
document.addEventListener('click',()=>document.getElementById('langSelector').classList.remove('open'));
168168
applyLang(detectLang());
169+
const APP_T={en:"Spin & assign household chores",ja:"Spin & assign household chores",zh:"Spin & assign household chores",zh_TW:"Spin & assign household chores",ko:"Spin & assign household chores",es:"Spin & assign household chores",pt:"Spin & assign household chores",fr:"Spin & assign household chores",de:"Spin & assign household chores",it:"Spin & assign household chores",ru:"Spin & assign household chores",ar:"Spin & assign household chores",th:"Spin & assign household chores",id:"Spin & assign household chores",tr:"Spin & assign household chores",nl:"Spin & assign household chores",vi:"Spin & assign household chores",};
170+
const _oA=applyLang;applyLang=function(l){_oA(l);const t=APP_T[l]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;};
171+
(function(){const l=localStorage.getItem('sk_lang');const lang=l||detectLang();const t=APP_T[lang]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;})();
169172
</script>
170173
</body>
171174
</html>

support/constellation-encyclopedia/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@
8686
<div class="hero-emoji"></div>
8787
<div class="hero-cat">Encyclopedia</div>
8888
<h1>AstroTrace</h1>
89-
<p>Explore constellations, stars, and celestial objects with beautiful illustrations and star maps.</p>
89+
<p id="heroDesc">Explore constellations, stars, and celestial objects with beautiful illustrations and star maps.</p>
9090
</div>
9191

9292
<div class="container">
@@ -166,6 +166,9 @@ <h2 data-i18n="privacy">Privacy &amp; Data</h2>
166166
document.getElementById('langBtn').addEventListener('click',e=>{e.stopPropagation();document.getElementById('langSelector').classList.toggle('open')});
167167
document.addEventListener('click',()=>document.getElementById('langSelector').classList.remove('open'));
168168
applyLang(detectLang());
169+
const APP_T={en:"Constellation Encyclopedia",ja:"星座図鑑 - 100の天体ガイド",zh:"星座百科全书",zh_TW:"星座百科全書",ko:"별자리 백과사전",es:"Enciclopedia de Constelaciones",pt:"Enciclopédia de Constelações",fr:"Encyclopédie Constellations",de:"Sternbild-Lexikon",it:"Enciclopedia Costellazioni",ru:"Энциклопедия созвездий",ar:"موسوعة الأبراج والنجوم",th:"สารานุกรมกลุ่มดาว",id:"Ensiklopedia Rasi Bintang",tr:"Takımyıldız Ansiklopedisi",nl:"Sterrenbeeld Encyclopedie",vi:"Bách khoa Chòm sao",};
170+
const _oA=applyLang;applyLang=function(l){_oA(l);const t=APP_T[l]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;};
171+
(function(){const l=localStorage.getItem('sk_lang');const lang=l||detectLang();const t=APP_T[lang]||APP_T.en;const h=document.getElementById('heroDesc');if(h&&t)h.textContent=t;})();
169172
</script>
170173
</body>
171174
</html>

0 commit comments

Comments
 (0)