Skip to content

Commit b6ea873

Browse files
committed
i18n: support Polish
1 parent 3ed4878 commit b6ea873

26 files changed

+365
-19
lines changed

script/crowdin/common.ts

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ export type ItemSet = {
1818
[path: string]: string
1919
}
2020

21-
export const ALL_CROWDIN_LANGUAGES = ['zh-CN', 'zh-TW', 'ja', 'pt-PT', 'uk', 'es-ES', 'de', 'fr', 'ru', 'ar', 'tr'] as const
21+
export const ALL_CROWDIN_LANGUAGES = [
22+
'zh-CN', 'zh-TW', 'ja',
23+
'pt-PT', 'uk', 'es-ES', 'de', 'fr', 'ru', 'pl',
24+
'ar', 'tr',
25+
] as const
2226

2327
/**
2428
* The language code of crowdin
@@ -29,20 +33,22 @@ export type CrowdinLanguage = typeof ALL_CROWDIN_LANGUAGES[number]
2933

3034
export const SOURCE_LOCALE: timer.RequiredLocale = 'en'
3135

32-
// Not include en and zh_CN
33-
export const ALL_TRANS_LOCALES: timer.OptionalLocale[] = [
34-
'zh_CN',
35-
'ja',
36-
'zh_TW',
37-
'pt_PT',
38-
'uk',
39-
'es',
40-
'de',
41-
'fr',
42-
'ru',
43-
'ar',
44-
'tr',
45-
]
36+
const OPTIONAL_PLACEHOLDER: Record<timer.OptionalLocale, 0> = {
37+
ja: 0,
38+
uk: 0,
39+
de: 0,
40+
fr: 0,
41+
ru: 0,
42+
pl: 0,
43+
ar: 0,
44+
tr: 0,
45+
zh_CN: 0,
46+
zh_TW: 0,
47+
pt_PT: 0,
48+
es: 0
49+
}
50+
51+
export const ALL_TRANS_LOCALES = Object.keys(OPTIONAL_PLACEHOLDER) as timer.OptionalLocale[]
4652

4753
const CROWDIN_I18N_MAP: Record<CrowdinLanguage, timer.OptionalLocale> = {
4854
"zh-CN": 'zh_CN',
@@ -56,6 +62,7 @@ const CROWDIN_I18N_MAP: Record<CrowdinLanguage, timer.OptionalLocale> = {
5662
ru: 'ru',
5763
ar: 'ar',
5864
tr: 'tr',
65+
pl: 'pl',
5966
}
6067

6168
const I18N_CROWDIN_MAP: Record<timer.OptionalLocale, CrowdinLanguage> = {
@@ -70,6 +77,7 @@ const I18N_CROWDIN_MAP: Record<timer.OptionalLocale, CrowdinLanguage> = {
7077
ru: 'ru',
7178
ar: 'ar',
7279
tr: 'tr',
80+
pl: 'pl',
7381
}
7482

7583
export const crowdinLangOf = (locale: timer.OptionalLocale): CrowdinLanguage => I18N_CROWDIN_MAP[locale]

src/i18n/chrome/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ const _default: { [locale in FakedLocale]: any } = {
2626
ru: compile(messages.ru),
2727
ar: compile(messages.ar),
2828
tr: compile(messages.tr),
29+
pl: compile(messages.pl),
2930
}
3031

3132
export default _default

src/i18n/element.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const LOCALES: { [locale in timer.Locale]: () => Promise<{ default: Language }>
1717
ru: () => import('element-plus/es/locale/lang/ru'),
1818
ar: () => import('element-plus/es/locale/lang/ar'),
1919
tr: () => import('element-plus/es/locale/lang/tr'),
20+
pl: () => import('element-plus/es/locale/lang/pl'),
2021
}
2122

2223
export const initElementLocale = async (app: App) => {

src/i18n/index.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export const defaultLocale: timer.Locale = "zh_CN"
2525

2626
// Standardize the locale code according to the Chrome locale code
2727
const chrome2I18n: { [key: string]: timer.Locale } = {
28+
'zh': 'zh_CN',
2829
'zh-CN': "zh_CN",
2930
'zh-TW': "zh_TW",
3031
'en': 'en',
@@ -38,11 +39,14 @@ const chrome2I18n: { [key: string]: timer.Locale } = {
3839
'fr': 'fr',
3940
'fr-CA': 'fr',
4041
'fr-CH': 'fr',
42+
'ar': 'ar',
43+
'ru': 'ru',
44+
'tr': 'tr',
45+
'pl': 'pl',
4146
}
4247

4348
const translationChrome2I18n: { [key: string]: timer.TranslatingLocale } = {
4449
ko: 'ko',
45-
pl: 'pl',
4650
it: 'it',
4751
sv: 'sv',
4852
fi: 'fi',
@@ -69,7 +73,8 @@ export function chromeLocale2ExtensionLocale(chromeLocale: string): timer.Locale
6973
if (!chromeLocale) {
7074
return defaultLocale
7175
}
72-
return chrome2I18n[chromeLocale] || FEEDBACK_LOCALE
76+
const code2 = chromeLocale.substring(0, 2)
77+
return chrome2I18n[chromeLocale] ?? chrome2I18n[code2] ?? FEEDBACK_LOCALE
7378
}
7479

7580
/**
@@ -169,7 +174,6 @@ const findParamAndReplace = <Node,>(resultArr: I18nResultItem<Node>[], [key, val
169174
const temp: I18nResultItem<Node>[] = []
170175
resultArr.forEach((item) => {
171176
if (typeof item === 'string' && item.includes(paramPlacement)) {
172-
// 将 string 替换成具体的 VNode
173177
let splits: I18nResultItem<Node>[] = (item as string).split(paramPlacement)
174178
splits = splits.reduce<I18nResultItem<Node>[]>((left, right) => left.length ? left.concat(value, right) : left.concat(right), [])
175179
temp.push(...splits)

src/i18n/message/app/about-resource.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,5 +202,22 @@
202202
"rate": "Bizi desteklemek için 5 yıldız verin!",
203203
"feedback": "Fikirleriniz bizi daha iyi yapıyor!"
204204
}
205+
},
206+
"pl": {
207+
"label": {
208+
"name": "Nazwa",
209+
"version": "Obecna wersja",
210+
"website": "Oficjalna strona",
211+
"installation": "Strona instalacji",
212+
"thanks": "Podziękowania",
213+
"privacy": "Polityka prywatności",
214+
"license": "Licencja Open-source",
215+
"support": "Wsparcie techniczne"
216+
},
217+
"text": {
218+
"greet": "Lubisz to rozszerzenie?",
219+
"rate": "Oceń 5 gwiazdek, aby pomóc innym dowiedzieć się o tym~~",
220+
"feedback": "Zapraszamy do przesłania opinii i próśb o funkcje !!"
221+
}
205222
}
206223
}

src/i18n/message/app/analysis-resource.json

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,5 +366,36 @@
366366
"focusTitle": "Gezinme Zamanı Eğilimleri",
367367
"visitTitle": "Ziyaret Eğilimleri"
368368
}
369+
},
370+
"pl": {
371+
"target": {
372+
"site": "Strona",
373+
"cate": "Kategoria"
374+
},
375+
"common": {
376+
"focusTotal": "Całkowity czas przeglądania",
377+
"visitTotal": "Łącznie wizyt",
378+
"merged": "Złączone",
379+
"virtual": "Wirtualne",
380+
"hostPlaceholder": "Wyszukaj stronę do analizy",
381+
"emptyDesc": "Nie wybrano strony"
382+
},
383+
"summary": {
384+
"title": "Podsumowanie",
385+
"day": "Całkowita liczba dni aktywnych",
386+
"firstDay": "Pierwsza wizyta {value}",
387+
"calendarTitle": "Aktywność w ostatnich tygodniach"
388+
},
389+
"trend": {
390+
"title": "Trendy",
391+
"activeDay": "Aktywnych dni",
392+
"totalDay": "Okres dni",
393+
"maxFocus": "Maksymalny dzienny czas przeglądania",
394+
"averageFocus": "Średni dzienny czas przeglądania",
395+
"maxVisit": "Maksymalna dzienna ilość wizyt",
396+
"averageVisit": "Średnia dzienna ilość wizyt",
397+
"focusTitle": "Trendy czasu przeglądania",
398+
"visitTitle": "Trendy wizyt"
399+
}
369400
}
370401
}

src/i18n/message/app/dashboard-resource.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,5 +266,30 @@
266266
"focusScore": "Odaklanma",
267267
"focusScoreDesc": "Aynı web sitesinde sürekli gezinme toplam süresi ile ilgilidir. Hesaplama formülü için kaynak koduna bakın"
268268
}
269+
},
270+
"pl": {
271+
"heatMap": {
272+
"title0": "Przeglądano przez {hour} godzin w zeszłym roku",
273+
"title1": "Przeglądano mniej niż 1 godzinę w ubiegłym roku"
274+
},
275+
"topK": {
276+
"title": "TOP {k} najczęściej odwiedzanych stron w ostatnich {day} dniach"
277+
},
278+
"indicator": {
279+
"installedDays": "Zainstalowane przez {number} dni",
280+
"visitCount": "Odwiedzono {site} różnych stron, łącznie {visit} razy",
281+
"browsingTime": "Przeglądano przez {minute} minut",
282+
"mostUse": "Najchętniej przeglądano w godzinach od {start} do {end}"
283+
},
284+
"monthOnMonth": {
285+
"title": "Miesięczny trend czasu przeglądania"
286+
},
287+
"timeline": {
288+
"title": "Oś czasu ostatnich {n} dni",
289+
"busyScore": "Aktywność",
290+
"busyScoreDesc": "Powiązana z całkowitym czasem przeglądania i liczbą stron odwiedzonych na godzinę. Wzór znajduje się w kodzie źródłowym",
291+
"focusScore": "Skupienie",
292+
"focusScoreDesc": "Powiązane z całkowitym czasem ciągłego przebywania na tej samej stronie. Wzór znajduje się w kodzie źródłowym"
293+
}
269294
}
270295
}

src/i18n/message/app/data-manage-resource.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,5 +346,31 @@
346346
"deleteConfirm": "Toplam {count} kayıt filtrelenmiştir. Hepsini silmek istiyor musunuz?",
347347
"migrationAlert": "İçe aktarma ve dışa aktarma özelliğini kullanarak tarayıcılar arasında verinizi aktarın",
348348
"importError": "Yanlış dosya uzantısı"
349+
},
350+
"pl": {
351+
"totalMemoryAlert": "Przeglądarka udostępnia {size} MB do przechowywania lokalnych danych dla każdego rozszerzenia",
352+
"totalMemoryAlert1": "Nie można określić maksymalnej ilości pamięci udostępnianej przez przeglądarkę",
353+
"usedMemoryAlert": "{size} MB jest obecnie używanych",
354+
"operationAlert": "Możesz usunąć te nieważne dane, aby zmniejszyć zużycie pamięci",
355+
"filterItems": "Filtruj dane",
356+
"filterFocus": "Czas przeglądania w ciągu dnia wynosi od {start} do {end} sekund",
357+
"filterTime": "Liczba odwiedzin w ciągu dnia wynosi od {start} do {end}",
358+
"filterDate": "Zebrane pomiędzy {picker}",
359+
"importOther": {
360+
"step1": "Wybierz dane",
361+
"step2": "Potwierdź dane",
362+
"dataSource": "Źródło danych",
363+
"file": "Plik danych",
364+
"selectFileBtn": "Wybierz",
365+
"conflictTip": "Co zrobić, jeśli importowane dane są sprzeczne z lokalnymi danymi",
366+
"overwrite": "Nadpisz",
367+
"imported": "Zaimportowano",
368+
"local": "Lokalne",
369+
"fileNotSelected": "Nie wybrano pliku"
370+
},
371+
"paramError": "Sprawdź poprawność parametrów!",
372+
"deleteConfirm": "Wyfiltrowano w sumie {count} wpisów. Czy chcesz je usunąć?",
373+
"migrationAlert": "Przenieś dane między przeglądarkami za pomocą importu i eksportu",
374+
"importError": "Błędne rozszerzenie pliku"
349375
}
350376
}

src/i18n/message/app/habit-resource.json

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,5 +454,37 @@
454454
"siteCount": "Web sitesi sayısı"
455455
}
456456
}
457+
},
458+
"pl": {
459+
"common": {
460+
"focusAverage": "Średnio {value} dziennie"
461+
},
462+
"period": {
463+
"busiest": "Najbardziej aktywny czas dnia",
464+
"idle": "Najdłuższy czas bezczynności",
465+
"chartType": {
466+
"average": "Średnia dzienna",
467+
"trend": "Trend"
468+
},
469+
"sizes": {
470+
"fifteen": "Co 15 minut",
471+
"halfHour": "Co pół godziny",
472+
"hour": "Co godzinę",
473+
"twoHour": "Co dwie godziny"
474+
}
475+
},
476+
"site": {
477+
"histogramTitle": "TOP {n} najczęściej odwiedzanych",
478+
"exclusiveToday": "Dzisiejsze dane nie są uwzględniane w średniej",
479+
"countTotal": "Całkowita liczba wizyt/stron",
480+
"distribution": {
481+
"aveTime": "Średni dzienny czas przeglądania",
482+
"aveVisit": "Średnia dzienna liczba odwiedzin"
483+
},
484+
"trend": {
485+
"title": "Dzienne trendy",
486+
"siteCount": "Liczba stron"
487+
}
488+
}
457489
}
458490
}

src/i18n/message/app/help-us-resource.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,5 +130,16 @@
130130
"button": "Crowdin'e git",
131131
"loading": "Çevirinin ilerleyişi kontrol ediliyor...",
132132
"contributors": "Katkıda Bulunanlar"
133+
},
134+
"pl": {
135+
"title": "Możesz pomóc w ulepszaniu tłumaczeń tego rozszerzenia!",
136+
"alert": {
137+
"l1": "Ze względu na umiejętności językowe autora, rozszerzenie domyślnie obsługuje jedynie język chiński uproszczony i angielski, natomiast pozostałe języki są albo nieobsługiwane, albo przetłumaczone maszynowo.",
138+
"l2": "W celu zapewnienia lepszego doświadczenia użytkownikom hostuję pliki pliki do przetłumaczenia na platformie Crowdin. Crowdin to system zarządzania tłumaczeniami, który jest darmowy dla projektów open source.",
139+
"l3": "Jeżeli uważasz, że to rozszerzenie jest dla Ciebie przydatne i chciałbyś poprawić jego tłumaczenie, kliknij przycisk poniżej, aby przejść do strony głównej projektu na Crowdin."
140+
},
141+
"button": "Przejdź do Crowdin",
142+
"loading": "Sprawdzanie postępu tłumaczenia...",
143+
"contributors": "Lista współtwórców"
133144
}
134145
}

0 commit comments

Comments
 (0)