Skip to content

Commit f197bc9

Browse files
author
Pedro Brito
committed
feat(i18n): add Brazilian Portuguese (pt-BR) language module
- Localized all UI text labels, stats counters, tooltips, dialogs, and placeholders in script.js. - Added language selection dropdown options for pt-BR in index.html (both desktop and mobile menus). - Registered pt-BR hreflang metadata alternate link in index.html for SEO indexation. - Enabled automatic language detection fallback for Portuguese language preferences. - Rotated Service Worker cache namespace to v3.6.4 in sw.js. - Synced offline-ready desktop-app compiled resources using prepare.js.
1 parent fc4e548 commit f197bc9

6 files changed

Lines changed: 91 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
All notable code changes to **Markdown Viewer** are documented here.
44
Non-code commits (documentation, planning, README-only updates) are excluded.
55

6+
## v3.6.4
7+
8+
- **Description:** Implemented Brazilian Portuguese (pt-BR) translation module. Localized all main editor labels, stats, tooltips, dialogs, placeholder, and search/replace options. Registered `hreflang` alternate link for Portuguese (pt-BR) search indexation and enabled automatic browser language detection fallback for Portuguese language preferences. Rotated Service Worker cache namespace to `v3.6.4` to trigger background cache updates.
9+
- **Date:** 2026-05-27
10+
- **URL:** https://github.com/ThisIs-Developer/Markdown-Viewer/commit/v3.6.4
11+
612
---
713

814
## v3.6.3

desktop-app/resources/index.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<link rel="alternate" hreflang="zh-Hans" href="https://markdownviewer.pages.dev/?lang=zh" />
1919
<link rel="alternate" hreflang="ja" href="https://markdownviewer.pages.dev/?lang=ja" />
2020
<link rel="alternate" hreflang="ko" href="https://markdownviewer.pages.dev/?lang=ko" />
21+
<link rel="alternate" hreflang="pt-BR" href="https://markdownviewer.pages.dev/?lang=pt" />
2122

2223
<!-- Asian Search Engine Verification Meta Tags -->
2324
<meta name="baidu-site-verification" content="baidu_verification_code_placeholder" />
@@ -190,6 +191,7 @@ <h1 class="h4 mb-0 me-2">Markdown Viewer</h1>
190191
<li><a class="dropdown-item lang-select-item" href="#" data-lang="zh">🇨🇳 简体中文</a></li>
191192
<li><a class="dropdown-item lang-select-item" href="#" data-lang="ja">🇯🇵 日本語</a></li>
192193
<li><a class="dropdown-item lang-select-item" href="#" data-lang="ko">🇰🇷 한국어</a></li>
194+
<li><a class="dropdown-item lang-select-item" href="#" data-lang="pt">🇧🇷 Português (Brasil)</a></li>
193195
</ul>
194196
</div>
195197

@@ -301,6 +303,7 @@ <h5>Menu</h5>
301303
<li><a class="dropdown-item lang-select-item" href="#" data-lang="zh">🇨🇳 简体中文</a></li>
302304
<li><a class="dropdown-item lang-select-item" href="#" data-lang="ja">🇯🇵 日本語</a></li>
303305
<li><a class="dropdown-item lang-select-item" href="#" data-lang="ko">🇰🇷 한국어</a></li>
306+
<li><a class="dropdown-item lang-select-item" href="#" data-lang="pt">🇧🇷 Português (Brasil)</a></li>
304307
</ul>
305308
</div>
306309
<button id="mobile-theme-toggle" class="mobile-menu-item" title="Toggle Dark Mode">

