Skip to content

Commit 82ef03e

Browse files
committed
Add expanded website translations
1 parent 77f9578 commit 82ef03e

19 files changed

Lines changed: 2398 additions & 4 deletions

README.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ Implemented now:
4444
Icelandic, Spanish, Portuguese, Italian, Japanese, Simplified Chinese,
4545
Traditional Chinese, Vietnamese, Thai, Hindi, Bengali, Tamil, Esperanto,
4646
Danish, Latin, Swiss German, Korean, Russian, Ukrainian, Flemish, Belgian
47-
French, Canadian French, and Canadian English.
47+
French, Canadian French, Canadian English, Turkish, Lithuanian, Latvian,
48+
Polish, Greek, Hungarian, Estonian, Elfdalian, Bulgarian, Czech, Croatian,
49+
Belarusian, Irish, Luxembourgish, Romanian, and Serbian.
4850
- Local gates for formatting, clippy, tests, security invariants, dependency
4951
policy, RustSec advisories, local smoke testing, SBOM generation, and
5052
reproducible release builds.
@@ -287,13 +289,32 @@ other website locales use stable prefixes:
287289
- `/fr-be/` for Belgian French
288290
- `/fr-ca/` for Canadian French
289291
- `/en-ca/` for Canadian English
292+
- `/tr/` for Turkish
293+
- `/lt/` for Lithuanian
294+
- `/lv/` for Latvian
295+
- `/pl/` for Polish
296+
- `/el/` for Greek
297+
- `/hu/` for Hungarian
298+
- `/et/` for Estonian
299+
- `/ovd/` for Elfdalian
300+
- `/bg/` for Bulgarian
301+
- `/cs/` for Czech
302+
- `/hr/` for Croatian
303+
- `/be/` for Belarusian
304+
- `/ga/` for Irish
305+
- `/lb/` for Luxembourgish
306+
- `/ro/` for Romanian
307+
- `/sr/` for Serbian
290308

291309
Locale configuration lives in [config/locales.toml](config/locales.toml), and
292310
translated website keys live in [config/i18n/keys](config/i18n/keys). The
293311
language menu uses normal links and does not set cookies. Locale selection only
294312
changes website text, navigation, and telemetry locale labels; avatar API URLs,
295313
identity values, and rendering parameters stay unchanged.
296314

315+
The Elfdalian (`/ovd/`) locale is a best-effort translation and should be
316+
reviewed by a native speaker before being treated as authoritative.
317+
297318
## Testing And Release Evidence
298319

299320
Run the fast local gate:

