diff --git a/web/src/assets/locales/en.json b/web/src/assets/locales/en.json index 6863fcaf4..7f50391e2 100644 --- a/web/src/assets/locales/en.json +++ b/web/src/assets/locales/en.json @@ -54,7 +54,7 @@ "pipeline_path": { "path": "Pipeline path", "default": "By default: .woodpecker/*.yml -> .woodpecker.yml -> .drone.yml", - "desc": "Path to your pipeline config (for example my/path/). Folders should end with a /." + "desc": "Path to your pipeline config (for example my/path/). Folders should end with a /." }, "allow_pr": { diff --git a/web/src/assets/locales/lv.json b/web/src/assets/locales/lv.json new file mode 100644 index 000000000..89f28df7b --- /dev/null +++ b/web/src/assets/locales/lv.json @@ -0,0 +1,217 @@ +{ + "login": "Autorizēties", + "welcome": "Woodpecker", + "repos": "Repo", + "repositories": "Repozitoriji", + "docs": "Dokumentācija", + "logout": "Iziet", + "search": "Meklēt...", + "username": "Lietotāja vārds", + "password": "Parole", + "url": "URL", + "unknown_error": "Notika neparedzēta kļūda", + + "not_found": { + "not_found": "Ak vai, 404, vai nu mēs salauzām kaut ko, vai arī tika atvērta lapa, kas neeksistē :-/", + "back_home": "Uz sākumu" + }, + + "time": { + "tmpl": "YYYY. [gada] D. MMMM, HH:mm z", + "weeks_short": "ned.", + "days_short": "dien.", + "hours_short": "st.", + "min_short": "min.", + "sec_short": "sek.", + "not_started": "nav uzsākts" + }, + + "repo": { + "activity": "Aktivitāte", + "branches": "Atzari", + "add": "Pievienot repozitoriju", + "user_none": "Šai organizācijai/lietotājam pagaidām nav neviena projekta.", + "not_allowed": "Nav piekļuves šim repozitorijam", + + "enable": { + "reload": "Pārlādēt repozitorijus", + "enable": "Iespējot", + "enabled": "Jau ir iespējots", + "success": "Repozitorijs iespējots", + "list_reloaded": "Repozitoriju sarakts tika pārlādēts" + }, + + "settings": { + "settings": "Iestatījumi", + "not_allowed": "Nav piekļuves šī repozitorija iestatījumiem", + + "general": { + "general": "Pamata", + "project": "Projekta iestatījumi", + "save": "Saglabāt iestatījumus", + "success": "Repozitorija iestatījumi tika saglabāti", + + "pipeline_path": { + "path": "Konvejerdarba ceļš", + "default": "Pēc noklusējuma: .woodpecker/*.yml -> .woodpecker.yml -> .drone.yml", + "desc": "Ceļš uz konvejerdarba konfigurāciju, piemēram, my/path/. Mapēm jābeidzas ar /." + }, + + "allow_pr": { + "allow": "Atļaut izmaiņu pieprasījumiem", + "desc": "Ļaut izpildīt konvejerdarbus izmaiņu pieprasījumiem." + }, + + "protected": { + "protected": "Aizsargāts", + "desc": "Nepieciešams apstiprināt visus konvejerdarbus pirms tie tiek izpildīti." + }, + "trusted": { + "trusted": "Uzticams", + "desc": "Konvejerdarba konteineri tiks izpildīti ar paaugstinātām tiesībām, piemēram, piesaistīt servera direktorijas." + }, + "visibility": { + "visibility": "Projekta redzamība", + + "public": { + "public": "Publisks", + "desc": "Ikviens var piekļūt projektam, arī neautorizētie lietotāji." + }, + "private": { + "private": "Privāts", + "desc": "Tikai autorizēti lietotāji var piekļūt šim projektam." + }, + "internal": { + "internal": "Iekšējs", + "desc": "Tikai lietotāji, kam ir tiesības uz repozitoriju, var piekļūt šim projektam." + } + }, + + "timeout": { + "timeout": "Noildze", + "minutes": "minūtes" + }, + + "cancel_prev": { + "cancel": "Atcelt iepriekšējos konvejerdarbus", + "desc": "Iespējojot šo pazīmi, tiks atcelti visi iepriekšējie konvejerdarbi, kuriem sakrīt notikums un konteksts." + } + }, + + "secrets": { + "secrets": "Noslēpumi", + "desc": "Noslēpumus var padot individuāliem konvejerdarba soļiem izpildes laikā kā vides mainīgos.", + "none": "Pagaidām nav neviena noslēpuma.", + "add": "Pievienot noslēpumu", + "save": "Saglabāt noslēpumu", + "show": "Noslēpumu saraksts", + "name": "Nosaukums", + "value": "Vērtība", + "deleted": "Noslēpums dzēsts", + "created": "Noslēpums izveidots", + "saved": "Noslēpums saglabāts", + + "images": { + "images": "Pieejami šādiem attēliem", + "desc": "Ar komatiem atdalīts saraksts ar attēliem, kam šis noslēpums būs pieejams, atstājot tukšu, tas būs pieejams visiem attēliem." + }, + "events": { + "events": "Pieejams šādiem notikumiem", + "pr_warning": "Uzmanieties, jo šādā veidā tas būs pieejams visiem cilvēkiem, kas var iesūtīt izmaiņu pieprasījumu!" + } + }, + + "registries": { + "registries": "Reģistri", + "creds": "Reģistru autorizācijas dati", + "desc": "Reģistru autorizācijas dati var tikt izmantoti, lai izmantotu attēlos no privātiem reģistriem, konvjerdarbu soļos.", + "show": "Reģistru saraksts", + "add": "Pievienot reģistrus", + "none": "Pašlaik nav pievienots neviens reģistrs.", + "save": "Saglabāt reģistru", + "created": "Reģistra autorizācijas dati pievienoti", + "saved": "Reģistra autorizācijas dati saglabāti", + "deleted": "Reģistra autorizācijas dati dzēsti", + + "address": { + "address": "Adrese", + "placeholder": "Reģistra adrese, piemēram, docker.io" + } + }, + + "badge": { + "badge": "Nozīmīte", + "url_branch": "URL konktētam atzaram", + "markdown": "Markdown" + }, + + "actions": { + "actions": "Darbības", + + "repair": { + "repair": "Salabot repozitoriju", + "success": "Repozitorijs salabots" + }, + "disable": { + "disable": "Atspējot repozitoriju", + "success": "Repozitorijs atspējots" + }, + "delete": { + "delete": "Dzēst repozitoriju", + "confirm": "Visi repozitorija dati tiks neatgriezeniski dzēsti!\n\nVai vēlaties turpināt?", + "success": "Repozitorijs dzēsts" + } + } + }, + + "build": { + "created": "Izveidots", + "tasks": "Uzdevumi", + "config": "Konfigurācija", + "files": "Izmainītie faili ({files})", + "no_files": "Neviens fails nav mainīts.", + "execution_error": "Uzdevuma izpildes kļūda", + "no_pipelines": "Neviens konvejerdarbs vēl nav uzsākts.", + "no_pipeline_steps": "Konvejerdarbam nav neviena soļa!", + "step_not_started": "Šis solis vēl nav uzsākts.", + "pipelines_for": "Konvejerdarbi atzaram \"{branch}\"", + "exit_code": "iziešanas kods {exitCode}", + "loading": "Notiek ielāde...", + "pipeline": "Konvejerdarbs #{buildId}", + + "actions": { + "cancel": "Atcelt", + "restart": "Pārstartēt", + "canceled": "Šis solis tika atcelts.", + "cancel_success": "Konvejerdarbs atcelts", + "restart_success": "Konvejerdarbs pārstartēts" + }, + "protected": { + "awaits": "Šim konvejerdarbam ir nepieciešams apstiprinājums no atbildīgajām personām!", + "approve": "Apstiprināt", + "decline": "Noraidīt", + "declined": "Šis konvejerdarbs tika noraidīts!", + "approve_success": "Konvejerdarbs apstiprināts", + "decline_success": "Konvejerdarbs noraidīts" + }, + "event": { + "push": "Iesūtīšana", + "tag": "Tags", + "pr": "Izmaiņu pieprasījums", + "deploy": "Uzstādīšana" + } + } + }, + + "user": { + "oauth_error": "Neizdevās autorizēties, izmantojot, OAuth piegādātāju", + "internal_error": "Notikusi sistēmas iekšējā kļūda", + "access_denied": "Jums nav tiesību autorizēties", + "token": "Personīgais talons", + "shell_setup": "Komandrindas iestatīšana", + "api_usage": "Piemērs API izmantošanai", + "cli_usage": "Piemērs komandrindas lietošanai", + "dl_cli": "Lejupielādēt komandrindas rīku", + "shell_setup_before": "izpildiet komandrindā sekojošas darbības" + } +} diff --git a/web/src/components/repo/settings/GeneralTab.vue b/web/src/components/repo/settings/GeneralTab.vue index be1cd25fd..79ea5d56d 100644 --- a/web/src/components/repo/settings/GeneralTab.vue +++ b/web/src/components/repo/settings/GeneralTab.vue @@ -27,12 +27,12 @@ diff --git a/web/src/compositions/useDate.ts b/web/src/compositions/useDate.ts index 68e68be4d..4feb36944 100644 --- a/web/src/compositions/useDate.ts +++ b/web/src/compositions/useDate.ts @@ -1,4 +1,5 @@ import 'dayjs/locale/en'; +import 'dayjs/locale/lv'; import dayjs from 'dayjs'; import advancedFormat from 'dayjs/plugin/advancedFormat'; @@ -6,10 +7,12 @@ import timezone from 'dayjs/plugin/timezone'; import utc from 'dayjs/plugin/utc'; import { useI18n } from 'vue-i18n'; +import { getUserLanguage } from '~/utils/locale'; + dayjs.extend(timezone); dayjs.extend(utc); dayjs.extend(advancedFormat); -dayjs.locale(navigator.language.split('-')[0]); +dayjs.locale(getUserLanguage()); export function useDate() { function toLocaleString(date: Date) { diff --git a/web/src/compositions/useI18n.ts b/web/src/compositions/useI18n.ts index 7e98daf6f..8bdee4f53 100644 --- a/web/src/compositions/useI18n.ts +++ b/web/src/compositions/useI18n.ts @@ -3,8 +3,10 @@ import messages from '@intlify/vite-plugin-vue-i18n/messages'; import { createI18n } from 'vue-i18n'; +import { getUserLanguage } from '~/utils/locale'; + export const i18n = createI18n({ - locale: navigator.language.split('-')[0], + locale: getUserLanguage(), legacy: false, globalInjection: true, fallbackLocale: 'en', diff --git a/web/src/utils/locale.ts b/web/src/utils/locale.ts new file mode 100644 index 000000000..ab2e802f0 --- /dev/null +++ b/web/src/utils/locale.ts @@ -0,0 +1,3 @@ +export function getUserLanguage(): string { + return navigator.language.split('-')[0]; +} diff --git a/web/src/utils/timeAgo.ts b/web/src/utils/timeAgo.ts index 40ef3f3be..6ca86b271 100644 --- a/web/src/utils/timeAgo.ts +++ b/web/src/utils/timeAgo.ts @@ -1,8 +1,12 @@ import TimeAgo from 'javascript-time-ago'; import en from 'javascript-time-ago/locale/en.json'; +import lv from 'javascript-time-ago/locale/lv.json'; + +import { getUserLanguage } from '~/utils/locale'; TimeAgo.addDefaultLocale(en); +TimeAgo.addLocale(lv); -const timeAgo = new TimeAgo(navigator.language); +const timeAgo = new TimeAgo(getUserLanguage()); export default timeAgo; diff --git a/web/src/views/Repos.vue b/web/src/views/Repos.vue index 95ddc639f..f637d136c 100644 --- a/web/src/views/Repos.vue +++ b/web/src/views/Repos.vue @@ -1,7 +1,7 @@