desktop-app/resources/js/script.js

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6626,6 +6626,42 @@ This is a fully client-side application. Your content never leaves your browser
66266626
insertTable: "표 삽입",
66276627
findReplace: "찾기 및 바꾸기",
66286628
placeholder: "여기에 마크다운 내용을 입력하세요..."
6629+
},
6630+
pt: {
6631+
title: "Visualizador de Markdown",
6632+
syncOff: "Desativar Sincronia",
6633+
syncOn: "Ativar Sincronia",
6634+
import: "Importar",
6635+
importFile: "De arquivos",
6636+
importGithub: "Do GitHub",
6637+
export: "Exportar",
6638+
exportMd: "Markdown (.md)",
6639+
exportHtml: "HTML",
6640+
exportPdf: "PDF",
6641+
copy: "Copiar",
6642+
copied: "Copiado!",
6643+
share: "Compartilhar",
6644+
reset: "Redefinir",
6645+
editor: "Editor",
6646+
split: "Dividido",
6647+
preview: "Visualizar",
6648+
minRead: "Min de leitura",
6649+
words: "Palavras",
6650+
chars: "Caracteres",
6651+
switchRtl: "Mudar para RTL",
6652+
switchLtr: "Mudar para LTR",
6653+
darkMode: "Modo Escuro",
6654+
lightMode: "Modo Claro",
6655+
helpTitle: "Ajuda do Visualizador de Markdown",
6656+
aboutTitle: "Sobre o Markdown",
6657+
shareTitle: "Compartilhar Documento",
6658+
renameTitle: "Renomear arquivo",
6659+
insertLink: "Inserir link",
6660+
insertRef: "Inserir referência",
6661+
insertImg: "Inserir imagem",
6662+
insertTable: "Inserir tabela",
6663+
findReplace: "Localizar & Substituir",
6664+
placeholder: "Digite seu markdown aqui..."
66296665
}
66306666
};
66316667

@@ -6643,12 +6679,12 @@ This is a fully client-side application. Your content never leaves your browser
66436679
// Update dynamic current language labels in drop menus
66446680
const labelEl = document.getElementById('current-lang-label');
66456681
if (labelEl) {
6646-
const flags = { en: "🇺🇸 English", zh: "🇨🇳 简体中文", ja: "🇯🇵 日本語", ko: "🇰🇷 한국어" };
6682+
const flags = { en: "🇺🇸 English", zh: "🇨🇳 简体中文", ja: "🇯🇵 日本語", ko: "🇰🇷 한국어", pt: "🇧🇷 Português (Brasil)" };
66476683
labelEl.textContent = flags[lang];
66486684
}
66496685
const mobileLabelEl = document.getElementById('mobile-current-lang-label');
66506686
if (mobileLabelEl) {
6651-
const flags = { en: "🇺🇸 English", zh: "🇨🇳 简体中文", ja: "🇯🇵 日本語", ko: "🇰🇷 한국어" };
6687+
const flags = { en: "🇺🇸 English", zh: "🇨🇳 简体中文", ja: "🇯🇵 日本語", ko: "🇰🇷 한국어", pt: "🇧🇷 Português (Brasil)" };
66526688
mobileLabelEl.textContent = flags[lang];
66536689
}
66546690

@@ -6821,6 +6857,7 @@ This is a fully client-side application. Your content never leaves your browser
68216857
if (navLang.startsWith('zh')) lang = 'zh';
68226858
else if (navLang.startsWith('ja')) lang = 'ja';
68236859
else if (navLang.startsWith('ko')) lang = 'ko';
6860+
else if (navLang.startsWith('pt')) lang = 'pt';
68246861
}
68256862

