Как трябва да се форматира страницата, на която съдържанието е достъпно на различни езици?
sobes.tech AI
Отговор от AI
За оптимизация за търсачки и удобство на потребителя, на всяка страница трябва да се използва атрибутът lang в таг <html>.
<html lang="ru">
...
</html>
За посочване на алтернативни версии на страницата на други езици се използва мета-тегът hreflang в <head>. Той информира търсачките (например Google), че съществуват други езикови варианти на същата страница.
Пример:
<head>
<link rel="alternate" hreflang="ru" href="https://example.com/страница" />
<link rel="alternate" hreflang="en" href="https://example.com/en/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
</head>
hreflang="ru": указва руската версия на страницата.hreflang="en": указва английската версия.hreflang="x-default": указва страницата по подразбиране или страницата за избор на език.
Начините за превключване на езици на фронтенда могат да варират:
- Отделни URL адреси за всеки език:
example.com/ru/page,example.com/en/page. Това е предпочитаният подход за SEO. - Параметри в заявката:
example.com/page?lang=ru,example.com/page?lang=en. По-малко предпочитано за SEO. - Cookie или Local Storage: Езикът се запазва на клиента. Необходима е сървърна обработка или клиентски рендеринг.
За управление на преводите на фронтенда често се използват библиотеки за интернационализация (i18n):
- React:
react-i18next,react-intl - Vue:
vue-i18n - Angular:
@angular/localize - Vanilla JS:
i18next
Тези библиотеки позволяват:
- Извличане на низове за превод от кода.
- Управление на различни езикови файлове (например JSON формат).
- Динамично превключване на езика без презареждане на страницата.
- Обработка на склонения, множествено число и форматиране на дати/числа според езика.
Пример за използване на i18next с React:
// src/i18n.js
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import translationEN from './locales/en/translation.json';
import translationRU from './locales/ru/translation.json';
const resources = {
en: {
translation: translationEN,
},
ru: {
translation: translationRU,
},
};
i18n
.use(initReactI18next)
.init({
resources,
lng: 'ru',
interpolation: {
escapeValue: false,
},
});
export default i18n;
src/locales/ru/translation.json:
{
"title": "Привет, мир!"
}
src/locales/en/translation.json:
{
"title": "Hello, world!"
}
src/App.js:
import React from 'react';
import { useTranslation } from 'react-i18next';
function App() {
const { t, i18n } = useTranslation();
const changeLanguage = (lng) => {
i18n.changeLanguage(lng);
};
return (
<div>
<h1>{t('title')}</h1>
<button onClick={() => changeLanguage('ru')}>Русский</button>
<button onClick={() => changeLanguage('en')}>English</button>
</div>
);
}
export default App;
Текстовете и изображенията с текст трябва да бъдат преведени и показани според избрания език/URL.