Акценти
foura.ai вече се предлага на шест езика. Сайтът, Dashboard chrome и деветте маркетингови страници бяха извлечени, преведени и пренасочени, за да предоставят правилната локализация въз основа на URL. Отворете sitemap в браузър и той ще се визуализира като стилизирана таблица вместо като суров XML.
Какво ново
Сайтът говори шест езика
Английски, български, немски, полски, виетнамски и китайски. Рутирането с URL-prefix означава, че всяка локализация живее на свой собствен път: /de/, /pl/, /zh/ и така нататък. Чистият път обслужва английски език, а /en/ пренасочва към него, така че да има само един canonical URL за всяка английска страница. Глобус в горната навигация ви позволява да превключвате, като изборът ви се запазва между страниците.
Server-side rendering върши трудната работа за SEO. Всяка страница вече се доставя с коректен lang атрибут, пълен комплект hreflang, специфични за локализацията Open Graph метаданни и локализирани <title> и <meta description>. sitemap разкрива всеки URL във всяка локализация. Търсачките, които предпочитат една локализация пред друга (Baidu изисква китайски, полската версия на дадена търсачка изисква полски), сега получават правилната страница още при първото обхождане.
ICU формите за множествено число работят точно както очаквате. "1 API key" остава в единствено число, "2 API keys" преминава в множествено число, като правилото се променя според езика. Полският има три форми за множествено число, английският има две, а китайският има една. Runtime resolver-ът използва Intl.PluralRules, вграден в браузъра API, така че нищо допълнително не се изпраща към вашия bundle.
А ако четете на английски, нищо видимо не се променя. Вашите URL адреси остават там, където са били.
Playground UI е локализиран
Приблизително 80 низа в инструмента Playground (labels, hints, placeholders, tooltips) вече следват избраната от вас локализация. Техническото съдържание умишлено остава на английски: имената на HTTP методите, кодовите примери, JSON ключовете, имената на header-ите, кодовете за статус и стойностите, които бихте поставили в request, се четат по един и същ начин във всяка локализация. UI около тях говори на вашия език; wire-ът остава на английски.
Това разделение е важно. Всеки, който дебъгва request в екип без общ майчин език, все още може да копира тялото на request и да го съпостави с документацията без разминавания поради превода.
Sitemap се визуализира като таблица
Отворете https://foura.ai/sitemap.xml в нов раздел на браузъра и ще видите стилизирана таблица в тъмната тема на FourA вместо суров XML. Добавихме XSLT stylesheet, който поддържа както отделни sitemaps, така и sitemap index.
Причината, поради която се нуждаехме от това: браузърите спряха да визуализират локализираните sitemaps като свое вградено стилизирано дърво веднага щом се появят <xhtml:link> записи за алтернативни локализации. Изборът беше или да доставим sitemap без алтернативи (и да загубим SEO сигнала, който свързва локализациите заедно), или да визуализираме наше собствено стилизиране. Затова избрахме втория вариант. Crawlers игнорират stylesheet-а и парсват XML както преди, така че за тях нищо не се променя.
sitemap е истинска страница на истински сайт. Тя трябва да изглежда като такава.
Под капака
Преводите идват от автоматизиран pipeline. Ние commit-ваме само английските изходни низове; при merge към main, pipeline-ът генерира всяка друга локализация и commit-ва резултата. Редакция на текста се прави на едно място и се разпространява в шестте езика.
Една корекция на бъг, която си струва да се отбележи. Първият локализиран deploy за кратко изпрати сурови placeholders за превод към production (виждаше се home.h1a там, където трябваше да бъде заглавието), тъй като в етапа на build липсваше locales директорията. Приложихме корекцията и направихме така, че build-ът да чете locales директорията перед създаването на bundle, така че това да не се повтаря.
Сайт, който се предлага на шест езика, е структурно шест различни сайта. Търсачките, екранните четци и клиент във Варшава, който търси в Google на полски, се възползват, когато правилната локализация пристигне на правилния URL с правилните метаданни. wire-ът остава същият; повърхността посреща всеки читател там, където се намира.