68266863
if (!lang || !I18N_DICTS[lang]) {

index.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<link rel="alternate" hreflang="zh-Hans" href="https://markdownviewer.pages.dev/?lang=zh" />
1919
<link rel="alternate" hreflang="ja" href="https://markdownviewer.pages.dev/?lang=ja" />
2020
<link rel="alternate" hreflang="ko" href="https://markdownviewer.pages.dev/?lang=ko" />
21+
<link rel="alternate" hreflang="pt-BR" href="https://markdownviewer.pages.dev/?lang=pt" />
2122

2223
<!-- Asian Search Engine Verification Meta Tags -->
2324
<meta name="baidu-site-verification" content="baidu_verification_code_placeholder" />
@@ -187,6 +188,7 @@ <h1 class="h4 mb-0 me-2">Markdown Viewer</h1>
187188
<li><a class="dropdown-item lang-select-item" href="#" data-lang="zh">🇨🇳 简体中文</a></li>
188189
<li><a class="dropdown-item lang-select-item" href="#" data-lang="ja">🇯🇵 日本語</a></li>
189190
<li><a class="dropdown-item lang-select-item" href="#" data-lang="ko">🇰🇷 한국어</a></li>
191+
<li><a class="dropdown-item lang-select-item" href="#" data-lang="pt">🇧🇷 Português (Brasil)</a></li>
190192
</ul>
191193
</div>
192194

@@ -298,6 +300,7 @@ <h5>Menu</h5>
298300
<li><a class="dropdown-item lang-select-item" href="#" data-lang="zh">🇨🇳 简体中文</a></li>
299301
<li><a class="dropdown-item lang-select-item" href="#" data-lang="ja">🇯🇵 日本語</a></li>
300302
<li><a class="dropdown-item lang-select-item" href="#" data-lang="ko">🇰🇷 한국어</a></li>
303+
<li><a class="dropdown-item lang-select-item" href="#" data-lang="pt">🇧🇷 Português (Brasil)</a></li>
301304
</ul>
302305
</div>
303306
<button id="mobile-theme-toggle" class="mobile-menu-item" title="Toggle Dark Mode">

script.js

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6626,6 +6626,42 @@ This is a fully client-side application. Your content never leaves your browser
66266626
insertTable: "표 삽입",
66276627
findReplace: "찾기 및 바꾸기",
66286628
placeholder: "여기에 마크다운 내용을 입력하세요..."
6629+
},
6630+
pt: {
6631+
title: "Visualizador de Markdown",
6632+
syncOff: "Desativar Sincronia",
6633+
syncOn: "Ativar Sincronia",
6634+
import: "Importar",
6635+
importFile: "De arquivos",
6636+
importGithub: "Do GitHub",
6637+
export: "Exportar",
6638+
exportMd: "Markdown (.md)",
6639+
exportHtml: "HTML",
6640+
exportPdf: "PDF",
6641+
copy: "Copiar",
6642+
copied: "Copiado!",
6643+
share: "Compartilhar",
6644+
reset: "Redefinir",
6645+
editor: "Editor",
6646+
split: "Dividido",
6647+
preview: "Visualizar",
6648+
minRead: "Min de leitura",
6649+
words: "Palavras",
6650+
chars: "Caracteres",
6651+
switchRtl: "Mudar para RTL",
6652+
switchLtr: "Mudar para LTR",
6653+
darkMode: "Modo Escuro",
6654+
lightMode: "Modo Claro",
6655+
helpTitle: "Ajuda do Visualizador de Markdown",
6656+
aboutTitle: "Sobre o Markdown",
6657+
shareTitle: "Compartilhar Documento",
6658+
renameTitle: "Renomear arquivo",
6659+
insertLink: "Inserir link",
6660+
insertRef: "Inserir referência",
6661+
insertImg: "Inserir imagem",
6662+
insertTable: "Inserir tabela",
6663+
findReplace: "Localizar & Substituir",
6664+
placeholder: "Digite seu markdown aqui..."
66296665
}
66306666
};
66316667

@@ -6643,12 +6679,12 @@ This is a fully client-side application. Your content never leaves your browser
66436679
// Update dynamic current language labels in drop menus
66446680
const labelEl = document.getElementById('current-lang-label');
66456681
if (labelEl) {
6646-
const flags = { en: "🇺🇸 English", zh: "🇨🇳 简体中文", ja: "🇯🇵 日本語", ko: "🇰🇷 한국어" };
6682+
const flags = { en: "🇺🇸 English", zh: "🇨🇳 简体中文", ja: "🇯🇵 日本語", ko: "🇰🇷 한국어", pt: "🇧🇷 Português (Brasil)" };
66476683
labelEl.textContent = flags[lang];
66486684
}
66496685
const mobileLabelEl = document.getElementById('mobile-current-lang-label');
66506686
if (mobileLabelEl) {
6651-
const flags = { en: "🇺🇸 English", zh: "🇨🇳 简体中文", ja: "🇯🇵 日本語", ko: "🇰🇷 한국어" };
6687+
const flags = { en: "🇺🇸 English", zh: "🇨🇳 简体中文", ja: "🇯🇵 日本語", ko: "🇰🇷 한국어", pt: "🇧🇷 Português (Brasil)" };
66526688
mobileLabelEl.textContent = flags[lang];
66536689
}
66546690

@@ -6821,6 +6857,7 @@ This is a fully client-side application. Your content never leaves your browser
68216857
if (navLang.startsWith('zh')) lang = 'zh';
68226858
else if (navLang.startsWith('ja')) lang = 'ja';
68236859
else if (navLang.startsWith('ko')) lang = 'ko';
6860+
else if (navLang.startsWith('pt')) lang = 'pt';
68246861
}
68256862

68266863
if (!lang || !I18N_DICTS[lang]) {

sw.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const CACHE_NAME = 'markdown-viewer-cache-v3.6.3';
1+
const CACHE_NAME = 'markdown-viewer-cache-v3.6.4';
22
const ASSETS = [
33
'./',
44
'./index.html',

0 commit comments

Comments
 (0)