starium.club 54 ํ์ด์ง i18n ์์ฑ + lang switch ์๋ ๊ฐ์ง
์์ฑ์ผ: 2026-05-17
์์ฑ์: ์ด๋ง์ฐ / Claude (Opus 4.7 1M)
์์น: paperclip / /opt/star365-ceo/public/starium-global/
๊ด๋ จ ๋ฉ๋ชจ๋ฆฌ: [[starium-club-i18n-mass-translation-20260517]], [[feedback_i18n-dir-split-without-translation]]
1. ๋ฐ๊ฒฌ
์ฌ์ฉ์ 1์ฐจ ์ ๊ณ : https://starium.club/programs/bm-medical ํ์ด์ง์ ํ๊ตญ์ด๊ฐ ๊ฐ๋ ๋ณด์ โ ๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ ํ๊ตญ์ด ํ์.
๊ทผ๋ณธ ์์ธ 3๋จ๊ณ:
- navigator.language ์๋ ๊ฐ์ง ๋ถ์ฌ: lang prefix ์๋ URL(
/programs/<slug>) โ root ํ์ผ ์๋ต โ <html lang="ko"> ํ๋์ฝ๋ฉ, JS๋ localStorage.getItem('sg_lang')๋ง ์กฐํ. ์ฒซ ๋ฐฉ๋ฌธ์๋ ๋ฌด์กฐ๊ฑด ko.
- 5/16 i18n ์์
"๋๋ ํ ๋ฆฌ ๋ถ๋ฆฌ๋ง ํ๊ณ ๋ณธ๋ฌธ ๋ฒ์ญ ๋๋ฝ":
ko/zh/en/mn/programs/<slug>.html 4 sub-lang ๋๋ ํ ๋ฆฌ๋ง ์์ฑํ๊ณ ์ฝํ
์ธ ๋ ํ๊ตญ์ด ๊ทธ๋๋ก. zh ํด๋ฆญ ์ zh span ์์ ํ๊ตญ์ด ๊ทธ๋๋ก ํ์.
- ์ฌ์ฉ์ ์ง์์
์ฝํ
์ธ ๊ฐ lang-content span "๋ฐ" plain HTML: ์ก์งํจ ๋์์, By the Numbers ์นด๋, 5/16 ์ ๊ท ์์
ํ์ด์ง(STARJET/Head Spa/GFF/FPMU/G-WAVE/Foot Care) โ ๋ชจ๋ lang-content span ํจํด ์์ด plain HTML ํ๊ตญ์ด๋ก ์์ฑ.
2. ์ฒ๋ฆฌ (์ค๋ ๋์ )
Phase 1 โ navigator.language ์๋ ๊ฐ์ง ํด๋ฐฑ (54 root)
- 3 cluster localStorage key (
sg_lang / lang / starium-lang) cross-cluster fallback chain
- ํ๊ตญ ๋ธ๋ผ์ฐ์ โ ko / ์ค๊ตญ โ zh / ๋ชฝ๊ณจ โ mn / ๊ธฐํ โ en
Phase 2 โ 41 ํ์ด์ง zh/en/mn span ์ผ๊ด ๋ฒ์ญ (6 subagent ๋ณ๋ ฌ)
- 5/16 i18n ๋๋ฝ๋ ํ์ด์ง ์ผ๊ด ๋ฒ์ญ
- 6 buckets balanced (๊ฐ ~4000 ์์กด ํ๊ธ)
- 5 ์์น ๋๊ธฐํ (ko/zh/en/mn/root)
- 615/615 cell PASS (ํ๊ธ < 50)
Phase 3 โ bm-medical ์ฌ์ฉ์ ์ฝํ
์ธ ๋ณต์
- root์ ko ๋๋ ํ ๋ฆฌ๊ฐ ๋ค๋ฅธ ์ฝํ
์ธ ๋ณด์ . ์ฌ์ฉ์๊ฐ ๋ณธ root ๋ฐฑ์
์ผ๋ก ๋ณต์.
- ko sub-lang์๋ ๋๊ธฐํ + zh/en/mn ๋ฒ์ญ
- 15 cell PASS
Phase 4 โ 5 ํ์ด์ง ์ฌ์ฉ์ ์ง์์
๋ณต์ + plain HTML 4-lang ๋ํ
- photon-therapy (์ก์งํจ ๋์์, By the Numbers 4 ์นด๋ ๋ฑ plain HTML 117๊ฑด)
- hyperbaric-oxygen / device-hilight / device-supersonic / mct-stem-cell
- BeautifulSoup์ผ๋ก element ๋จ์ 4-lang span ๋ํ + ๋ฒ์ญ
- 5 ํ์ด์ง ๋ชจ๋ outside_ko 1359~507 โ 0
Phase 5 โ 6 ํ์ด์ง 5/16 ์ ๊ท ์์
root sync (6 subagent ๋ณ๋ ฌ)
- head-spa / fpmu-semi-perm / g-wave-lifting / foot-care / starcell-intensive / starjet-regen
- ko ๋๋ ํ ๋ฆฌ๋ ์ด๋ฏธ 4-lang ์์ฑ ์ํ, root๋ง ์ plain HTML ์์กด
- ko โ zh/en/mn/root 5์์น sync + navigator.language ํด๋ฐฑ ์ฃผ์
3. ์ต์ข
์ ๋ (54 root ํ์ด์ง)
| ์นดํ
๊ณ ๋ฆฌ |
ํ์ด์ง ์ |
| ์์ ํด๋ฆฐ (in_zh=0, in_en=0, in_mn=0, outside_ko=0) |
47 |
| ์๋๋ ๊ณ ์ ๋ช
์ฌ ์์กด (< 50) |
7 |
| ์ ์ฒด PASS |
54/54 โ
|
์๋๋ ์์กด (๊ณ ์ ๋ช
์ฌ)
- treatments-overview: ํ๊ตญ ๋ฒ๋ช
/๊ธฐ๊ด๋ช
45์ (์๋ฃ๋ฒ/์์ฝ์ฒ)
- itinerary: ์ธ์ฒ๊ณตํญ/๋ณ์๋ช
14-28์
- device-tentriple: ์์ฝ์ฒ ์ธ์ฆ๋ช
6์
- device-multiblue: ์์ฝ์ฒ 3-6์
- nitric-oxide: ํ๊ตญ์ ํ์๋ช
3์
- bm-card: 19์
- vip-tour: mn์ "๊ฐ๋จ" 4์
4. ์ ์ฑ
์ ์ค
[[feedback_i18n-dir-split-without-translation]]
i18n "๋๋ ํ ๋ฆฌ ๋ถ๋ฆฌ"์ "๋ณธ๋ฌธ ๋ฒ์ญ"์ ํผ๋ํ์ง ๋ง ๊ฒ. lang-content span "์" ํ๊ธ ์นด์ดํธ๋ก ์ ๋ ๊ฒ์ฆ (cross-lang ์์ฅ ์ฐจ๋จ). 5 ์์น ๋๊ธฐํ ์๋ฌด (ko/zh/en/mn/root).
# ์ ํํ ์ ๋ ํจํด
for lang in ['zh','en','mn']:
matches = re.findall(rf'data-lang="{lang}">(.*?)</', text)
inside_hangul = sum(len(re.findall(r'[๊ฐ-ํฃ]', m)) for m in matches)
๋จ์ grep -c '[๊ฐ-ํฃ]'๋ cross-lang span ํ๊ธ๊น์ง ํฉ์ฐ๋์ด false PASS ๋ฐ์.
lang-content span "๋ฐ" plain HTML๋ ๊ฒ์ฆ
from bs4 import BeautifulSoup, Comment
soup = BeautifulSoup(html, 'html.parser')
for s in soup.find_all(class_='lang-content'): s.decompose()
for s in soup.find_all(['script','style','title']): s.decompose()
for c in soup.find_all(string=lambda x: isinstance(x, Comment)): c.extract()
outside = len(re.findall(r'[๊ฐ-ํฃ]', soup.get_text(' ', strip=True)))
5. ์์ ๋ณด์กด
- ์ก์งํจ youtube iframe (
embed/4wU00pvwnGI) ๋ณด์กด
- ์์ ์์ mp4 (STARJET 16MB, Head Spa 84MB, G-WAVE ๋ฑ) ๋ณด์กด
- ๋ชจ๋ img src / iframe src ๋ณด์กด
- HTML ๊ตฌ์กฐ/class/id/data-* ๋ณด์กด
- ๊ฐ๊ฒฉ ๋
ธ์ถ 0/54 ([[feedback_no-price-on-public-pages]])
6. ํ์ผ ๋ณ๊ฒฝ
์ด 270+ ํ์ผ (54 root + 54ร4 sub-lang + ๋ฐฑ์
)
๋ฐฑ์
์์น
_archive_bak/20260517080846/programs/*.html.bak-autodetect (navigator fix ์ )
_archive_bak/20260517081825/programs/*.html.bak-pre-ko-sync (ko sync ์ )
ko/programs/*.html.bak-5-16-i18n-version (5/16 i18n ๋ฒ์ )
- subagent๋ณ
.bak-i18n-20260517 ๋ฑ ๋ค์ค ๋ฐฑ์
7. ๋ผ์ด๋ธ ๊ฒ์ฆ
- 54 root URL
https://starium.club/programs/<slug> ๋ชจ๋ HTTPS 200
- 4 sub-lang URL
/{ko,zh,en,mn}/programs/<slug> ๋ชจ๋ 200
- ์บ์ ๊ฐ์ ์๋ก๊ณ ์นจ + localStorage ์ด๊ธฐํ ํ OS ์ธ์ด์ ๋ฐ๋ผ ์๋ lang ํ์ ํ์ธ