config/i18n/keys/be-BY.toml

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
locale_id = "be-BY"
2+
3+
[nav]
4+
help = "Дапамога"
5+
docs = "Дакументацыя"
6+
terms = "Умовы"
7+
privacy = "Прыватнасць"
8+
repository = "Рэпазіторый"
9+
rust_crate = "Rust Crate"
10+
11+
[language]
12+
selector_label = "Мова"
13+
14+
[hero]
15+
eyebrow = "hashavatar.app"
16+
title = "Стварыце Публічны Аватар За Секунды"
17+
description = "Ператварыце любы непразрысты user id, стабільнае імя карыстальніка або аднабаковы hash у дэтэрмінаваны avatar URL. Выберыце стыль, фон і памер, затым скапіруйце WebP URL, спампуйце вынік або стварыце падпісаную object-storage спасылку."
18+
privacy_tip = "Парада па прыватнасці: ідэнтыфікатары ў форме email прымаюцца для зручнасці, але стабільны ўнутраны id або аднабаковы hash лепшыя, калі вы хочаце менш персанальных даных у URL логах."
19+
20+
[form]
21+
identity = "Ідэнтычнасць"
22+
namespace_tenant = "Namespace Tenant"
23+
style_version = "Версія Стылю"
24+
avatar_type = "Тып Аватара"
25+
background = "Фон"
26+
accessory = "Аксесуар"
27+
accent_color = "Акцэнтны Колер"
28+
expression = "Выраз"
29+
shape = "Форма"
30+
size = "Памер"
31+
copy_url = "Капіяваць URL"
32+
copy_signed_link = "Капіяваць Падпісаную Спасылку"
33+
download = "Спампаваць"
34+
open_raw = "Адкрыць Напрамую"
35+
copied = "Скапіявана"
36+
copy_failed = "Капіяванне не ўдалося"
37+
direct_url = "Прамы URL"
38+
signed_storage_link = "Падпісаная Storage Спасылка"
39+
machine_readable_api = "Машынчытальны API"
40+
signed_unavailable = "Уключыце S3 канфігурацыю на серверы, каб выкарыстоўваць падпісаныя спасылкі."
41+
signed_unavailable_runtime = "Падпісаныя storage спасылкі недаступныя, пакуль S3 не наладжаны на серверы."
42+
43+
[preview]
44+
api = "API"
45+
storage = "Сховішча"
46+
storage_text = "неабавязковая S3 persistence з presigned links праз"
47+
cache = "Cache"
48+
cache_text = "Cloudflare-friendly доўгія cache headers"
49+
tip = "Парада"
50+
tip_text = "Кожны URL дэтэрмінаваны, таму яго можна ўбудаваць непасрэдна ў вашу праграму."
51+
presets = "Гатовыя Прыклады"
52+
preset_suffix = "прыклад"
53+
54+
[footer]
55+
copy = "hashavatar.app — гэта дэтэрмінаваны avatar API і demo service, пабудаваны на open-source Rust crate hashavatar."
56+
57+
[pages.help]
58+
title = "Дапамога"
59+
description = "Кіраўніцтва па інтэграцыі hashavatar.app avatar API у web apps, frontends і backends."
60+
eyebrow = "Кіраўніцтва Па Інтэграцыі"
61+
lead = "Выкарыстоўвайце hashavatar.app непасрэдна з браузера, frontend або backend. Кожны avatar URL дэтэрмінаваны, таму той самы ідэнтыфікатар і опцыі заўсёды даюць той самы вынік."
62+
basic_url = "Базавы URL"
63+
basic_url_text = "Выкарыстоўвайце query endpoint, калі патрэбны просты публічны image URL."
64+
path_style = "Path Style URL"
65+
path_style_text = "Выкарыстоўвайце path форму, калі хочаце чысцейшыя embed URL."
66+
html_example = "HTML Прыклад"
67+
javascript_example = "JavaScript Прыклад"
68+
supported_parameters = "Падтрыманыя Параметры"
69+
style_layer_note = "Accessory і expression layers прымяняюцца да character-style families. Object-style families, такія як planet, rocket, paws, mushroom, cactus, cupcake, pizza, icecream, diamond, coffee-cup і shield, нармалізуюцца да accessory=none і expression=default."
70+
signed_storage_links = "Падпісаныя Storage Спасылкі"
71+
signed_storage_links_text = "Калі гэты deployment мае object storage, запытайце presigned storage link з /v1/avatar/link. Гэты endpoint захоўвае generated object і вяртае JSON з signed URL, object key і hashed cache key. Стандартныя avatar responses не раскрываюць signed-link metadata ў response headers."
72+
open_source = "Адкрыты Код"
73+
open_source_text = "Public site source знаходзіцца ў API repository, а reusable avatar renderer апублікаваны на crates.io."
74+
75+
[pages.docs]
76+
title = "Дакументацыя"
77+
description = "Reference documentation для hashavatar.app public avatar API, storage link endpoint і namespace-aware identity contract."
78+
eyebrow = "API Reference"
79+
lead = "Гэта product-facing reference для public API. Тыя самыя identity, tenant, style version, avatar family, style options, size і WebP output прызначаны заставацца стабільнымі ў major release."
80+
core_endpoints = "Core Endpoints"
81+
operational_endpoints = "Аперацыйныя Endpoints"
82+
operational_text = "GET /healthz публічны для load balancers і uptime checks. GET /metrics — loopback-only і вяртае 404 для non-local peers."
83+
namespace_support = "Namespace Падтрымка"
84+
namespace_text = "Выкарыстоўвайце tenant і style_version, каб трымаць visual identity spaces асобна паміж прадуктамі або rollout phases."
85+
anonymous_ids = "Ананімныя ID"
86+
anonymous_text = "Адпраўляйце internal stable id або one-way application hash замест raw personal data."
87+
rate_limits = "Rate Limits"
88+
rate_limits_text = "Public service прымяняе origin-side rate limits, з больш строгімі limits для /v1/avatar/link, direct avatar requests з persist=true і /og.png, бо object storage writes і Open Graph image rendering даражэйшыя за direct rendering."
89+
timeouts = "Timeouts"
90+
timeouts_text = "Avatar generation і storage operations абмежаваны server-side timeouts, каб дарагія запыты не маглі бясконца займаць origin."
91+
errors = "Памылкі"
92+
error_bad_request = "няправільны kind, unsupported algorithm або format, size або missing identity"
93+
error_timeout = "generation або storage timeout"
94+
error_rate_limit = "rate limit exceeded"
95+
error_internal = "rendering або storage failure"
96+
openapi = "OpenAPI"
97+
openapi_text = "Для generated clients або tooling выкарыстоўвайце"
98+
99+
[pages.terms]
100+
title = "Умовы"
101+
description = "Best-effort service terms для public hashavatar.app avatar API і demo website."
102+
eyebrow = "Умовы Сэрвісу"
103+
lead = "Гэты public service прадастаўляецца ў інфармацыйных мэтах і на best-effort аснове. Выкарыстоўвайце яго толькі калі такі risk profile падыходзіць вашай праграме."
104+
no_warranty = "Без Гарантыі"
105+
no_warranty_text = "Гэты service і ўсе generated outputs прадастаўляюцца as-is і as-available, без гарантый любога віду. Мы не абяцаем availability, correctness, fitness for a particular purpose, uninterrupted operation або compatibility with your systems."
106+
no_liability = "Без Адказнасці"
107+
no_liability_text = "Мы не адказваем за downtime, outages, degraded performance, broken links, cache behavior, lost data, corrupted objects, third-party provider failures або прамыя ці ўскосныя damages ад выкарыстання service."
108+
fallback_text = "Калі вы залежыце ад гэтых аватараў у production, трэба рэалізаваць уласныя fallback behavior, caching strategy і availability plan."
109+
acceptable_use = "Дапушчальнае Выкарыстанне"
110+
acceptable_use_text = "Не выкарыстоўвайце service для перагрузкі infrastructure, абыходу rate limits або cache controls, тэставання abusive traffic patterns або захоўвання illegal material праз persistence features."
111+
changes = "Змены"
112+
changes_text = "Мы можам змяніць, абмежаваць, прыпыніць або спыніць public service у любы час без папярэджання. Public endpoints, output details або operational limits могуць змяняцца з развіццём service."
113+
legal_note = "Гэтая старонка — operational guidance, не legal advice. Калі патрэбныя formal legal terms для business deployment, апублікуйце reviewed version для вашай jurisdiction і operator entity."
114+
115+
[pages.privacy]
116+
title = "Прыватнасць"
117+
description = "Privacy notice для hashavatar.app пра request data, logs і optional object storage behavior."
118+
eyebrow = "Паведамленне Аб Прыватнасці"
119+
lead = "Service наўмысна просты, але public avatar API ўсё ж атрымлівае некаторыя request data, каб працаваць. Гэтая старонка апісвае практычны baseline."
120+
receives = "Што Атрымлівае Service"
121+
receives_identity = "opaque identifier, які вы кладзяце ў request, напрыклад internal id, username або one-way hash"
122+
receives_parameters = "request parameters, такія як avatar type, style options, size, format і background"
123+
receives_http_metadata = "standard HTTP metadata, якія апрацоўваюцца server, reverse proxy і CDN, напрыклад IP address, user agent, referrer і request timing"
124+
stores = "Што Захоўвае Само Прыкладанне"
125+
stores_text = "Прыкладанне не патрабуе user accounts і па змаўчанні не ставіць application cookies. У basic request flow яно генеруе avatar on demand і вяртае яго непасрэдна."
126+
storage_text = "Калі object storage support уключаны і выкарыстоўваецца signed-link або persistence route, generated avatar file і object key могуць захоўвацца ў наладжаным S3-compatible bucket."
127+
telemetry = "Telemetry З Павагай Да Прыватнасці"
128+
telemetry_text = "Калі operator уключае telemetry, прыкладанне адпраўляе aggregate OpenTelemetry metrics для page views, visible page time, repository і crate clicks, demo actions і avatar generation counts, згрупаваныя па bounded style choices, такіх як kind, background, accessory, color, expression, shape і size bucket."
129+
telemetry_limits = "Telemetry не ўключае raw identifiers, tenant або style namespace values, IP addresses, user agents, referrers, full URLs, cookies або free-form text. Telemetry endpoints прымаюць толькі allow-listed aggregate labels."
130+
logging = "Логі І Інфраструктура"
131+
logging_text = "У залежнасці ад deployment, infrastructure components, такія як nginx, Caddy, Cloudflare, hosting providers або S3-compatible storage, могуць захоўваць access logs і operational metadata. Гэтыя logs — частка працы public service і могуць утрымліваць requested identifier, калі ён ёсць у URL."
132+
avoid = "Чаго Лепш Не Адпраўляць"
133+
avoid_text = "Email-shaped identifiers прымаюцца дзеля compatibility, але URLs могуць з'яўляцца ў infrastructure logs. Адпраўляйце stable internal id або one-way application hash, калі хочаце пазбегнуць personal data ў request URL."
134+
repository = "Repository І Crate"
135+
repository_text = "Implementation можна паглядзець у public API repository, а reusable avatar renderer — у Rust crate."

0 commit comments

Comments
 (0)