Хорошая практика

Для ВЕБ

Использование шаблонов Markdown улучшает читаемость и упрощает обслуживание как для переводчика, так и для ваших скриптов веб-сайта, которые будут извлекать контент.

Для именованных якорей на многоязычном сайте интересный подход заключается в том, чтобы «жестко кодировать» ссылки с помощью дизайна Markdown.

Напр.: для тега

<h2/>

с якорем



label-in-current-language

LLM более эффективны, чем люди, в защите ссылок, и

LSDE

позволяет вам обнаруживать проблемы между различными языковыми версиями.


Таким образом, вы можете делиться ссылкой, которая будет работать на всех языках, и использовать

LSDE

для управления заменой устаревшего якоря.




Двусмысленность кода

Избегайте двусмысленности при работе с моделями, ориентированными на данные.


Пример:


Плохая практика:

Термин 'key' не является явным и затрудняет его поиск.



ts
const PRODUCTS: Product[] = [
	{
		id: 'fcf7o',
		logo: '/icons/fcf7o-icon-40.webp',
		label: 'FCF7O',
		key: 'game:fcf7o.words.game_title',
	},
	{
		id: 'lsde',
		logo: '/icons/lsde-icon-40.webp',
		label: '<c1>LSDE</c1>',
		key: 'software:lsde.name',
	},
	{
		id: 'lsge',
		logo: '/icons/lsge.webp',
		label: 'LSGE',
		key: 'software:lsge.name',
	},
];


Хорошая практика:

Примите единую и последовательную конвенцию.


Термин

i18nKey

очень явный и позволяет точно искать это значение с помощью регулярных выражений (

Regex

).


ts
const PRODUCTS: Product[] = [
	{
		id: 'fcf7o',
		logo: '/icons/fcf7o-icon-40.webp',
		label: 'FCF7O',
		i18nKey: 'game:fcf7o.words.game_title',
	},
	{
		id: 'lsde',
		logo: '/icons/lsde-icon-40.webp',
		label: '<c1>LSDE</c1>',
		i18nKey: 'software:lsde.name',
	},
	{
		id: 'lsge',
		logo: '/icons/lsge.webp',
		label: 'LSGE',
		i18nKey: 'software:lsge.name',
	},
];




Лень

Плохие идеи рождаются от лени.


Не пытайтесь экономить ключи, выполняя операции по извлечению контента.


Пример:


javascript
const [title, subtitle] = t( 'game:game.title' ).split( /[::]/ );

Это ложная хорошая идея, потому что в некоторых языках символы могут различаться, а порядок слов может меняться.





Формат тегов

Максимально сократите код, предназначенный для дизайна, непосредственно в тексте, чтобы управлять им из кодовой базы.


Например, вы можете указать местоположение изображения, но не его стиль или способ отображения.


Если вам нужно внести изменения в дизайн, вы не захотите быть вынужденными переводить текст на 10 языков только для того, чтобы изменить стиль тега!



Теги могут включать идентификатор, но добавление дополнительной информации обычно крайне не рекомендуется и является плохой практикой.


Пример: Не делайте


<img src='url' left />

а лучше


<img id=1 />

Затем вы получите ID тега изображения, чтобы применить к нему необходимые стили в кодовой базе.


ID должны использоваться буквально, а не через их индекс.


Действительно, в разных языках теги могут быть перемещены и перестать соответствовать исходному индексу.


Использование естественных индексов также усложняет работу для разработчика; попытка угадать, какому индексу соответствует изображение или тег, является настоящей головоломкой.


Поэтому используйте теги с идентификатором, когда вы хотите иметь возможность настраивать их после интерполяции.





CSS

Для перевода сайта, когда у вас есть абзацы, выберите минимальную высоту (`min-height`) после перевода, чтобы избежать визуальных смещений при смене языка.


Напр.:

mih={'3lh'}

Это позволяет вам определить минимальную высоту на основе языка, который занимает больше всего строк, тем самым обеспечивая согласованный и ненавязчивый пользовательский опыт (UX).



Пространство имен


Всегда включайте 'namespace' в свои ключи перевода, даже если у вас только одно.

Это значительно упрощает настройку шаблона Regex для поиска ваших ключей.


Напр.:

game:a.b.c

,

common:a.b.c