Skip to content

Commit f2170a8

Browse files
다국어 지원 개선 및 언어 전환 로직 최적화
- UI에 번역이 없는 경우 홈페이지로 리디렉션하는 메시지 추가 - 언어 전환 로직 개선: 페이지 타입에 따라 적절한 URL 생성 - CSS 스타일링 업데이트: 고정 헤더 및 콘텐츠 영역 마진 조정 - Highlight.js 추가 및 초기화 스크립트 작성으로 코드 하이라이팅 지원 - 번역이 없는 언어 옵션에 대한 시각적 표시 추가
1 parent 04a26e1 commit f2170a8

9 files changed

Lines changed: 1340 additions & 7 deletions

_data/en.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ ui:
4141
next_post: "Next Post"
4242
toggle_dark_mode: "Toggle Dark Mode"
4343
rss_feed: "RSS Feed"
44+
translation_not_available: "Translation not available, redirecting to homepage"
4445

4546
posts:
4647
recent: "Recent Posts"

_data/ja.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,5 @@ ui:
4040
previous_post: "前の投稿"
4141
next_post: "次の投稿"
4242
toggle_dark_mode: "ダークモード切り替え"
43-
rss_feed: "RSSフィード"
43+
rss_feed: "RSSフィード"
44+
translation_not_available: "翻訳がありません。ホームページに移動します"

_data/ko.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ ui:
3737
next_post: "다음 포스트"
3838
toggle_dark_mode: "다크모드 전환"
3939
rss_feed: "RSS 피드"
40+
translation_not_available: "번역이 없어 홈페이지로 이동합니다"
4041

4142
language:
4243
name: "한국어"

