diff --git a/handlers/i18n.go b/handlers/i18n.go index db519e24..5cd48d1e 100644 --- a/handlers/i18n.go +++ b/handlers/i18n.go @@ -8,6 +8,7 @@ import ( "fmt" "io/fs" "net/http" + "slices" "strings" "time" @@ -17,10 +18,13 @@ import ( "zgo.at/goatcounter/v2" "zgo.at/guru" "zgo.at/z18n/msgfile" + "zgo.at/zdb" "zgo.at/zhttp" + "zgo.at/zhttp/mware" "zgo.at/zlog" "zgo.at/zstd/zfilepath" "zgo.at/zstd/zfs" + "zgo.at/zstd/ztest" ) type i18n struct { @@ -42,6 +46,49 @@ func (h i18n) mount(r chi.Router) { r.Post("/i18n", zhttp.Wrap(h.new)) r.Post("/i18n/set/{file}", zhttp.Wrap(h.set)) r.Post("/i18n/submit/{file}", zhttp.Wrap(h.submit)) + + a := r.With(mware.RequestLog(nil), requireAccess(goatcounter.AccessSuperuser)) + a.Get("/i18n/manage", zhttp.Wrap(h.manage)) +} + +func (h i18n) manage(w http.ResponseWriter, r *http.Request) error { + var str []string + err := zdb.Select(r.Context(), &str, `select value from store where key like 'i18n-%'`) + if err != nil { + return err + } + + all := make(goatcounter.OverrideTranslations, 0, len(str)) + for _, a := range str { + var aa goatcounter.OverrideTranslations + err := aa.Decode(a) + if err != nil { + return err + } + + for i, d := range aa { + t, err := d.File.TOML() + if err != nil { + return err + } + file, err := fs.ReadFile(goatcounter.Translations(r.Context()), d.Name) + aa[i].Diff = ztest.Diff(string(file), t) + if err != nil { + aa[i].Diff = fmt.Sprintf("%q doesn't exist", "i18n/"+d.Name) + } + aa[i].Diff = strings.ReplaceAll(aa[i].Diff, "-have ", "-cur ") + aa[i].Diff = strings.ReplaceAll(aa[i].Diff, "+want ", "+new ") + } + + all = append(all, aa...) + } + slices.SortFunc(all, func(a, b goatcounter.OverrideTranslation) int { return strings.Compare(b.Updated, a.Updated) }) + slices.SortFunc(all, func(a, b goatcounter.OverrideTranslation) int { return strings.Compare(a.Name, b.Name) }) + + return zhttp.Template(w, "i18n_manage.gohtml", struct { + Globals + Files goatcounter.OverrideTranslations + }{newGlobals(w, r), all}) } func (h i18n) list(w http.ResponseWriter, r *http.Request) error { diff --git a/i18n.go b/i18n.go index 68d369b9..e431f644 100644 --- a/i18n.go +++ b/i18n.go @@ -94,6 +94,7 @@ type OverrideTranslation struct { Name string `json:"name"` Updated string `json:"updated"` File msgfile.File `json:"file"` + Diff string `json:"diff"` } type OverrideTranslations []OverrideTranslation @@ -122,7 +123,7 @@ func (o OverrideTranslations) encode() (string, error) { return string(j), err } -func (o *OverrideTranslations) decode(data string) error { +func (o *OverrideTranslations) Decode(data string) error { var w wrap err := json.Unmarshal([]byte(data), &w) if err != nil { @@ -148,7 +149,6 @@ func (o *OverrideTranslations) decode(data string) error { return nil } -// Insert new. func (o *OverrideTranslations) Insert(ctx context.Context) error { t, err := o.encode() if err != nil { @@ -195,7 +195,7 @@ func (o *OverrideTranslations) Get(ctx context.Context, insert bool) error { return errors.Wrap(err, "OverrideTranslations.Get") } - err = o.decode(string(data)) + err = o.Decode(string(data)) if err != nil { return errors.Wrap(err, "OverrideTranslations.List") } diff --git a/i18n/de-DE.toml b/i18n/de-DE.toml index ea0b4b2a..d5587338 100644 --- a/i18n/de-DE.toml +++ b/i18n/de-DE.toml @@ -26,7 +26,7 @@ default = "löschen" ["button/delete-account"] - default = "Konto, alle Websites, alle Daten löschen" + default = "Konto, alle Websites und alle Daten löschen" ["button/delete-all"] default = "Ja, wirklich alles löschen!" diff --git a/i18n/fr-FR.toml b/i18n/fr-FR.toml index e1102191..a5bb581b 100644 --- a/i18n/fr-FR.toml +++ b/i18n/fr-FR.toml @@ -178,6 +178,9 @@ ["data-collect/help/size"] default = "Taille écran" +["data-collect/help/user-agent"] + default = 'En-tête "User-Agent" pour obtenir le nom et la version du navigateur et du système.' + ["data-collect/label/country"] default = "Pays" @@ -393,6 +396,7 @@ Martin default = "Pays" ["header/locations-for"] + default = "Emplacements pour: %(country)" ["header/mfa"] default = "Authentification multi-facteur" @@ -407,6 +411,7 @@ Martin default = "Nouveau" ["header/pagination-cursor"] + default = "Curseur de pagination" ["header/passwd-mfa"] default = "Mot de passe & MFA" @@ -459,7 +464,7 @@ Martin default = "Token" ["header/toprefs"] - default = "Principaux referrers" + default = "Principaux referers" ["header/tracking"] default = "Suivi" @@ -811,7 +816,7 @@ Nécessite un plan Personal Plus ou Business (vous êtes sur le plan \\"%(plan)\ default = "Code source" ["nav-dash/back"] - default = "avant" + default = "reculer" ["nav-dash/by-day"] default = "Vue par jour" @@ -835,7 +840,7 @@ Nécessite un plan Personal Plus ou Business (vous êtes sur le plan \\"%(plan)\ default = "Impossible d'utiliser la vue horaire pour une période de plus de 90 jours" ["nav-dash/forward"] - default = "après" + default = "avancer" ["nav-dash/half-year"] default = "semestre" @@ -934,7 +939,7 @@ Nécessite un plan Personal Plus ou Business (vous êtes sur le plan \\"%(plan)\ default = "Site ‘%(url)’ supprimé." ["notify/started-background-process"] - default = "Démarrage en arrière-plan ; le traitement complet peut prendre de 10 à 20 secondes." + default = "Démarré en arrière-plan. Le traitement peut prendre 10-20 secondes avant de terminer." ["notify/user-added"] default = "Utilisateur ‘%(email)’ ajouté." @@ -956,7 +961,7 @@ Nécessite un plan Personal Plus ou Business (vous êtes sur le plan \\"%(plan)\ default = "Autres erreurs" ["p/api-intro"] - default = "GoatCounter est livré avec une API limitée ; actuellement, vous pouvez compter les pages vues à partir de l'API, créer, supprimer et modifier des sites, et créer des exportations." + default = "GoatCounter inclut un API limité. Présentement, vous pouvez l'utiliser pour compter les pages vues, pour créer, supprimer et éditer vos sites, et pour exporter des données." ["p/change-code-request"] diff --git a/i18n/pl-PL.toml b/i18n/pl-PL.toml index be89c2e6..3f45f1df 100644 --- a/i18n/pl-PL.toml +++ b/i18n/pl-PL.toml @@ -86,7 +86,7 @@ default = "Zatwierdź" ["confirm/delete-user"] - default = "Usuń %(email)?" + default = "Usunąć %(email)?" ["dashboard/day-ago"] default = "%(n) dni temu" @@ -170,14 +170,17 @@ default = "Nagłówek Referer i parametr kampanii" ["data-collect/help/region"] - default = "Region, na przykład Texas, Bali, itd. Szczegóły różnią się w zależności od kraju." + default = "Region, na przykład Texas, Bali, itd. Poziom szczegółowości różnią się w zależności od kraju." ["data-collect/help/sessions"] - default = "Śledź pojedynczych odwiedzających do 8 godzin; jeśli wyłączysz tę funkcję, to ktoś wciskając np. F5, aby ponownie załadować stronę, zostanie policzony jako 2 odsłony zamiast 1" + default = "Grupuj odsłony pojedynczego odwiedzającego na przestrzeni 8 godzin; jeśli wyłączysz tę funkcję, to ktoś wciskając np. F5, aby ponownie załadować stronę, zostanie policzony jako 2 odsłony zamiast 1" ["data-collect/help/size"] default = "Rozmiar ekranu." +["data-collect/help/user-agent"] + default = "Nagłówek User-Agent do zapisywania nazwy i wersji przeglądarki oraz systemu." + ["data-collect/label/country"] default = "Kraj" @@ -342,7 +345,7 @@ Martin default = "Pulpit" ["header/data-collection"] - default = "Zbieranie danych" + default = "Zbierane dane" ["header/delete-account"] default = "Usuń konto" @@ -393,7 +396,7 @@ Martin default = "Kraje" ["header/locations-for"] - default = "Lokalizacje dla %(country)" + default = "%(country), regiony:" ["header/mfa"] default = "Uwierzytelnianie wieloskładnikowe" @@ -791,7 +794,7 @@ Weryfikacja odbywa się co 2 godziny. default = "Ustaw z przeglądarki" ["link/settings"] - default = "ustawienia" + default = "Ustawienia" ["link/show-more"] default = "Pokaż więcej" diff --git a/i18n/pt-BR.toml b/i18n/pt-BR.toml index 494facb7..2fa5f577 100644 --- a/i18n/pt-BR.toml +++ b/i18n/pt-BR.toml @@ -5,7 +5,7 @@ maintainers = [] ["button/add-new"] - default = "Adicionar novo" + default = "Adicionar" ["button/add-user"] default = "Adicionar novo usuário" @@ -26,22 +26,22 @@ default = "excluir" ["button/delete-account"] - default = "Excluir conta, todos os sites, e todos os dados" + default = "Excluir a conta, todos os sites e todos os dados" ["button/delete-all"] - default = "Sim, exclua todos eles!" + default = "Sim, pode excluir tudo!" ["button/delete-everything"] - default = "Sim, exclua tudo" + default = "Sim, excluir tudo" ["button/disable-mfa"] - default = "Desabilitar MFA" + default = "Desativar MFA" ["button/edit"] default = "Editar" ["button/enable-mfa"] - default = "Habilitar MFA" + default = "Ativar MFA" ["button/forgot-password"] default = "Esqueceu a senha?" @@ -91,6 +91,7 @@ ["dashboard/day-ago"] ["dashboard/future"] + default = "futuro" ["dashboard/month-ago"] @@ -101,6 +102,7 @@ default = "Páginas" ["dashboard/pages/num-visits"] + default = "%(num-visits) de %(total-visits) de acessos exibidos" ["dashboard/pages/pageviews"] default = "Visualizações de página" @@ -112,6 +114,7 @@ default = "Estatísticas" ["dashboard/pages/stats-tooltip"] + default = "Cada barra representa 1/12 do período de tempo selecionado" ["dashboard/pages/title"] default = "Título" @@ -120,17 +123,19 @@ default = "Visualizações" ["dashboard/pages/visits"] - default = "Visitas" + default = "Acessos" ["dashboard/today"] default = "Hoje" ["dashboard/tooltip-event"] + default = "%(unique) cliques; %(clicks) total de cliques" ["dashboard/totals/header"] default = "Totais" ["dashboard/totals/num-visits"] + default = "%(num-visits) acessos" ["dashboard/week-ago"] @@ -138,16 +143,22 @@ default = "Ontem" ["data-collect/help/country"] + default = "Nome do país - por exemplo, Bélgica, Indonésia etc." ["data-collect/help/language"] + default = "Idiomas aceitos em Accept-Language" ["data-collect/help/referrer"] ["data-collect/help/region"] + default = "Região - por exemplo, Texas, Bali etc. Os detalhes podem variar conforme o país." ["data-collect/help/sessions"] ["data-collect/help/size"] + default = "Tamanho da tela." + +["data-collect/help/user-agent"] ["data-collect/label/country"] default = "País" @@ -168,8 +179,10 @@ default = "Tamanho" ["data-collect/label/user-agent"] + default = "User-Agent" ["datepicker/keyboard"] + default = "Use as teclas de seta para selecionar uma data" ["datepicker/month-next"] default = "Próximo mês" @@ -181,10 +194,23 @@ default = "Olá," ["email/password-reset"] + default = """ +Alguém (esperamos que tenha sido você) solicitou uma redefinição da senha da sua conta do GoatCounter. + +Você pode fazer isso aqui: +%(link) +""" ["email/reset-user-email-subject"] + default = "Redefinição de senha para %(domain)" ["email/signature"] + default = """ +Se você tiver algum problema, perguntas, comentários ou algo mais para me dizer, basta responder a este e-mail. (Em inglês, se possível.) + +Atenciosamente, +Martin +""" ["error/account-has-stripe-subscription"] @@ -199,42 +225,51 @@ ["error/date-past"] ["error/delete-main-site"] + default = "Não é possível excluir o site principal" ["error/export-expired"] ["error/incorrect-password"] + default = "A senha atual está incorreta." ["error/invalid-end-date"] + default = "Data final inválida: %(date)" ["error/invalid-start-date"] + default = "Data inicial inválida: %(date)" ["error/load-url"] + default = "Não foi possível carregar %(url): %(error)" ["error/login-invalid"] ["error/login-no-password"] ["error/login-not-found"] + default = "Usuário %(e-mail) não encontrado" ["error/login-token-expired"] ["error/login-wrong-pwd"] - default = "Senha errada para %(email)" + default = "Senha incorreta para %(email)" ["error/not-found"] default = "Não encontrado" ["error/password-does-not-match"] - default = "Confirmação de senha não combina." + default = "A confirmação da senha não corresponde." ["error/payment-cancelled"] default = "Pagamento cancelado." ["error/reset-user-no-account"] + default = "Não é uma conta neste site: %(email)" ["error/token-already-used"] + default = "Token desconhecido; talvez já tenha sido usado?" ["error/wrong-verification-key"] + default = "Chave de verificação incorreta." ["event"] default = "evento" @@ -242,19 +277,19 @@ ["forgot-domain-help"] ["header/access"] - default = "Acesso" + default = "Nível de acesso" ["header/add-new-user"] - default = "Adiciona um novo usuário" + default = "Adicionar novo usuário" ["header/allow-access"] - default = "Permitir acesso" + default = "Nível de acesso" ["header/api"] default = "API" ["header/api-tokens"] - default = "Tokens de API" + default = "Tokens da API" ["header/browsers"] default = "Navegadores" @@ -278,6 +313,7 @@ default = "Painel" ["header/data-collection"] + default = "Coleta de dados" ["header/delete-account"] default = "Excluir conta" @@ -286,7 +322,7 @@ default = "Domínio" ["header/domain-settings"] - default = "Configurações de domínio" + default = "Configurações do domínio" ["header/edit-user"] default = "Editar usuário %(email)" @@ -310,6 +346,7 @@ default = "Esqueci a senha" ["header/hash"] + default = "Hash" ["header/import"] default = "Importar" @@ -343,7 +380,7 @@ ["header/pagination-cursor"] ["header/passwd-mfa"] - default = "Senha & MFA" + default = "Senha e MFA" ["header/path"] default = "Caminho" @@ -410,48 +447,68 @@ default = "Usuários" ["help/allow-visitor-counts"] + default = "Consulte %[a documentação] para mais detalhes." ["help/campaign-parameters"] ["help/cfg-dashboard"] ["help/code-access"] + default = "Você acessará o seu site em https://[meu-código].%(domain)." ["help/custom-domain"] + default = 'Domínio personalizado, por exemplo “estatísticas.exemplo.com.br”. Observação: isto não impedirá que a maioria dos bloqueadores de anúncios bloqueie o GoatCounter. É apenas um "domínio bonitinho".' ["help/custom-domain-cname"] + default = "Defina um registro CNAME para %(domain) - %[%docs instruções detalhadas]." ["help/custom-domain-error"] + default = """ +%[%error Ainda não verificado]; defina um registro CNAME para %(domain) – %[%docs instruções detalhadas]. +A verificação é executada a cada 2 horas. +""" ["help/custom-domain-plan"] + default = "Requer o plano Personal Plus ou Business (você está no plano %(plan); consulte %[%link faturamento])." ["help/custom-domain-verified"] + default = "Domínio verificado e configurado (observação: pode levar até uma hora para que o certificado funcione)." ["help/data-retention"] ["help/domain-access"] ["help/drag-reorder"] + default = "Arraste para reordenar" ["help/for-the-following-countries"] ["help/goatcounter-domain"] + default = 'O domínio de sua instalação do GoatCounter, por exemplo, "estatísticas.exemplo.com.br".' ["help/ignore-ips"] + default = "Nunca processar solicitações vindas desses endereços de IP (separados por vírgulas). Apenas correspondências exatas. %[Clique aqui para adicionar o seu IP atual]." ["help/ignore-ips-2"] + default = "... ou %[desative este navegador] (clique novamente para ativar)." ["help/new-user-email"] + default = "E-mail para fazer login." ["help/new-user-email-confirm"] + default = "E-mail para fazer login; deve ser confirmado." ["help/no-undo"] + default = "Esta ação é irreversível e não pode ser desfeita!" ["help/password-edit"] + default = "Deixe este campo em branco para manter inalterado." ["help/password-new-user"] + default = "Deixe em branco para enviar um e-mail de redefinição de senha." ["help/public"] + default = "Define quem pode acessar o painel." ["help/rm-hits"] @@ -460,42 +517,60 @@ ["help/turing-test"] ["help/your-email"] + default = "Você precisará verificar novamente o novo endereço caso o altere." ["label/24-hour-clock"] + default = "Relógio de 24 horas (13:00)" ["label/add-new"] + default = "Adicionar" ["label/all-sites"] + default = "Todos os sites" ["label/allow-admin-access"] + default = "Permitir acesso de administrador" ["label/allow-visitor-counts"] + default = "Permitir a inclusão de contagem de visitantes no seu site" ["label/browser-stats"] + default = "Estatísticas de navegadores" ["label/campaign-parameters"] ["label/change-code"] + default = "Você acessará a sua conta em https://[meu-código].%(domain) - %[%link alterar]." ["label/clear-pageviews"] + default = "Limpar todas as visualizações de página existentes." ["label/code"] + default = "Código" ["label/collected-since"] + default = "Coletado desde 2 de dezembro de 2021" ["label/csv-compress-format"] + default = "Arquivo CSV; pode ser compactado com gzip" ["label/current-passwd"] + default = "Senha atual" ["label/custom-domain"] + default = "Domínio personalizado" ["label/dashboard-public"] + default = "Visibilidade do painel" ["label/data-retention"] + default = "Retenção de dados em dias" ["label/date-fmt"] + default = "Formato da data" ["label/delete-account-confirmation"] + default = "Tem certeza de que deseja excluir a sua conta?" ["label/delete-account-contact"] @@ -506,96 +581,135 @@ ["label/delete-account-reason-placeholder"] ["label/email"] + default = "E-mail" ["label/email-address"] + default = "Endereço de e-mail" ["label/for-following-countries"] + default = "Restringir a apenas os seguintes países:" ["label/goatcounter-domain"] + default = "Domínio do GoatCounter" ["label/ignore-ips"] + default = "IPs ignorados" ["label/lang"] + default = "Idioma" ["label/language-stats"] + default = "Estatísticas de idioma" ["label/loc-stats"] + default = "Estatísticas de localização" ["label/mark-current"] + default = "(atual)" ["label/match-title"] ["label/mfa-token"] + default = "Token MFA" ["label/new-code"] + default = "Novo código" ["label/new-password"] + default = "Nova senha" ["label/new-password-confirm"] + default = "Nova senha (confirmação)" ["label/pagination-cursor"] ["label/password"] + default = "Senha" ["label/paths"] ["label/public-anyone"] + default = "Todos" ["label/public-private"] + default = "Apenas usuários com conta" ["label/public-token"] + default = "Usuários com conta ou com um segredo" ["label/secret"] + default = "Segredo" ["label/secret-access"] + default = "URL de acesso:" ["label/secret-token"] + default = "Segredo" ["label/set-default"] + default = "Também definir como padrão para novos usuários e para a exibição pública (se ativada)." ["label/size-desktop"] + default = "Monitores de computador" ["label/size-desktophd"] + default = "Monitores de computador maiores que HD" ["label/size-largephones"] + default = "Telefones grandes e tablets pequenos" ["label/size-phones"] + default = "Telefones" ["label/size-stats"] ["label/size-tablets"] + default = "Tablets e laptops pequenos" ["label/system-stats"] ["label/thousand-separator"] + default = "Separador de milhares" ["label/timezone"] + default = "Fuso horário" ["label/topref"] ["label/total-pageviews"] + default = "Total de visualizações de páginas do site" ["label/turing-test"] ["label/verifictation-token"] + default = "Token de verificação" ["label/week-start"] + default = "A semana começa no domingo" ["label/your-email"] + default = "Seu e-mail" ["label/your-site"] + default = "Seu site" ["link/add-translation"] + default = "Adicionar ou atualizar traduções" ["link/api"] + default = "API" ["link/api-docs"] + default = "Documentação da API" ["link/billing"] + default = "Cobrança" ["link/dashboard"] + default = "Painel" ["link/generate-random"] + default = "Gerar segredo aleatório." ["link/goto-path"] default = "Ir para %(path)" @@ -604,7 +718,7 @@ default = "Importar" ["link/passwd-mfa"] - default = "Senha & MFA" + default = "Senha e MFA" ["link/preferences"] default = "Preferências" @@ -616,12 +730,13 @@ default = "Excluir visualizações de página" ["link/set-from-browser"] + default = "Definir a partir do navegador" ["link/settings"] default = "configurações" ["link/show-more"] - default = "Mostrar mais" + default = "Exibir mais" ["link/sites"] default = "Sites" @@ -642,7 +757,7 @@ default = "Início" ["nav-bot/src"] - default = "Código fonte" + default = "Código-fonte" ["nav-dash/back"] default = "atrás" @@ -657,12 +772,16 @@ default = "dia" ["nav-dash/end-date"] + default = "Final do intervalo de datas a ser exibido." ["nav-dash/filter"] + default = "Filtrar caminhos" ["nav-dash/filter-tooltip"] + default = "Filtrar a lista de caminhos sem diferenciação entre maiúsculas e minúsculas no título e no caminho." ["nav-dash/forced-daily"] + default = "A visualização por hora não pode ser usada em um período de tempo superior a 90 dias." ["nav-dash/forward"] default = "adiante" @@ -680,6 +799,7 @@ default = "trimestre" ["nav-dash/start-date"] + default = "Início do período a ser exibido" ["nav-dash/week"] default = "semana" @@ -699,6 +819,7 @@ ["notify/disabled-multi-factor-auth"] ["notify/email-already-verified"] + default = "%(email) já foi verificado." ["notify/export-started-in-background"] @@ -711,20 +832,25 @@ ["notify/need-business-plan-custom-domain"] ["notify/need-email-verification-for-api"] + default = "É necessário verificar o seu endereço de e-mail antes de usar a API." ["notify/no-user-for-token"] ["notify/not-found"] + default = "Não encontrado" ["notify/password-changed"] + default = "Senha alterada." ["notify/payment-processed"] + default = "O pagamento foi processado com sucesso!" ["notify/payment-processing"] ["notify/reset-to-default"] ["notify/reset-user-sent"] + default = "E-mail enviado para %(e-mail)" ["notify/restored-previously-deleted-site"] @@ -732,20 +858,27 @@ default = "Salvo!" ["notify/sent-to-email"] + default = "Enviado para %(e-mail)." ["notify/settings-copied-to-site"] + default = "Configurações copiadas para os sites selecionados." ["notify/site-added"] + default = 'Site "%(url)" adicionado.' ["notify/site-removed"] + default = 'Site "%(url)" removido.' ["notify/started-background-process"] ["notify/user-added"] + default = 'Usuário "%(email)" adicionado.' ["notify/user-removed"] + default = 'Usuário "%(email)" removido.' ["notify/users-edited"] + default = 'Usuário "%(email)" editado.' ["p/add-goatcounter-to-multiple-websites"] @@ -779,6 +912,7 @@ ["p/have-mfa"] ["p/last-user"] + default = "Não é possível excluir ou editar o único administrador" ["p/no-data"] @@ -789,6 +923,7 @@ ["p/notify-pagination-cursor"] ["p/notify-site-deletion"] + default = "%(number) sites serão excluídos" ["p/remove-site-confirm"] @@ -807,8 +942,10 @@ ["p/setting-recovery-disabled-information"] ["p/settings-all-sites"] + default = "Estas configurações serão aplicadas a todos os sites aos quais você tem acesso." ["p/site-domain-link-to-page"] + default = 'O domínio do seu site, por exemplo, "www.exemplo.com.br", usado para criar links na página de visão geral.' ["p/text-data-retention"] @@ -819,18 +956,25 @@ ["restricted-admin-access"] ["scale-y"] + default = "Dimensionar o eixo Y para o máximo" ["top-nav/back"] + default = "Voltar" ["top-nav/dashboard"] + default = "Painel" ["top-nav/need-js"] + default = "O GoatCounter requer JavaScript ativado para funcionar; permita a execução de JavaScript no domínio %(domain)." ["top-nav/public-link"] + default = "Análises para %(domain)." ["top-nav/public-time"] + default = "A exibição pública é atualizada uma vez por hora; todos os horários estão em %(timezone-name) (%(timezone-offset))." ["top-nav/settings"] + default = "Configurações" ["top-nav/sign-in"] default = "Entrar" @@ -854,62 +998,87 @@ default = "(desconhecido)" ["validate/bool"] + default = "deve ser um booleano" ["validate/color"] + default = "deve ser um código de cor válido" ["validate/contains"] + default = "não pode conter os caracteres %s" ["validate/date"] + default = 'deve ser uma data como "%s"' ["validate/domain"] + default = "deve ser um domínio válido" ["validate/email"] + default = "deve ser um endereço de e-mail válido" ["validate/exclude"] + default = 'não pode ser "%s"' ["validate/hostname"] + default = "deve ser um nome de host válido" ["validate/include"] + default = 'deve ser um de "%s"' ["validate/int"] + default = "deve ser um número inteiro" ["validate/ip"] + default = "deve ser um endereço IPv4 ou IPv6 válido" ["validate/ipv4"] + default = "deve ser um endereço IPv4 válido" ["validate/len-longer"] + default = "deve ser maior que %d caracteres" ["validate/len-shorter"] + default = "deve ser menor que %d caracteres" ["validate/phone"] + default = "deve ser um número de telefone válido" ["validate/range-higher"] + default = "deve ser %d ou maior" ["validate/range-lower"] + default = "deve ser %d ou menor" ["validate/required"] + default = "deve ser definido" ["validate/url"] + default = "deve ser um url válido" ["validate/utf8"] - default = "Precisa ser UTF-8" + default = "deve ser UTF-8" ["widget-setting/help/align"] + default = "Adicionar margem à esquerda para alinhar com os gráficos das páginas" ["widget-setting/help/chart-style"] + default = "Como o gráfico deve ser desenhado" ["widget-setting/help/no-events"] + default = "Não incluir eventos na visão geral" ["widget-setting/help/page-size"] + default = "Total de páginas a serem carregadas" ["widget-setting/help/ref-page-size"] ["widget-setting/help/regions"] + default = "Exibir as regiões correspondentes a este país em vez de uma lista de países" ["widget-setting/label/align"] + default = "Alinhar com as páginas" ["widget-setting/label/chart-style"] - default = "Estilo de gráfico" + default = "Estilo do gráfico" ["widget-setting/label/no-events"] default = "Desconsiderar eventos" @@ -921,7 +1090,7 @@ default = "Tamanho da página do indicador" ["widget-setting/label/regions"] - default = "Mostrar regiões" + default = "Exibir regiões" ["widget-settings/bar-chart"] default = "Gráfico de barra" diff --git a/i18n/ru-RU.toml b/i18n/ru-RU.toml index 2664cbb9..45ca9628 100644 --- a/i18n/ru-RU.toml +++ b/i18n/ru-RU.toml @@ -178,6 +178,9 @@ ["data-collect/help/size"] default = "Размер экрана." +["data-collect/help/user-agent"] + default = "Агент пользователя для получения браузера, названия и версии операционной системы." + ["data-collect/label/country"] default = "Страна" diff --git a/i18n/zh-CN.toml b/i18n/zh-CN.toml new file mode 100644 index 00000000..6229a47e --- /dev/null +++ b/i18n/zh-CN.toml @@ -0,0 +1,1227 @@ +[__meta__] + comments = "|user|" + generated = 2021-11-29T19:38:18Z + language = "zh-CN" + +["button/add-new"] + default = "新建" + +["button/add-user"] + default = "新建用户" + +["button/cfg-dashboard"] + default = "配置仪表盘布局" + +["button/change"] + default = "更改" + +["button/change-passwd"] + default = "更改密码" + +["button/copy"] + default = "复制" + +["button/delete"] + default = "删除" + +["button/delete-account"] + default = "删除账号、所有站点与数据" + +["button/delete-all"] + default = "确定,删除全部" + +["button/delete-everything"] + default = "确定,删除每项" + +["button/disable-mfa"] + default = "关闭多重身份验证" + +["button/edit"] + default = "编辑" + +["button/enable-mfa"] + default = "启用多重身份验证" + +["button/forgot-password"] + default = "忘记了密码?" + +["button/remove"] + default = "删除" + +["button/request-reset"] + default = "请求密码重置" + +["button/resend-email"] + default = "重发邮件" + +["button/reset-defaults"] + default = "重置为默认值" + +["button/reset-password"] + default = "重置密码" + +["button/rm-hits"] + default = "删除页面浏览记录" + +["button/save"] + default = "保存" + +["button/save-default-view"] + default = "保存默认视图" + +["button/send-login-url"] + default = "发送登录 URL" + +["button/sign-in"] + default = "登录" + +["button/start-export"] + default = "开始导出" + +["button/start-import"] + default = "开始导入" + +["button/submit"] + default = "提交" + +["confirm/delete-user"] + default = "删除 %(email)?" + +["dashboard/day-ago"] + default = "%(n) 天前" + zero = "零天前" + one = "一天前" + two = "两天前" + few = "几天前" + many = "许多天前" + +["dashboard/future"] + default = "将来" + +["dashboard/month-ago"] + default = "%(n) 个月前" + zero = "零月前" + one = "一个月前" + two = "两个月前" + few = "几个月前" + many = "许多个月前" + +["dashboard/nothing-to-display"] + default = "没有数据可展示" + +["dashboard/pages/header"] + default = "路径总览" + +["dashboard/pages/num-visits"] + default = "显示了 %(total-visits) 次访问中的 %(num-visits) 次" + +["dashboard/pages/pageviews"] + default = "页面浏览记录" + +["dashboard/pages/path"] + default = "路径" + +["dashboard/pages/stats"] + default = "统计" + +["dashboard/pages/stats-tooltip"] + default = "每一条代表所选时间范围的 1/12" + +["dashboard/pages/title"] + default = "标题" + +["dashboard/pages/views"] + default = "查看" + +["dashboard/pages/visits"] + default = "访问" + +["dashboard/today"] + default = "今天" + +["dashboard/tooltip-event"] + default = "%(unique) 次点击;%(clicks) 次总点击" + +["dashboard/totals/header"] + default = "页面浏览总记录" + +["dashboard/totals/num-visits"] + default = "%(num-visits) 次访问" + +["dashboard/week-ago"] + default = "%(n) 周前" + zero = "零周前" + one = "一周前" + two = "两周前" + few = "几周前" + many = "许多周前" + +["dashboard/yesterday"] + default = "昨天" + +["data-collect/help/country"] + default = "国家名称,例如 Belgium、Indonesia。" + +["data-collect/help/language"] + default = "accept-language 标识的受支持的语言。" + +["data-collect/help/referrer"] + default = "referer 头与 campaign 参数。" + +["data-collect/help/region"] + default = "区域,例如 Texas、Bali。此项具体依国家不同而不同。" + +["data-collect/help/sessions"] + default = "跟踪 8 小时内的独立访问者;关闭此项后,同一人刷新页面将显示 2 次页面浏览而不是 1 次。" + +["data-collect/help/size"] + default = "屏幕大小。" + +["data-collect/label/country"] + default = "国家" + +["data-collect/label/language"] + default = "语言" + +["data-collect/label/referrer"] + default = "来源" + +["data-collect/label/region"] + default = "区域" + +["data-collect/label/sessions"] + default = "会话" + +["data-collect/label/size"] + default = "屏幕大小" + +["data-collect/label/user-agent"] + default = "用户代理字符串" + +["datepicker/keyboard"] + default = "使用方向键选择日期" + +["datepicker/month-next"] + default = "下个月" + +["datepicker/month-prev"] + default = "上个月" + +["email/header"] + default = "你好," + +["email/password-reset"] + default = """ +有人(希望是你)在你的 GoatCounter 账号上申请重置密码。 + +在此重置密码: +%(link) +""" + +["email/reset-user-email-subject"] + default = "%(domain) 的密码重置" + +["email/signature"] + default = """ +遇到问题或有任何疑问等,只需回复此邮件。 + +Cheers, +Martin +""" + +["error/account-has-stripe-subscription"] + default = "此账号仍有 Stripe 订阅;请在账单页面取消它。" + +["error/address-exists"] + default = "%(addr) 已经存在" + +["error/could-not-read"] + default = "无法读取 gzip:%(err)" + +["error/date-future"] + default = "那将去到没有记录的将来。" + +["error/date-mismatch"] + default = "结束日期早于起始日期" + +["error/date-past"] + default = "那将回到站点开始记录之前;GoatCounter 还没那么厉害。;-)" + +["error/delete-main-site"] + default = "无法删除主站" + +["error/export-expired"] + default = "暂无导出或导出已过期。" + +["error/incorrect-password"] + default = "当前密码错误。" + +["error/invalid-end-date"] + default = "无效的结束日期:%(date)" + +["error/invalid-start-date"] + default = "无效的起始日期:%(date)" + +["error/load-url"] + default = "无法加载 %(url):%(error)" + +["error/login-invalid"] + default = "无效的登录" + +["error/login-no-password"] + default = "%(email) 没有设置密码;请重置密码。" + +["error/login-not-found"] + default = "未找到用户 %(email)" + +["error/login-token-expired"] + default = "无法查找到对应给定令牌的用户;或许令牌已过期或已被使用?" + +["error/login-wrong-pwd"] + default = "%(email) 的密码错误" + +["error/not-found"] + default = "未找到" + +["error/password-does-not-match"] + default = "密码不匹配。" + +["error/payment-cancelled"] + default = "支付取消。" + +["error/reset-user-no-account"] + default = "不存在账号 %(email)" + +["error/token-already-used"] + default = "未知令牌;或许它已被使用?" + +["error/wrong-verification-key"] + default = "验证密钥错误。" + +["event"] + default = "事件" + +["forgot-domain-help"] + default = "发送与邮箱地址关联的所有域名的列表" + +["header/access"] + default = "权限" + +["header/add-new-user"] + default = "新建用户" + +["header/allow-access"] + default = "权限等级" + +["header/api"] + default = "API" + +["header/api-tokens"] + default = "API 令牌" + +["header/browsers"] + default = "浏览器统计" + +["header/change-code"] + default = "更改站点代码" + +["header/change-passwd"] + default = "更改密码" + +["header/code"] + default = "代码" + +["header/copy-settings"] + default = "复制设置" + +["header/created-at"] + default = "创建于" + +["header/dashboard"] + default = "仪表盘" + +["header/data-collection"] + default = "数据收集" + +["header/delete-account"] + default = "删除账号" + +["header/domain"] + default = "域名" + +["header/domain-settings"] + default = "域名设置" + +["header/edit-user"] + default = "编辑用户 %(email)" + +["header/email"] + default = "邮箱" + +["header/export"] + default = "导出" + +["header/export-or-import"] + default = "导出/导入" + +["header/finished"] + default = "完成于" + +["header/forgot-domain"] + default = "忘记了域名" + +["header/forgot-password"] + default = "忘记了密码" + +["header/hash"] + default = "哈希" + +["header/import"] + default = "导入" + +["header/l10n"] + default = "本地化" + +["header/languages"] + default = "语言统计" + +["header/last-10-exports"] + default = "最后的 10 个导出" + +["header/locations"] + default = "位置统计" + +["header/locations-for"] + default = "%(country) 的位置" + +["header/mfa"] + default = "多重身份认证" + +["header/n-hits"] + default = "点击量" + +["header/name"] + default = "名称" + +["header/new"] + default = "新建" + +["header/pagination-cursor"] + default = "分页游标" + +["header/passwd-mfa"] + default = "密码与多重身份验证" + +["header/path"] + default = "路径" + +["header/permissions"] + default = "许可" + +["header/preferences"] + default = "首选项" + +["header/reset-password"] + default = "为 %(site-name) 的 %(email) 重置密码" + +["header/rm-hits"] + default = "删除页面浏览记录" + +["header/settings"] + default = "设置" + +["header/sign-in-at"] + default = "Sign in at %(name)" + +["header/site-settings"] + default = "站点设置" + +["header/sites"] + default = "站点" + +["header/size"] + default = "大小" + +["header/sizes"] + default = "屏幕大小统计" + +["header/start-pagination-cursor"] + default = "起始于分页游标" + +["header/started"] + default = "开始于" + +["header/systems"] + default = "系统统计" + +["header/title"] + default = "标题" + +["header/token"] + default = "令牌" + +["header/toprefs"] + default = "排名靠前的来源" + +["header/tracking"] + default = "跟踪" + +["header/updated"] + default = "更新" + +["header/user-info"] + default = "用户信息" + +["header/user-information"] + default = "用户信息" + +["header/users"] + default = "用户" + +["help/allow-visitor-counts"] + default = "查看%[文档]了解如何使用。" + +["help/campaign-parameters"] + default = "算作 campaign 的参数列表;此值将被设为来源,将覆盖任何 referer 头。" + +["help/cfg-dashboard"] + default = "更改仪表盘显示的内容与它们的顺序。" + +["help/code-access"] + default = "你可以在 https://[代码].%(domain) 访问站点。" + +["help/custom-domain"] + default = """ +自定义域名,例如“stats.example.com”。 +注意: 自定义域名仅仅是看起来不错,它无法阻止多数广告拦截器拦截 GoatCounter。 +""" + +["help/custom-domain-cname"] + default = "添加一条指向 %(domain) 的 CNAME 记录——%[详情见 %docs]。" + +["help/custom-domain-error"] + default = """ +%[%error 暂未完成验证];添加一条指向 %(domain) 的 CNAME 记录——%[详情见 %docs]。 +验证每隔 2 小时运行 1 次。 +""" + +["help/custom-domain-plan"] + default = "需要个人升级版或企业版套餐(你正在使用%(plan)套餐;请查阅%[%link 账单])。" + +["help/custom-domain-verified"] + default = "域名已验证并完成设置(注意:证书可能要等 1 小时才能生效)。" + +["help/data-retention"] + default = "页面浏览记录及所有关联数据都将在这些天后永久删除。设为 0 则永不删除。" + +["help/domain-access"] + default = "用以访问该站点的域名。" + +["help/drag-reorder"] + default = "拖拽排序" + +["help/for-the-following-countries"] + default = "国家代码列表(%[列表];使用 2 字母代码);留空则从所有国家收集数据(如果启用了国家数据收集)。" + +["help/goatcounter-domain"] + default = "你的 GoatCounter 安装域名,例如 “stats.example.com”。" + +["help/ignore-ips"] + default = "不记录这些 IP 地址发送的请求。使用英文逗号分隔。仅支持精确匹配。%[添加当前 IP 地址]。" + +["help/ignore-ips-2"] + default = "或者,%[为此浏览器关闭跟踪](再次点击以启用)。" + +["help/new-user-email"] + default = "登录用邮箱。" + +["help/new-user-email-confirm"] + default = "登录用邮箱;必须被确认。" + +["help/no-undo"] + default = "这是破坏性操作,无法撤销!" + +["help/password-edit"] + default = "留空不作更改。" + +["help/password-new-user"] + default = "留空以发送密码重置邮件。" + +["help/public"] + default = "控制谁可以查看仪表盘。" + +["help/rm-hits"] + default = "在删除任何数据之前,你将可以预览匹配。" + +["help/save-default-view"] + default = "保存当前视图(如黄色方框内的所有设置)为无选择时的默认视图。" + +["help/turing-test"] + default = "仅仅是验证一下你是人类。:-)" + +["help/your-email"] + default = "更改邮箱地址后需要重新验证。" + +["label/24-hour-clock"] + default = "24 小时时钟(13:00)" + +["label/add-new"] + default = "新建" + +["label/all-sites"] + default = "所有站点" + +["label/allow-admin-access"] + default = "允许管理员访问" + +["label/allow-visitor-counts"] + default = "允许在你的网站上添加访客计数" + +["label/browser-stats"] + default = "浏览器统计" + +["label/campaign-parameters"] + default = "campaign 参数" + +["label/change-code"] + default = "你的账号绑定在 https://[代码].%(domain)——%[%link 更改]。" + +["label/clear-pageviews"] + default = "清除现有页面浏览记录" + +["label/code"] + default = "代码" + +["label/collected-since"] + default = "自 2021 年 12 月 2 日开始收集" + +["label/csv-compress-format"] + default = "CSV 文件;可用 gzip 压缩" + +["label/current-passwd"] + default = "当前密码" + +["label/custom-domain"] + default = "当前域名" + +["label/dashboard-public"] + default = "仪表盘查看权限" + +["label/data-retention"] + default = "数据保留天数" + +["label/date-fmt"] + default = "日期格式" + +["label/delete-account-confirmation"] + default = "你确定要删除整个账号吗?" + +["label/delete-account-contact"] + default = "勾选此项,我可能会联系你,提出一些后续问题或评论。我不会劝说你留下(我不是电话销售员),但我可能会问一两个问题,或者概述一下未来的计划,如果你需要某项功能。" + +["label/delete-account-follow-up"] + default = "允许跟进" + +["label/delete-account-reason"] + default = "如果你能告诉我 GoatCounter 是否缺少某项你需要的功能,或者你删除账号的其他原因,我将不胜感激。这完全是自愿的。" + +["label/delete-account-reason-placeholder"] + default = "删除账号的原因(选填)" + +["label/email"] + default = "邮箱" + +["label/email-address"] + default = "邮箱地址" + +["label/for-following-countries"] + default = "只针对下列国家:" + +["label/goatcounter-domain"] + default = "GoatCounter 域名" + +["label/ignore-ips"] + default = "忽略 IP" + +["label/lang"] + default = "语言" + +["label/language-stats"] + default = "语言统计" + +["label/loc-stats"] + default = "位置统计" + +["label/mark-current"] + default = "(当前)" + +["label/match-title"] + default = "也匹配标题" + +["label/mfa-token"] + default = "多重身份验证令牌" + +["label/new-code"] + default = "新代码" + +["label/new-password"] + default = "新密码" + +["label/new-password-confirm"] + default = "新密码(确认)" + +["label/pagination-cursor"] + default = "分页游标" + +["label/password"] + default = "密码" + +["label/paths"] + default = "路径总览" + +["label/public-anyone"] + default = "赋予任何人" + +["label/public-private"] + default = "仅赋予登录用户" + +["label/public-token"] + default = "赋予登录用户或使用私密令牌的应用程序" + +["label/secret"] + default = "密钥" + +["label/secret-access"] + default = "私密访问 URL" + +["label/secret-token"] + default = "私密令牌" + +["label/set-default"] + default = "同样设为新用户及公共查看(如果启用)的默认值。" + +["label/size-desktop"] + default = "电脑显示屏" + +["label/size-desktophd"] + default = "高于 HD 的电脑显示屏" + +["label/size-largephones"] + default = "大型手机,小型平板" + +["label/size-phones"] + default = "手机" + +["label/size-stats"] + default = "屏幕大小统计" + +["label/size-tablets"] + default = "平板和小型笔记本" + +["label/system-stats"] + default = "系统统计" + +["label/thousand-separator"] + default = "千位分隔符" + +["label/timezone"] + default = "时区" + +["label/topref"] + default = "排名靠前的来源" + +["label/total-pageviews"] + default = "页面浏览总记录" + +["label/turing-test"] + default = "此处填 9" + +["label/verifictation-token"] + default = "验证令牌" + +["label/week-start"] + default = "一周开始于周日" + +["label/your-email"] + default = "你的邮箱" + +["label/your-site"] + default = "你的站点" + +["link/add-translation"] + default = "添加或更新翻译" + +["link/api"] + default = "API" + +["link/api-docs"] + default = "API 文档" + +["link/billing"] + default = "账单" + +["link/dashboard"] + default = "仪表盘" + +["link/generate-random"] + default = "生成随机密钥。" + +["link/goto-path"] + default = "前往 %(path)" + +["link/import"] + default = "导入" + +["link/passwd-mfa"] + default = "密码与多重身份验证" + +["link/preferences"] + default = "首选项" + +["link/rm-account"] + default = "删除账号" + +["link/rm-views"] + default = "删除页面浏览记录" + +["link/set-from-browser"] + default = "从浏览器设定" + +["link/settings"] + default = "设置" + +["link/show-more"] + default = "显示更多" + +["link/sites"] + default = "站点" + +["link/users"] + default = "用户" + +["nav-bot/contact"] + default = "联系" + +["nav-bot/contribute"] + default = "贡献" + +["nav-bot/docs"] + default = "文档" + +["nav-bot/home"] + default = "主页" + +["nav-bot/src"] + default = "源代码" + +["nav-dash/back"] + default = "后退" + +["nav-dash/by-day"] + default = "按天查看" + +["nav-dash/current"] + default = "当前" + +["nav-dash/day"] + default = "日" + +["nav-dash/end-date"] + default = "日期显示范围的截止" + +["nav-dash/filter"] + default = "筛选路径" + +["nav-dash/filter-tooltip"] + default = "筛选路径列表;忽略大小写匹配路径和标题" + +["nav-dash/forced-daily"] + default = "无法对 90 天以上的时间范围应用小时视图" + +["nav-dash/forward"] + default = "前进" + +["nav-dash/half-year"] + default = "半年" + +["nav-dash/last"] + default = "前一" + +["nav-dash/month"] + default = "月" + +["nav-dash/quarter"] + default = "季" + +["nav-dash/start-date"] + default = "日期显示范围的起始" + +["nav-dash/week"] + default = "周" + +["nav-dash/year"] + default = "年" + +["no-title"] + default = "无标题" + +["notify/add-one-thing"] + default = "必须添加至少一项;一个空的仪表盘有点儿无意义了,不是吗?" + +["notify/api-token-created"] + default = "API 令牌已创建。" + +["notify/api-token-removed"] + default = "API 令牌已删除。" + +["notify/disabled-multi-factor-auth"] + default = "多重身份验证已关闭。" + +["notify/email-already-verified"] + default = "%(email) 已经验证。" + +["notify/export-started-in-background"] + default = "导出已在后台开始;完成时将通过邮件发送下载链接。" + +["notify/import-started-in-background"] + default = "导入已在后台开始;完成时将通过邮件通知。" + +["notify/login-after-password-reset"] + default = "密码已重置;使用新密码登录。" + +["notify/multi-factor-auth-enabled"] + default = "多重身份验证已启用。" + +["notify/need-business-plan-custom-domain"] + default = "需要企业版套餐才能设置自定义域名" + +["notify/need-email-verification-for-api"] + default = "使用 API 前须验证邮箱。" + +["notify/no-user-for-token"] + default = "未查找到使用给定令牌的用户;或许令牌已过期或从未使用?" + +["notify/not-found"] + default = "未找到" + +["notify/password-changed"] + default = "密码已更改。" + +["notify/payment-processed"] + default = "支付处理成功!" + +["notify/payment-processing"] + default = "支付处理商报告了成功,但我们仍在处理这笔支付。" + +["notify/reset-to-default"] + default = "已重置为默认值!" + +["notify/reset-user-sent"] + default = "邮件已发送到 %(email)" + +["notify/restored-previously-deleted-site"] + default = "站点 ‘%(url)’ 此前已删除;已恢复全部数据。" + +["notify/saved"] + default = "已保存!" + +["notify/sent-to-email"] + default = "已发送到 %(email)。" + +["notify/settings-copied-to-site"] + default = "已复制设置到选择的站点。" + +["notify/site-added"] + default = "站点 ‘%(url)’ 已添加。" + +["notify/site-removed"] + default = "站点 ‘%(url)’ 已删除。" + +["notify/started-background-process"] + default = "已在后台开始;可能花费 10—20 秒才会处理完成。" + +["notify/user-added"] + default = "用户 ‘%(email)’ 已添加。" + +["notify/user-removed"] + default = "用户 ‘%(email)’ 已删除。" + +["notify/users-edited"] + default = "用户 ‘%(email)’ 已编辑。" + +["p/add-goatcounter-to-multiple-websites"] + default = """ +

通过创建新站点,将 GoatCounter 添加到多个网站。所有网站将共享相同的套餐、用户和登录名,但在其他方面完全独立。当前站点的设置会在创建其他站点时复制,但之后各自独立。

+ +

你可以随意添加。

+""" + +["p/additional-errors"] + default = "额外错误。" + +["p/api-intro"] + default = "GoatCounter 的 API 功能有限;目前可以计算页面浏览、创建、删除和编辑站点,以及导出数据。" + +["p/change-code-request"] + default = """ +

更改站点代码与登录域名。

+ +

警告:这将立即生效,旧的代码可被任何人再次注册;如果你已经在一个网站使用它,请尽快更改,或临时集成新旧两个代码以避免损失任何页面浏览记录。

+ +

当前代码:%(current-code) (%(current-url))

+""" + +["p/change-email"] + default = "在%[设置]更改邮箱地址。" + +["p/collect-disabled"] + default = "针对这项数据的收集当前%[已在设置关闭]。" + +["p/copy-settings-from-current-site"] + default = "从当前站点复制域名之外的所有设置。" + +["p/csv-file-format"] + default = "CSV 文件的格式%[见此]。" + +["p/delete-account-multi-site"] + default = "此站点及所有关联站点都将被标记为删除并且无法访问,但数据暂时保留。7 天后数据将永久删除。" + +["p/delete-account-one-site"] + default = "此站点将被标记为删除并且无法访问,但数据暂时保留。7 天后数据将永久删除。" + +["p/disable-mfa"] + default = "此账号当前已启用多重身份验证。" + +["p/enable-mfa"] + default = "在验证器应用程序中扫描二维码或手动输入密钥以启用基于 TOTP 的多重身份验证。" + +["p/error"] + default = "错误:%(error-message)" + +["p/export-process"] + default = """ +

将在完成后通过邮件发送下载链接。你每小时只能导出 1 次,并且将覆盖之前的副本。

+ +

包含所有的页面浏览记录,包括不计入总览的“bot”浏览。

+""" + +["p/have-mfa"] + default = "此账号受多重身份验证保护;请输入验证器应用程序中的代码。" + +["p/last-user"] + default = "无法删除或编辑最后一位管理员用户" + +["p/no-data"] + default = """ +

%[%bold 未收到数据]——GoatCounter 还没有收到任何数据。
开始记录很简单,仅需将以下 JavaScript 插入到页面的任何位置:

+ +%[%pre %(js_code)] + +

如果你没有看到任何页面浏览记录(%(domain) 和/或 gc.zgo.at 域名),检查 GoatCounter 是否被广告拦截器拦截 。

+ +

收到数据后此消息就会消失;在顶栏菜单中查看%[%link_docs 站点代码]获得更多文档和现成的集成。

+""" + +["p/no-matches"] + default = "没有记录匹配 %(query)。" + +["p/notify-immediate-change"] + default = "将会立即生效" + +["p/notify-pagination-cursor"] + default = "邮件中将包含一个“分页游标”,如果在此处填写它,将只导出自上一次导出以来的页面浏览记录。" + +["p/notify-site-deletion"] + default = "将删除 %(number) 个站点" + +["p/remove-site-confirm"] + default = "你确定要删除站点 %(sitename)?
这将删除所有关联数据。" + +["p/remove-site-confirm-contact"] + default = "如果你想进行其他操作,比如合并到另一个站点,或解绑到新的账,请%[联系我]。" + +["p/remove-site-confirm-current"] + default = "你确定要删除站点 %(sitename)?
这将删除所有关联数据,并且它是当前站点。" + +["p/request-data-recovery"] + default = "如果你改了主意,想要恢复数据,请在 7 天内%[联系我]。" + +["p/rm-hits"] + default = "对页面移除所有浏览记录。" + +["p/rm-hits-help"] + default = "匹配是忽略大小写的。以 % 作为通配符;例如 /page%.html 匹配以 /page 开头并且以 .html 结尾的所有路径。_ 匹配任意字符;例如 _.html 匹配 a.htmlb.html。以 \\%\\_ 的形式使用这两个字符的字面意。" + +["p/rm-pageview-match"] + default = "以下路径匹配 %(query):" + +["p/setting-recovery-disabled-information"] + default = "如果关闭,那么在页面浏览记录产生后也无法恢复这些信息,因为它们根本没有存储。" + +["p/settings-all-sites"] + default = "这些设置对你有权限的所有站点都生效。" + +["p/site-domain-link-to-page"] + default = "你站点的域名,比如 “www.example.com”,用作总览中的链接。" + +["p/text-data-retention"] + default = "这包括数据保留和收集设置!" + +["p/verify-email"] + default = "请点击发送至 %(email) 的链接以验证邮箱。%[%sup (为什么?)]" + +["page-ranking"] + default = "页面排名" + +["restricted-admin-access"] + default = "通常管理员无法“登录”你的站点,但如果启用此项,他们就可以登录。为了技术支持,你可能被请求启用此项。" + +["scale-y"] + default = "缩放 Y 轴至最大" + +["top-nav/back"] + default = "返回" + +["top-nav/dashboard"] + default = "仪表盘" + +["top-nav/need-js"] + default = "GoatCounter 需要启用 JavaScript 以发挥效用;请允许 JavaScript 在 %(domain) 运行。" + +["top-nav/public-link"] + default = "%(domain) 的数据分析。" + +["top-nav/public-time"] + default = "公开页面每小时刷新 1 次;所有时间以%(timezone-name)(%(timezone-offset))显示。" + +["top-nav/settings"] + default = "设置" + +["top-nav/sign-in"] + default = "登录" + +["top-nav/sign-out"] + default = "注销" + +["top-nav/site-code"] + default = "站点代码" + +["top-nav/sites"] + default = "站点:" + +["top-nav/updates"] + default = "更新" + +["top-nav/user"] + default = "用户" + +["unknown"] + default = "(未知)" + +["validate/bool"] + default = "必须是布尔值" + +["validate/color"] + default = "必须是有效的颜色代码" + +["validate/contains"] + default = "不可包含字符 %s" + +["validate/date"] + default = "必须是日期,如‘%s’" + +["validate/domain"] + default = "必须是有效的域名" + +["validate/email"] + default = "必须是有效的邮箱地址" + +["validate/exclude"] + default = "不可是‘%s’" + +["validate/hostname"] + default = "必须是有效的主机名称" + +["validate/include"] + default = "必须是‘%s’之一" + +["validate/int"] + default = "必须是整数" + +["validate/ip"] + default = "必须是有效的 IPv4 或 IPv6 地址" + +["validate/ipv4"] + default = "必须是有效的 IPv4 地址" + +["validate/len-longer"] + default = "必须比 %d 个字符多" + +["validate/len-shorter"] + default = "必须比 %d 个字符少" + +["validate/phone"] + default = "必须是有效的电话号码" + +["validate/range-higher"] + default = "必须是 %d 或更高" + +["validate/range-lower"] + default = "必须是 %d 或更低" + +["validate/required"] + default = "必须设置" + +["validate/url"] + default = "必须是有效的 URL" + +["validate/utf8"] + default = "必须是 UTF-8" + +["widget-setting/help/align"] + default = "在左侧添加外边距,使其与路径图表对齐" + +["widget-setting/help/chart-style"] + default = "如何绘制图表" + +["widget-setting/help/no-events"] + default = "页面浏览总记录中不包括事件" + +["widget-setting/help/page-size"] + default = "加载的路径数" + +["widget-setting/help/ref-page-size"] + default = "点击路径时加载的来源数量" + +["widget-setting/help/regions"] + default = "显示该国的区域而不是国家列表" + +["widget-setting/label/align"] + default = "与路径图表对齐" + +["widget-setting/label/chart-style"] + default = "图表样式" + +["widget-setting/label/no-events"] + default = "排除事件" + +["widget-setting/label/page-size"] + default = "路径数量" + +["widget-setting/label/ref-page-size"] + default = "路径来源数量" + +["widget-setting/label/regions"] + default = "显示区域" + +["widget-settings/bar-chart"] + default = "条形图" + +["widget-settings/line-chart"] + default = "线形图" + +["widget-settings/text-chart"] + default = "文字表格" + +["y-scale"] + default = "Y 轴缩放" diff --git a/i18n/zh-TW.toml b/i18n/zh-TW.toml new file mode 100644 index 00000000..486ae2c4 --- /dev/null +++ b/i18n/zh-TW.toml @@ -0,0 +1,1007 @@ +[__meta__] + comments = "|user|" + generated = 2021-11-29T19:38:18Z + language = "zh-TW" + +["button/add-new"] + default = "新增" + +["button/add-user"] + default = "新增使用者" + +["button/cfg-dashboard"] + default = "編輯儀表板版面" + +["button/change"] + default = "修改" + +["button/change-passwd"] + default = "修改密碼" + +["button/copy"] + default = "複製" + +["button/delete"] + default = "刪除" + +["button/delete-account"] + default = "刪除帳號、所有網站和所有資料" + +["button/delete-all"] + default = "是,全部刪除!" + +["button/delete-everything"] + default = "是,刪除一切" + +["button/disable-mfa"] + default = "關閉多重要素驗證" + +["button/edit"] + default = "編輯" + +["button/enable-mfa"] + default = "開啟多重要素驗證" + +["button/forgot-password"] + default = "忘記密碼?" + +["button/remove"] + default = "移除" + +["button/request-reset"] + default = "請求重設密碼" + +["button/resend-email"] + default = "重新寄送信件" + +["button/reset-defaults"] + default = "恢復預設" + +["button/reset-password"] + default = "重設密碼" + +["button/rm-hits"] + default = "刪除頁面瀏覽" + +["button/save"] + default = "儲存" + +["button/save-default-view"] + default = "儲存預設版面" + +["button/send-login-url"] + +["button/sign-in"] + default = "登入" + +["button/start-export"] + default = "開始匯出" + +["button/start-import"] + default = "開始匯入" + +["button/submit"] + default = "送出" + +["confirm/delete-user"] + default = "刪除 %(email)?" + +["dashboard/day-ago"] + default = "%(n) 天前" + zero = "0 天前" + one = "1 天前" + two = "2 天前" + few = "幾天前" + many = "好幾天前" + +["dashboard/future"] + default = "未來" + +["dashboard/month-ago"] + default = "%(n) 個月前" + zero = "0 個月前" + one = "1 個月前" + two = "2 個月前" + few = "幾個月前" + many = "好幾個月前" + +["dashboard/nothing-to-display"] + default = "沒有資料顯示" + +["dashboard/pages/header"] + default = "頁面" + +["dashboard/pages/num-visits"] + +["dashboard/pages/pageviews"] + +["dashboard/pages/path"] + default = "路徑" + +["dashboard/pages/stats"] + default = "統計資訊" + +["dashboard/pages/stats-tooltip"] + +["dashboard/pages/title"] + default = "標題" + +["dashboard/pages/views"] + default = "瀏覽數" + +["dashboard/pages/visits"] + +["dashboard/today"] + default = "今天" + +["dashboard/tooltip-event"] + +["dashboard/totals/header"] + default = "總數" + +["dashboard/totals/num-visits"] + default = "%(num-visits) 次訪問" + +["dashboard/week-ago"] + default = "%(n) 週前" + zero = "0 週前" + one = "1 週前" + two = "2 週前" + few = "幾週前" + many = "好幾週前" + +["dashboard/yesterday"] + default = "昨天" + +["data-collect/help/country"] + default = "國家名稱,例如比利時、印尼等。" + +["data-collect/help/language"] + +["data-collect/help/referrer"] + +["data-collect/help/region"] + default = "地區,例如德克薩斯、峇里省等。每個國家、地區的詳細資訊有所不同。" + +["data-collect/help/sessions"] + +["data-collect/help/size"] + default = "螢幕尺寸。" + +["data-collect/label/country"] + default = "國家" + +["data-collect/label/language"] + default = "語言" + +["data-collect/label/referrer"] + +["data-collect/label/region"] + +["data-collect/label/sessions"] + +["data-collect/label/size"] + +["data-collect/label/user-agent"] + +["datepicker/keyboard"] + +["datepicker/month-next"] + default = "下個月" + +["datepicker/month-prev"] + +["email/header"] + default = "您好:" + +["email/password-reset"] + default = """ +有人(希望是您)請求重設您 GoatCounter 帳號的密碼。 + +您可以從此連結來進行: +%(link) +""" + +["email/reset-user-email-subject"] + default = "%(domain) 的密碼重設" + +["email/signature"] + default = """ +如果有任何問題、疑問、評論,或其他事情要告訴我,請直接回覆這封電子郵件。 + +祝好, +馬丁 +""" + +["error/account-has-stripe-subscription"] + +["error/address-exists"] + +["error/could-not-read"] + +["error/date-future"] + +["error/date-mismatch"] + +["error/date-past"] + default = "那是在網站架設之前;GoatCounter 還沒「那麼」神呢 ;-)" + +["error/delete-main-site"] + default = "無法刪除主要網站" + +["error/export-expired"] + +["error/incorrect-password"] + default = "目前密碼不正確。" + +["error/invalid-end-date"] + +["error/invalid-start-date"] + +["error/load-url"] + +["error/login-invalid"] + default = "登入錯誤" + +["error/login-no-password"] + +["error/login-not-found"] + +["error/login-token-expired"] + default = "找不到給定令牌的使用者;或許它已經過期或已經被使用了?" + +["error/login-wrong-pwd"] + default = "%(email) 的密碼錯誤" + +["error/not-found"] + default = "找不到" + +["error/password-does-not-match"] + default = "密碼確認不符。" + +["error/payment-cancelled"] + default = "付款已取消。" + +["error/reset-user-no-account"] + default = "此網站無此帳號:%(email)" + +["error/token-already-used"] + default = "未知的令牌;可能已經被使用?" + +["error/wrong-verification-key"] + default = "驗證碼錯誤。" + +["event"] + default = "活動" + +["forgot-domain-help"] + default = "發送包含與電子郵件地址相關的所有域名的清單。" + +["header/access"] + default = "權限" + +["header/add-new-user"] + default = "新增使用者" + +["header/allow-access"] + default = "允許權限" + +["header/api"] + default = "API" + +["header/api-tokens"] + default = "API 令牌" + +["header/browsers"] + default = "瀏覽器" + +["header/change-code"] + default = "修改網站代碼" + +["header/change-passwd"] + default = "修改密碼" + +["header/code"] + default = "代碼" + +["header/copy-settings"] + default = "複製設定" + +["header/created-at"] + default = "建立於" + +["header/dashboard"] + default = "儀表板" + +["header/data-collection"] + default = "資料蒐集" + +["header/delete-account"] + default = "刪除帳號" + +["header/domain"] + default = "網域" + +["header/domain-settings"] + default = "網域設定" + +["header/edit-user"] + default = "編輯使用者 %(email)" + +["header/email"] + default = "信箱" + +["header/export"] + default = "匯出" + +["header/export-or-import"] + default = "匯出 / 匯入" + +["header/finished"] + default = "結束" + +["header/forgot-domain"] + default = "忘記網域" + +["header/forgot-password"] + default = "忘記密碼" + +["header/hash"] + default = "雜湊" + +["header/import"] + default = "匯入" + +["header/l10n"] + default = "本地化" + +["header/languages"] + default = "語言" + +["header/last-10-exports"] + +["header/locations"] + default = "位置" + +["header/locations-for"] + +["header/mfa"] + +["header/n-hits"] + +["header/name"] + +["header/new"] + +["header/pagination-cursor"] + +["header/passwd-mfa"] + default = "密碼和多重要素驗證" + +["header/path"] + default = "路徑" + +["header/permissions"] + default = "權限" + +["header/preferences"] + +["header/reset-password"] + +["header/rm-hits"] + +["header/settings"] + default = "設定" + +["header/sign-in-at"] + +["header/site-settings"] + default = "網站設定" + +["header/sites"] + default = "網站" + +["header/size"] + default = "大小" + +["header/sizes"] + default = "裝置" + +["header/start-pagination-cursor"] + +["header/started"] + default = "開始" + +["header/systems"] + default = "系統" + +["header/title"] + default = "標題" + +["header/token"] + +["header/toprefs"] + default = "最佳推薦" + +["header/tracking"] + default = "追蹤" + +["header/updated"] + +["header/user-info"] + default = "使用者資訊" + +["header/user-information"] + default = "使用者資訊" + +["header/users"] + default = "使用者" + +["help/allow-visitor-counts"] + default = "詳情請參閱 %[the documentation] 了解如何使用。" + +["help/campaign-parameters"] + +["help/cfg-dashboard"] + default = "修改在儀表板上顯示什麼以及顯示的順序。" + +["help/code-access"] + default = "您可透過 https://[我的代碼].%(domain) 瀏覽您的網站。" + +["help/custom-domain"] + default = """ +自訂域名,例如 “stats.example.com”。 +注意:不會 阻止大多數廣告攔截器封鎖 GoatCounter,僅僅是作為一個漂亮的「虛榮域名」。 +""" + +["help/custom-domain-cname"] + default = "設定一個 CNAME 紀錄指向 %(domain) – %[%docs detailed instructions]。" + +["help/custom-domain-error"] + default = """ +%[%error Not yet verified];設定一個 CNAME 紀錄指向 %(domain) – %[%docs detailed instructions]。 +驗證每 2 小時執行一次。 +""" + +["help/custom-domain-plan"] + default = "需要個人加強版或商業計劃(您目前使用的是 %(plan) 計劃;參見 %[%link billing])。" + +["help/custom-domain-verified"] + +["help/data-retention"] + +["help/domain-access"] + +["help/drag-reorder"] + +["help/for-the-following-countries"] + +["help/goatcounter-domain"] + +["help/ignore-ips"] + +["help/ignore-ips-2"] + +["help/new-user-email"] + +["help/new-user-email-confirm"] + +["help/no-undo"] + +["help/password-edit"] + +["help/password-new-user"] + +["help/public"] + +["help/rm-hits"] + +["help/save-default-view"] + +["help/turing-test"] + +["help/your-email"] + +["label/24-hour-clock"] + default = "24 小時制時間" + +["label/add-new"] + +["label/all-sites"] + default = "全部網站" + +["label/allow-admin-access"] + +["label/allow-visitor-counts"] + +["label/browser-stats"] + +["label/campaign-parameters"] + +["label/change-code"] + +["label/clear-pageviews"] + +["label/code"] + default = "代碼" + +["label/collected-since"] + +["label/csv-compress-format"] + +["label/current-passwd"] + default = "目前密碼" + +["label/custom-domain"] + default = "自訂域名" + +["label/dashboard-public"] + +["label/data-retention"] + +["label/date-fmt"] + default = "日期格式" + +["label/delete-account-confirmation"] + +["label/delete-account-contact"] + +["label/delete-account-follow-up"] + +["label/delete-account-reason"] + +["label/delete-account-reason-placeholder"] + +["label/email"] + default = "信箱" + +["label/email-address"] + default = "信箱" + +["label/for-following-countries"] + +["label/goatcounter-domain"] + default = "GoatCounter 網域" + +["label/ignore-ips"] + default = "忽略 IP" + +["label/lang"] + default = "語言" + +["label/language-stats"] + +["label/loc-stats"] + +["label/mark-current"] + default = "(目前)" + +["label/match-title"] + +["label/mfa-token"] + +["label/new-code"] + +["label/new-password"] + default = "新密碼" + +["label/new-password-confirm"] + default = "新密碼(確認)" + +["label/pagination-cursor"] + +["label/password"] + default = "密碼" + +["label/paths"] + +["label/public-anyone"] + default = "任何人" + +["label/public-private"] + +["label/public-token"] + +["label/secret"] + +["label/secret-access"] + +["label/secret-token"] + +["label/set-default"] + +["label/size-desktop"] + default = "電腦螢幕" + +["label/size-desktophd"] + default = "高解析度電腦螢幕" + +["label/size-largephones"] + default = "大型手機、小型平板" + +["label/size-phones"] + default = "手機" + +["label/size-stats"] + +["label/size-tablets"] + default = "平板和小型筆電" + +["label/system-stats"] + +["label/thousand-separator"] + +["label/timezone"] + default = "時區" + +["label/topref"] + +["label/total-pageviews"] + +["label/turing-test"] + default = "在這裡輸入 9" + +["label/verifictation-token"] + +["label/week-start"] + +["label/your-email"] + default = "您的信箱" + +["label/your-site"] + default = "您的網站" + +["link/add-translation"] + +["link/api"] + default = "API" + +["link/api-docs"] + default = "API 文件" + +["link/billing"] + +["link/dashboard"] + default = "儀表板" + +["link/generate-random"] + +["link/goto-path"] + +["link/import"] + default = "匯入" + +["link/passwd-mfa"] + default = "密碼和多重要素驗證" + +["link/preferences"] + +["link/rm-account"] + default = "刪除帳號" + +["link/rm-views"] + +["link/set-from-browser"] + +["link/settings"] + default = "設定" + +["link/show-more"] + default = "顯示更多" + +["link/sites"] + default = "網站" + +["link/users"] + default = "使用者" + +["nav-bot/contact"] + default = "聯繫" + +["nav-bot/contribute"] + default = "貢獻" + +["nav-bot/docs"] + default = "文件" + +["nav-bot/home"] + default = "首頁" + +["nav-bot/src"] + default = "原始碼" + +["nav-dash/back"] + default = "較舊" + +["nav-dash/by-day"] + +["nav-dash/current"] + default = "目前" + +["nav-dash/day"] + default = "日" + +["nav-dash/end-date"] + +["nav-dash/filter"] + +["nav-dash/filter-tooltip"] + +["nav-dash/forced-daily"] + +["nav-dash/forward"] + default = "較新" + +["nav-dash/half-year"] + default = "半年" + +["nav-dash/last"] + default = "過往" + +["nav-dash/month"] + default = "月" + +["nav-dash/quarter"] + default = "季" + +["nav-dash/start-date"] + +["nav-dash/week"] + default = "週" + +["nav-dash/year"] + default = "年" + +["no-title"] + default = "無標題" + +["notify/add-one-thing"] + +["notify/api-token-created"] + +["notify/api-token-removed"] + +["notify/disabled-multi-factor-auth"] + +["notify/email-already-verified"] + +["notify/export-started-in-background"] + +["notify/import-started-in-background"] + +["notify/login-after-password-reset"] + +["notify/multi-factor-auth-enabled"] + +["notify/need-business-plan-custom-domain"] + +["notify/need-email-verification-for-api"] + +["notify/no-user-for-token"] + +["notify/not-found"] + default = "找不到" + +["notify/password-changed"] + default = "密碼已修改。" + +["notify/payment-processed"] + +["notify/payment-processing"] + +["notify/reset-to-default"] + default = "恢復為預設!" + +["notify/reset-user-sent"] + +["notify/restored-previously-deleted-site"] + +["notify/saved"] + default = "已儲存!" + +["notify/sent-to-email"] + +["notify/settings-copied-to-site"] + +["notify/site-added"] + +["notify/site-removed"] + +["notify/started-background-process"] + +["notify/user-added"] + +["notify/user-removed"] + +["notify/users-edited"] + +["p/add-goatcounter-to-multiple-websites"] + +["p/additional-errors"] + +["p/api-intro"] + +["p/change-code-request"] + +["p/change-email"] + +["p/collect-disabled"] + +["p/copy-settings-from-current-site"] + +["p/csv-file-format"] + +["p/delete-account-multi-site"] + +["p/delete-account-one-site"] + +["p/disable-mfa"] + +["p/enable-mfa"] + +["p/error"] + default = "錯誤:%(error-message)" + +["p/export-process"] + +["p/have-mfa"] + +["p/last-user"] + default = "無法刪除或編輯最後一位管理員使用者" + +["p/no-data"] + +["p/no-matches"] + +["p/notify-immediate-change"] + +["p/notify-pagination-cursor"] + +["p/notify-site-deletion"] + default = "%(number) 個網站將被刪除" + +["p/remove-site-confirm"] + +["p/remove-site-confirm-contact"] + +["p/remove-site-confirm-current"] + +["p/request-data-recovery"] + +["p/rm-hits"] + +["p/rm-hits-help"] + +["p/rm-pageview-match"] + +["p/setting-recovery-disabled-information"] + +["p/settings-all-sites"] + +["p/site-domain-link-to-page"] + +["p/text-data-retention"] + +["p/verify-email"] + +["page-ranking"] + +["restricted-admin-access"] + +["scale-y"] + +["top-nav/back"] + default = "返回" + +["top-nav/dashboard"] + default = "儀表板" + +["top-nav/need-js"] + +["top-nav/public-link"] + +["top-nav/public-time"] + +["top-nav/settings"] + default = "設定" + +["top-nav/sign-in"] + default = "登入" + +["top-nav/sign-out"] + default = "登出" + +["top-nav/site-code"] + +["top-nav/sites"] + default = "網站:" + +["top-nav/updates"] + +["top-nav/user"] + default = "使用者" + +["unknown"] + default = "(未知)" + +["validate/bool"] + +["validate/color"] + +["validate/contains"] + +["validate/date"] + +["validate/domain"] + +["validate/email"] + +["validate/exclude"] + +["validate/hostname"] + +["validate/include"] + +["validate/int"] + +["validate/ip"] + +["validate/ipv4"] + +["validate/len-longer"] + +["validate/len-shorter"] + +["validate/phone"] + +["validate/range-higher"] + +["validate/range-lower"] + +["validate/required"] + +["validate/url"] + +["validate/utf8"] + default = "必須為 UTF-8" + +["widget-setting/help/align"] + +["widget-setting/help/chart-style"] + default = "如何顯示圖表" + +["widget-setting/help/no-events"] + +["widget-setting/help/page-size"] + +["widget-setting/help/ref-page-size"] + +["widget-setting/help/regions"] + +["widget-setting/label/align"] + +["widget-setting/label/chart-style"] + default = "圖表樣式" + +["widget-setting/label/no-events"] + +["widget-setting/label/page-size"] + default = "頁面數量" + +["widget-setting/label/ref-page-size"] + default = "推薦頁面數量" + +["widget-setting/label/regions"] + default = "顯示地區" + +["widget-settings/bar-chart"] + default = "條形圖" + +["widget-settings/line-chart"] + default = "折線圖" + +["widget-settings/text-chart"] + default = "文字表格" + +["y-scale"] + default = "Y 軸尺寸" diff --git a/tpl/i18n_manage.gohtml b/tpl/i18n_manage.gohtml new file mode 100644 index 00000000..7786f5d1 --- /dev/null +++ b/tpl/i18n_manage.gohtml @@ -0,0 +1,16 @@ +{{- template "_backend_top.gohtml" . -}} + + + +{{range $f := .Files}} + {{$f.Name}} – {{substr $f.Updated 0 10}} +
+
{{$f.File.TOML}}
+
{{if $f.Diff}}{{$f.Diff}}{{else}}Identical{{end}}
+
+{{end}} + +{{- template "_backend_bottom.gohtml" . }} diff --git a/tpl/user_pref.gohtml b/tpl/user_pref.gohtml index 82cf68e4..dd0a42dd 100644 --- a/tpl/user_pref.gohtml +++ b/tpl/user_pref.gohtml @@ -35,6 +35,8 @@ + + {{validate "settings.language" .Validate}} {{.T "link/add-translation|Add or update translations"}}