Browse Source

Translate all 72 city names in Clock widget

- Add clock/city-* translations for all cities in ALL_CITIES across
  zh-cn, zh-tw, zh-hk, ja-jp, and ko-kr
- Add getCityDisplayName(englishName) helper that looks up the
  translated display name while keeping the English string as the
  internal storage key in wcClocks / localStorage
- Apply getCityDisplayName in three places: local clock hero card
  label, world clock cards, and timezone picker list items
- Extend tzFilter to also match against translated city names so
  users can search in their native language (e.g. 東京, 도쿄)

https://claude.ai/code/session_019JJo6yrD9D6Cp4trTr8SHa
Claude 2 weeks ago
parent
commit
a32acfd9d1
2 changed files with 374 additions and 10 deletions
  1. 13 4
      src/web/Clock/index.html
  2. 361 6
      src/web/Clock/locale/clock.json

+ 13 - 4
src/web/Clock/index.html

@@ -571,6 +571,11 @@ function getStr(key, fallback) {
     return (typeof applocale !== 'undefined' && applocale) ? applocale.getString(key, fallback) : fallback;
 }
 
+function getCityDisplayName(englishName) {
+    var key = 'clock/city-' + englishName.toLowerCase().replace(/ /g, '-');
+    return getStr(key, englishName);
+}
+
 // Returns BCP-47 locale string for date/time formatting based on the user's
 // arozos language preference, falling back to the browser's locale.
 function getDateLocale() {
@@ -686,7 +691,7 @@ function updateLocalClock(){
 
 function initLocalClock(){
     var city = getLocalTzCity();
-    document.getElementById('lc-label').textContent = city;
+    document.getElementById('lc-label').textContent = getCityDisplayName(city);
     try {
         var tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
         var offFmt = new Intl.DateTimeFormat('en', { timeZone: tz, timeZoneName: 'shortOffset' });
@@ -800,7 +805,7 @@ function wcRender(){
     listEl.innerHTML = wcClocks.map(function(c, i){
         return '<div class="wc-card">' +
             '<div class="wc-card-left">' +
-                '<div class="wc-city">'+htmlEsc(c.city)+'</div>' +
+                '<div class="wc-city">'+htmlEsc(getCityDisplayName(c.city))+'</div>' +
                 '<div class="wc-meta" id="wc-meta-'+i+'"></div>' +
             '</div>' +
             '<div class="wc-time-block">' +
@@ -876,7 +881,11 @@ function tzPickerHide(){ document.getElementById('tz-overlay').classList.remove(
 function tzFilter(q){
     q = q.toLowerCase().trim();
     tzFiltered = q
-        ? ALL_CITIES.filter(function(c){ return c[0].toLowerCase().includes(q) || c[2].toLowerCase().includes(q); })
+        ? ALL_CITIES.filter(function(c){
+            return c[0].toLowerCase().includes(q) ||
+                   c[2].toLowerCase().includes(q) ||
+                   getCityDisplayName(c[0]).toLowerCase().includes(q);
+          })
         : ALL_CITIES.slice();
     tzRenderList();
 }
@@ -905,7 +914,7 @@ function tzRenderList(){
         html += '<div class="tz-region-lbl">'+getStr('clock/region-'+r.toLowerCase().replace(/ /g,'-'), r)+'</div>';
         groups[r].forEach(function(c){
             html += '<div class="tz-item" data-city="'+htmlEsc(c[0])+'" data-tz="'+htmlEsc(c[1])+'">' +
-                '<span class="tz-item-name">'+htmlEsc(c[0])+'</span>' +
+                '<span class="tz-item-name">'+htmlEsc(getCityDisplayName(c[0]))+'</span>' +
                 '<span class="tz-item-offset">'+tzGetOffset(c[1])+'</span>' +
             '</div>';
         });

+ 361 - 6
src/web/Clock/locale/clock.json

@@ -1,6 +1,6 @@
 {
     "author": "tobychui",
-    "version": "1.0",
+    "version": "1.1",
     "keys": {
         "en-us": {
             "name": "English (US)",
@@ -91,7 +91,78 @@
                 "clock/region-utc": "UTC",
                 "clock/region-indian": "印度洋",
                 "clock/region-atlantic": "大西洋",
-                "clock/region-arctic": "北极"
+                "clock/region-arctic": "北极",
+                "clock/city-abu-dhabi": "阿布扎比",
+                "clock/city-adelaide": "阿德莱德",
+                "clock/city-almaty": "阿拉木图",
+                "clock/city-amsterdam": "阿姆斯特丹",
+                "clock/city-anchorage": "安克雷奇",
+                "clock/city-athens": "雅典",
+                "clock/city-auckland": "奥克兰",
+                "clock/city-bangkok": "曼谷",
+                "clock/city-beijing": "北京",
+                "clock/city-berlin": "柏林",
+                "clock/city-brisbane": "布里斯班",
+                "clock/city-brussels": "布鲁塞尔",
+                "clock/city-buenos-aires": "布宜诺斯艾利斯",
+                "clock/city-cairo": "开罗",
+                "clock/city-casablanca": "卡萨布兰卡",
+                "clock/city-chicago": "芝加哥",
+                "clock/city-copenhagen": "哥本哈根",
+                "clock/city-denver": "丹佛",
+                "clock/city-dubai": "迪拜",
+                "clock/city-dublin": "都柏林",
+                "clock/city-frankfurt": "法兰克福",
+                "clock/city-helsinki": "赫尔辛基",
+                "clock/city-ho-chi-minh-city": "胡志明市",
+                "clock/city-hong-kong": "香港",
+                "clock/city-honolulu": "火奴鲁鲁",
+                "clock/city-istanbul": "伊斯坦布尔",
+                "clock/city-jakarta": "雅加达",
+                "clock/city-johannesburg": "约翰内斯堡",
+                "clock/city-karachi": "卡拉奇",
+                "clock/city-kathmandu": "加德满都",
+                "clock/city-kolkata": "加尔各答",
+                "clock/city-kuala-lumpur": "吉隆坡",
+                "clock/city-lagos": "拉各斯",
+                "clock/city-lima": "利马",
+                "clock/city-lisbon": "里斯本",
+                "clock/city-london": "伦敦",
+                "clock/city-los-angeles": "洛杉矶",
+                "clock/city-madrid": "马德里",
+                "clock/city-manila": "马尼拉",
+                "clock/city-melbourne": "墨尔本",
+                "clock/city-mexico-city": "墨西哥城",
+                "clock/city-moscow": "莫斯科",
+                "clock/city-mumbai": "孟买",
+                "clock/city-nairobi": "内罗毕",
+                "clock/city-new-delhi": "新德里",
+                "clock/city-new-york": "纽约",
+                "clock/city-oslo": "奥斯陆",
+                "clock/city-paris": "巴黎",
+                "clock/city-perth": "珀斯",
+                "clock/city-phoenix": "菲尼克斯",
+                "clock/city-prague": "布拉格",
+                "clock/city-riyadh": "利雅得",
+                "clock/city-rome": "罗马",
+                "clock/city-san-francisco": "旧金山",
+                "clock/city-santiago": "圣地亚哥",
+                "clock/city-sao-paulo": "圣保罗",
+                "clock/city-seoul": "首尔",
+                "clock/city-shanghai": "上海",
+                "clock/city-singapore": "新加坡",
+                "clock/city-stockholm": "斯德哥尔摩",
+                "clock/city-sydney": "悉尼",
+                "clock/city-taipei": "台北",
+                "clock/city-tehran": "德黑兰",
+                "clock/city-tel-aviv": "特拉维夫",
+                "clock/city-tokyo": "东京",
+                "clock/city-toronto": "多伦多",
+                "clock/city-vancouver": "温哥华",
+                "clock/city-vienna": "维也纳",
+                "clock/city-warsaw": "华沙",
+                "clock/city-wellington": "惠灵顿",
+                "clock/city-zurich": "苏黎世"
             },
             "titles": {
                 "Start": "开始",
@@ -143,7 +214,78 @@
                 "clock/region-utc": "UTC",
                 "clock/region-indian": "印度洋",
                 "clock/region-atlantic": "大西洋",
-                "clock/region-arctic": "北極"
+                "clock/region-arctic": "北極",
+                "clock/city-abu-dhabi": "阿布達比",
+                "clock/city-adelaide": "阿得雷德",
+                "clock/city-almaty": "阿拉木圖",
+                "clock/city-amsterdam": "阿姆斯特丹",
+                "clock/city-anchorage": "安克拉治",
+                "clock/city-athens": "雅典",
+                "clock/city-auckland": "奧克蘭",
+                "clock/city-bangkok": "曼谷",
+                "clock/city-beijing": "北京",
+                "clock/city-berlin": "柏林",
+                "clock/city-brisbane": "布里斯本",
+                "clock/city-brussels": "布魯塞爾",
+                "clock/city-buenos-aires": "布宜諾斯艾利斯",
+                "clock/city-cairo": "開羅",
+                "clock/city-casablanca": "卡薩布蘭卡",
+                "clock/city-chicago": "芝加哥",
+                "clock/city-copenhagen": "哥本哈根",
+                "clock/city-denver": "丹佛",
+                "clock/city-dubai": "杜拜",
+                "clock/city-dublin": "都柏林",
+                "clock/city-frankfurt": "法蘭克福",
+                "clock/city-helsinki": "赫爾辛基",
+                "clock/city-ho-chi-minh-city": "胡志明市",
+                "clock/city-hong-kong": "香港",
+                "clock/city-honolulu": "檀香山",
+                "clock/city-istanbul": "伊斯坦堡",
+                "clock/city-jakarta": "雅加達",
+                "clock/city-johannesburg": "約翰尼斯堡",
+                "clock/city-karachi": "喀拉蚩",
+                "clock/city-kathmandu": "加德滿都",
+                "clock/city-kolkata": "加爾各答",
+                "clock/city-kuala-lumpur": "吉隆坡",
+                "clock/city-lagos": "拉哥斯",
+                "clock/city-lima": "利馬",
+                "clock/city-lisbon": "里斯本",
+                "clock/city-london": "倫敦",
+                "clock/city-los-angeles": "洛杉磯",
+                "clock/city-madrid": "馬德里",
+                "clock/city-manila": "馬尼拉",
+                "clock/city-melbourne": "墨爾本",
+                "clock/city-mexico-city": "墨西哥城",
+                "clock/city-moscow": "莫斯科",
+                "clock/city-mumbai": "孟買",
+                "clock/city-nairobi": "奈洛比",
+                "clock/city-new-delhi": "新德里",
+                "clock/city-new-york": "紐約",
+                "clock/city-oslo": "奧斯陸",
+                "clock/city-paris": "巴黎",
+                "clock/city-perth": "伯斯",
+                "clock/city-phoenix": "鳳凰城",
+                "clock/city-prague": "布拉格",
+                "clock/city-riyadh": "利雅德",
+                "clock/city-rome": "羅馬",
+                "clock/city-san-francisco": "舊金山",
+                "clock/city-santiago": "聖地牙哥",
+                "clock/city-sao-paulo": "聖保羅",
+                "clock/city-seoul": "首爾",
+                "clock/city-shanghai": "上海",
+                "clock/city-singapore": "新加坡",
+                "clock/city-stockholm": "斯德哥爾摩",
+                "clock/city-sydney": "雪梨",
+                "clock/city-taipei": "台北",
+                "clock/city-tehran": "德黑蘭",
+                "clock/city-tel-aviv": "特拉維夫",
+                "clock/city-tokyo": "東京",
+                "clock/city-toronto": "多倫多",
+                "clock/city-vancouver": "溫哥華",
+                "clock/city-vienna": "維也納",
+                "clock/city-warsaw": "華沙",
+                "clock/city-wellington": "威靈頓",
+                "clock/city-zurich": "蘇黎世"
             },
             "titles": {
                 "Start": "開始",
@@ -195,7 +337,78 @@
                 "clock/region-utc": "UTC",
                 "clock/region-indian": "印度洋",
                 "clock/region-atlantic": "大西洋",
-                "clock/region-arctic": "北極"
+                "clock/region-arctic": "北極",
+                "clock/city-abu-dhabi": "阿布達比",
+                "clock/city-adelaide": "阿德雷德",
+                "clock/city-almaty": "阿拉木圖",
+                "clock/city-amsterdam": "阿姆斯特丹",
+                "clock/city-anchorage": "安克雷奇",
+                "clock/city-athens": "雅典",
+                "clock/city-auckland": "奧克蘭",
+                "clock/city-bangkok": "曼谷",
+                "clock/city-beijing": "北京",
+                "clock/city-berlin": "柏林",
+                "clock/city-brisbane": "布里斯本",
+                "clock/city-brussels": "布魯塞爾",
+                "clock/city-buenos-aires": "布宜諾斯艾利斯",
+                "clock/city-cairo": "開羅",
+                "clock/city-casablanca": "卡薩布蘭卡",
+                "clock/city-chicago": "芝加哥",
+                "clock/city-copenhagen": "哥本哈根",
+                "clock/city-denver": "丹佛",
+                "clock/city-dubai": "杜拜",
+                "clock/city-dublin": "都柏林",
+                "clock/city-frankfurt": "法蘭克福",
+                "clock/city-helsinki": "赫爾辛基",
+                "clock/city-ho-chi-minh-city": "胡志明市",
+                "clock/city-hong-kong": "香港",
+                "clock/city-honolulu": "火奴魯魯",
+                "clock/city-istanbul": "伊斯坦堡",
+                "clock/city-jakarta": "雅加達",
+                "clock/city-johannesburg": "約翰尼斯堡",
+                "clock/city-karachi": "卡拉奇",
+                "clock/city-kathmandu": "加德滿都",
+                "clock/city-kolkata": "加爾各答",
+                "clock/city-kuala-lumpur": "吉隆坡",
+                "clock/city-lagos": "拉各斯",
+                "clock/city-lima": "利馬",
+                "clock/city-lisbon": "里斯本",
+                "clock/city-london": "倫敦",
+                "clock/city-los-angeles": "洛杉磯",
+                "clock/city-madrid": "馬德里",
+                "clock/city-manila": "馬尼拉",
+                "clock/city-melbourne": "墨爾本",
+                "clock/city-mexico-city": "墨西哥城",
+                "clock/city-moscow": "莫斯科",
+                "clock/city-mumbai": "孟買",
+                "clock/city-nairobi": "奈洛比",
+                "clock/city-new-delhi": "新德里",
+                "clock/city-new-york": "紐約",
+                "clock/city-oslo": "奧斯陸",
+                "clock/city-paris": "巴黎",
+                "clock/city-perth": "柏斯",
+                "clock/city-phoenix": "鳳凰城",
+                "clock/city-prague": "布拉格",
+                "clock/city-riyadh": "利雅德",
+                "clock/city-rome": "羅馬",
+                "clock/city-san-francisco": "三藩市",
+                "clock/city-santiago": "聖地牙哥",
+                "clock/city-sao-paulo": "聖保羅",
+                "clock/city-seoul": "首爾",
+                "clock/city-shanghai": "上海",
+                "clock/city-singapore": "新加坡",
+                "clock/city-stockholm": "斯德哥爾摩",
+                "clock/city-sydney": "悉尼",
+                "clock/city-taipei": "台北",
+                "clock/city-tehran": "德黑蘭",
+                "clock/city-tel-aviv": "特拉維夫",
+                "clock/city-tokyo": "東京",
+                "clock/city-toronto": "多倫多",
+                "clock/city-vancouver": "溫哥華",
+                "clock/city-vienna": "維也納",
+                "clock/city-warsaw": "華沙",
+                "clock/city-wellington": "威靈頓",
+                "clock/city-zurich": "蘇黎世"
             },
             "titles": {
                 "Start": "開始",
@@ -247,7 +460,78 @@
                 "clock/region-utc": "UTC",
                 "clock/region-indian": "インド洋",
                 "clock/region-atlantic": "大西洋",
-                "clock/region-arctic": "北極"
+                "clock/region-arctic": "北極",
+                "clock/city-abu-dhabi": "アブダビ",
+                "clock/city-adelaide": "アデレード",
+                "clock/city-almaty": "アルマティ",
+                "clock/city-amsterdam": "アムステルダム",
+                "clock/city-anchorage": "アンカレッジ",
+                "clock/city-athens": "アテネ",
+                "clock/city-auckland": "オークランド",
+                "clock/city-bangkok": "バンコク",
+                "clock/city-beijing": "北京",
+                "clock/city-berlin": "ベルリン",
+                "clock/city-brisbane": "ブリスベン",
+                "clock/city-brussels": "ブリュッセル",
+                "clock/city-buenos-aires": "ブエノスアイレス",
+                "clock/city-cairo": "カイロ",
+                "clock/city-casablanca": "カサブランカ",
+                "clock/city-chicago": "シカゴ",
+                "clock/city-copenhagen": "コペンハーゲン",
+                "clock/city-denver": "デンバー",
+                "clock/city-dubai": "ドバイ",
+                "clock/city-dublin": "ダブリン",
+                "clock/city-frankfurt": "フランクフルト",
+                "clock/city-helsinki": "ヘルシンキ",
+                "clock/city-ho-chi-minh-city": "ホーチミン",
+                "clock/city-hong-kong": "香港",
+                "clock/city-honolulu": "ホノルル",
+                "clock/city-istanbul": "イスタンブール",
+                "clock/city-jakarta": "ジャカルタ",
+                "clock/city-johannesburg": "ヨハネスブルク",
+                "clock/city-karachi": "カラチ",
+                "clock/city-kathmandu": "カトマンズ",
+                "clock/city-kolkata": "コルカタ",
+                "clock/city-kuala-lumpur": "クアラルンプール",
+                "clock/city-lagos": "ラゴス",
+                "clock/city-lima": "リマ",
+                "clock/city-lisbon": "リスボン",
+                "clock/city-london": "ロンドン",
+                "clock/city-los-angeles": "ロサンゼルス",
+                "clock/city-madrid": "マドリード",
+                "clock/city-manila": "マニラ",
+                "clock/city-melbourne": "メルボルン",
+                "clock/city-mexico-city": "メキシコシティ",
+                "clock/city-moscow": "モスクワ",
+                "clock/city-mumbai": "ムンバイ",
+                "clock/city-nairobi": "ナイロビ",
+                "clock/city-new-delhi": "ニューデリー",
+                "clock/city-new-york": "ニューヨーク",
+                "clock/city-oslo": "オスロ",
+                "clock/city-paris": "パリ",
+                "clock/city-perth": "パース",
+                "clock/city-phoenix": "フェニックス",
+                "clock/city-prague": "プラハ",
+                "clock/city-riyadh": "リヤド",
+                "clock/city-rome": "ローマ",
+                "clock/city-san-francisco": "サンフランシスコ",
+                "clock/city-santiago": "サンティアゴ",
+                "clock/city-sao-paulo": "サンパウロ",
+                "clock/city-seoul": "ソウル",
+                "clock/city-shanghai": "上海",
+                "clock/city-singapore": "シンガポール",
+                "clock/city-stockholm": "ストックホルム",
+                "clock/city-sydney": "シドニー",
+                "clock/city-taipei": "台北",
+                "clock/city-tehran": "テヘラン",
+                "clock/city-tel-aviv": "テルアビブ",
+                "clock/city-tokyo": "東京",
+                "clock/city-toronto": "トロント",
+                "clock/city-vancouver": "バンクーバー",
+                "clock/city-vienna": "ウィーン",
+                "clock/city-warsaw": "ワルシャワ",
+                "clock/city-wellington": "ウェリントン",
+                "clock/city-zurich": "チューリッヒ"
             },
             "titles": {
                 "Start": "開始",
@@ -299,7 +583,78 @@
                 "clock/region-utc": "UTC",
                 "clock/region-indian": "인도양",
                 "clock/region-atlantic": "대서양",
-                "clock/region-arctic": "북극"
+                "clock/region-arctic": "북극",
+                "clock/city-abu-dhabi": "아부다비",
+                "clock/city-adelaide": "애들레이드",
+                "clock/city-almaty": "알마티",
+                "clock/city-amsterdam": "암스테르담",
+                "clock/city-anchorage": "앵커리지",
+                "clock/city-athens": "아테네",
+                "clock/city-auckland": "오클랜드",
+                "clock/city-bangkok": "방콕",
+                "clock/city-beijing": "베이징",
+                "clock/city-berlin": "베를린",
+                "clock/city-brisbane": "브리즈번",
+                "clock/city-brussels": "브뤼셀",
+                "clock/city-buenos-aires": "부에노스아이레스",
+                "clock/city-cairo": "카이로",
+                "clock/city-casablanca": "카사블랑카",
+                "clock/city-chicago": "시카고",
+                "clock/city-copenhagen": "코펜하겐",
+                "clock/city-denver": "덴버",
+                "clock/city-dubai": "두바이",
+                "clock/city-dublin": "더블린",
+                "clock/city-frankfurt": "프랑크푸르트",
+                "clock/city-helsinki": "헬싱키",
+                "clock/city-ho-chi-minh-city": "호치민",
+                "clock/city-hong-kong": "홍콩",
+                "clock/city-honolulu": "호놀룰루",
+                "clock/city-istanbul": "이스탄불",
+                "clock/city-jakarta": "자카르타",
+                "clock/city-johannesburg": "요하네스버그",
+                "clock/city-karachi": "카라치",
+                "clock/city-kathmandu": "카트만두",
+                "clock/city-kolkata": "콜카타",
+                "clock/city-kuala-lumpur": "쿠알라룸푸르",
+                "clock/city-lagos": "라고스",
+                "clock/city-lima": "리마",
+                "clock/city-lisbon": "리스본",
+                "clock/city-london": "런던",
+                "clock/city-los-angeles": "로스앤젤레스",
+                "clock/city-madrid": "마드리드",
+                "clock/city-manila": "마닐라",
+                "clock/city-melbourne": "멜버른",
+                "clock/city-mexico-city": "멕시코시티",
+                "clock/city-moscow": "모스크바",
+                "clock/city-mumbai": "뭄바이",
+                "clock/city-nairobi": "나이로비",
+                "clock/city-new-delhi": "뉴델리",
+                "clock/city-new-york": "뉴욕",
+                "clock/city-oslo": "오슬로",
+                "clock/city-paris": "파리",
+                "clock/city-perth": "퍼스",
+                "clock/city-phoenix": "피닉스",
+                "clock/city-prague": "프라하",
+                "clock/city-riyadh": "리야드",
+                "clock/city-rome": "로마",
+                "clock/city-san-francisco": "샌프란시스코",
+                "clock/city-santiago": "산티아고",
+                "clock/city-sao-paulo": "상파울루",
+                "clock/city-seoul": "서울",
+                "clock/city-shanghai": "상하이",
+                "clock/city-singapore": "싱가포르",
+                "clock/city-stockholm": "스톡홀름",
+                "clock/city-sydney": "시드니",
+                "clock/city-taipei": "타이베이",
+                "clock/city-tehran": "테헤란",
+                "clock/city-tel-aviv": "텔아비브",
+                "clock/city-tokyo": "도쿄",
+                "clock/city-toronto": "토론토",
+                "clock/city-vancouver": "밴쿠버",
+                "clock/city-vienna": "빈",
+                "clock/city-warsaw": "바르샤바",
+                "clock/city-wellington": "웰링턴",
+                "clock/city-zurich": "취리히"
             },
             "titles": {
                 "Start": "시작",