_includes/header.html

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,97 @@
8989
{% for lang in site.languages %}
9090
{% assign target_lang_data = site.data[lang] %}
9191
{% if lang != current_lang %}
92-
<a href="{% if lang == site.default_lang %}{{ page.url | remove: '/en' | remove: '/ja' | relative_url }}{% else %}/{{ lang }}{{ page.url | remove: '/en' | remove: '/ja' }}{% endif %}"
92+
{% comment %} 개선된 언어 전환 로직 {% endcomment %}
93+
{% assign target_url = '' %}
94+
{% assign has_translation = false %}
95+
{% assign page_type = '' %}
96+
97+
{% comment %} 현재 페이지 타입 및 기본 URL 파악 {% endcomment %}
98+
{% comment %} URL에서 언어 부분을 정확히 제거 {% endcomment %}
99+
{% assign current_url = page.url %}
100+
{% if current_url contains '/en/' %}
101+
{% assign clean_url = current_url | replace: '/en/', '/' %}
102+
{% elsif current_url contains '/ja/' %}
103+
{% assign clean_url = current_url | replace: '/ja/', '/' %}
104+
{% elsif current_url == '/en' %}
105+
{% assign clean_url = '/' %}
106+
{% elsif current_url == '/ja' %}
107+
{% assign clean_url = '/' %}
108+
{% else %}
109+
{% assign clean_url = current_url %}
110+
{% endif %}
111+
{% if clean_url == '/' or clean_url == '' or clean_url == '/index.html' %}
112+
{% assign page_type = 'home' %}
113+
{% elsif page.layout == 'post' %}
114+
{% assign page_type = 'post' %}
115+
{% elsif clean_url contains '/about' %}
116+
{% assign page_type = 'about' %}
117+
{% elsif clean_url contains '/archive' %}
118+
{% assign page_type = 'archive' %}
119+
{% elsif clean_url contains '/categories' %}
120+
{% assign page_type = 'categories' %}
121+
{% elsif clean_url contains '/tags' %}
122+
{% assign page_type = 'tags' %}
123+
{% else %}
124+
{% assign page_type = 'other' %}
125+
{% endif %}
126+
127+
{% comment %} 페이지 타입별 URL 생성 {% endcomment %}
128+
{% if page_type == 'home' %}
129+
{% comment %} 홈페이지 {% endcomment %}
130+
{% if lang == site.default_lang %}
131+
{% assign target_url = '/' %}
132+
{% else %}
133+
{% assign target_url = '/' | append: lang | append: '/' %}
134+
{% endif %}
135+
{% assign has_translation = true %}
136+
137+
{% elsif page_type == 'post' %}
138+
{% comment %} 포스트 페이지 - translation_key로 번역된 포스트 찾기 {% endcomment %}
139+
{% assign translated_post = null %}
140+
{% if page.translation_key %}
141+
{% for post in site.posts %}
142+
{% if post.lang == lang and post.translation_key == page.translation_key %}
143+
{% assign translated_post = post %}
144+
{% assign has_translation = true %}
145+
{% break %}
146+
{% endif %}
147+
{% endfor %}
148+
{% endif %}
149+
150+
{% if translated_post %}
151+
{% assign target_url = translated_post.url %}
152+
{% else %}
153+
{% comment %} 번역된 포스트가 없으면 해당 언어의 홈페이지로 {% endcomment %}
154+
{% if lang == site.default_lang %}
155+
{% assign target_url = '/' %}
156+
{% else %}
157+
{% assign target_url = '/' | append: lang | append: '/' %}
158+
{% endif %}
159+
{% assign has_translation = false %}
160+
{% endif %}
161+
162+
{% else %}
163+
{% comment %} 일반 페이지 (about, archive, categories, tags 등) {% endcomment %}
164+
{% if lang == site.default_lang %}
165+
{% assign target_url = clean_url %}
166+
{% else %}
167+
{% comment %} URL 안전하게 결합 {% endcomment %}
168+
{% if clean_url == '/' %}
169+
{% assign target_url = '/' | append: lang | append: '/' %}
170+
{% else %}
171+
{% assign target_url = '/' | append: lang | append: clean_url %}
172+
{% endif %}
173+
{% endif %}
174+
{% assign has_translation = true %}
175+
{% endif %}
176+
177+
<a href="{{ target_url | relative_url }}"
93178
class="lang-option"
94-
data-lang="{{ lang }}">
179+
data-lang="{{ lang }}"
180+
{% unless has_translation %}
181+
title="{{ target_lang_data.ui.translation_not_available | default: 'Translation not available, redirecting to homepage' }}"
182+
{% endunless %}>
95183
{% case lang %}
96184
{% when 'ko' %}
97185
🇰🇷 {{ target_lang_data.ui.korean }}
@@ -100,6 +188,9 @@
100188
{% when 'ja' %}
101189
🇯🇵 {{ target_lang_data.ui.japanese }}
102190
{% endcase %}
191+
{% unless has_translation %}
192+
<span class="no-translation">*</span>
193+
{% endunless %}
103194
</a>
104195
{% endif %}
105196
{% endfor %}

_layouts/default.html

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
<!-- Font Awesome Icons -->
3434
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
3535

36+
<!-- Highlight.js for Code Syntax Highlighting -->
37+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github.min.css">
38+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/github-dark.min.css" media="(prefers-color-scheme: dark)">
39+
3640
<!-- Theme color -->
3741
<meta name="theme-color" content="#2563eb">
3842

@@ -66,7 +70,29 @@
6670
<!-- Footer -->
6771
{% include footer.html %}
6872

73+
<!-- Highlight.js JavaScript -->
74+
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/highlight.min.js"></script>
75+
<script>
76+
document.addEventListener('DOMContentLoaded', function() {
77+
// Initialize Highlight.js
78+
hljs.highlightAll();
79+
80+
// Dark mode toggle support for highlight.js
81+
const themeToggle = document.querySelector('.theme-toggle');
82+
if (themeToggle) {
83+
themeToggle.addEventListener('click', function() {
84+
setTimeout(() => {
85+
hljs.highlightAll();
86+
}, 100);
87+
});
88+
}
89+
});
90+
</script>
91+
6992
<!-- JavaScript -->
7093
<script src="{{ '/assets/js/main.js' | relative_url }}"></script>
94+
95+
<!-- Mermaid 다이어그램 지원 -->
96+
{% include mermaid.html %}
7197
</body>
7298
</html>

0 commit comments

Comments
 (0)