چندزبانه‌سازی

ما از شما انتظار نداریم که پوسته ها را به چندین زبان ترجمه کنید، اما پوسته باید قابل ترجمه باشد. این بدان معنی است که تمام رشته های موجود در فایل های قالب بایدقابل ترجمه باشند. اگر قصد دارید پوسته را منتشر کنید، این یک الزام است.

اگر در حال ایجاد یک پوسته خصوصی برای یک وبلاگ تک زبان هستید، می توانید از این قسمت صرف نظر کنید.

بین المللی شدن آسان است. به جای نوشتن این:

<h1>Welcome</h1>

شما باید این را بنویسید:

<h1>{{ 'welcome' | lang }}</h1>

در اینجا، 'welcome' یک کلید در en.yaml است. و lang یک فیلتر سفارشی Twig است که توسط HB تعریف شده است. HB زبان صحیح را بر اساس زبان وبلاگ کاربرنمایش می دهد.

پوشهٔ زبان

پوشه /lang حاوی فایل های زبان .yaml است. یک فایل زبان ممکن است به شکل زیر باشد:

welcome: Welcome

زبان انگلیسی الزامی است

انگلیسی (en.yaml) زبان پیش فرض است و لازم است. همچنین می توانید زبان های دیگری را تعریف کنید. کدهای زبان باید کدهای ISO 639-1باشند.

مثال دیگری را ببینیم:

welcome: 'Welcome to our blog'
usersCount: '* users'
byAuthor: 'by {authorName}'

در قالب‌های Twig ، از فیلتر lang برای رندر کردن این رشته‌ها با جایگزینی متغیرها استفاده کنید.

<h1>
    {{ 'welcome' | lang }}
</h1>

<p>{{ 'byAuthor' | lang(authorName=_author.name) }}</p>

<p>{{ 'usersCount' | lang(2) }}</span>

همانطور که می بینید دو نوع متغیر وجود دارد:

  • *
    • اگر رشته فقط یک ورودی (در بیشتر موارد، یک عدد) داشته باشد، استفاده کنید.
  • named
    • مثال: {authorName}
    • اگر رشته ورودی‌های بیشتری دارد یا اگر ورودی‌ها داده‌هایی هستند که می‌توانند به نام توصیف شوند، از آن استفاده کنید.
    • شما می توانید چندین مکان نگهدار با نام در رشته داشته باشید.
    • در فیلتر زبان Twig ، از آرگومان های با نام برای پر کردن متغیرهایی با داده های واقعی استفاده کنید.

رشته‌های شرطی بر اساس عدد

گاهی اوقات ممکن است بخواهید زمانی که یک عدد صفر، یک یا بیشتر از یک است، پیام دیگری نمایش دهید. به جای نوشتن یک دسته از شرایط if، می توانید از فیلتر سفارشی lang_by_number Twig استفاده کنید.

# en.yaml
posts_num_zero: No Posts
posts_num_one: 1 Post
posts_num_multi: '* Posts'
Number of posts:
{{ _pagination.total | lang_by_number(
    zero="posts_num_zero",
    one="posts_num_one",
    multi="posts_num_multi"
) }}

_pagination.total یک عدد است. * در posts_num_multi با شماره داده شده جایگزین می شود.

نحوهٔ کار ترجمه‌ها

شما ممکن است نگاهی به زبان ها راهنمای نحوه تغییر زبان یا تنظیم چندین زبان در یک وبلاگ را توضیح می دهد.

فرض کنید که وبلاگ نویس زبان سایت خود را به فرانسوی تغییر می دهد (fr). سپس، بررسی می کنیم که آیا fr.yaml در پوشه lang موجود است یا خیر. اگر نه، ما فقط رشته های انگلیسی را نشان می دهیم. با این حال، هر کسی می تواند به راحتی یک fr.yaml را از کنسول اضافه کند (حتی افرادی که دانش فنی ندارند می توانند این کار را انجام دهند). کلیدها تغییر نمی کنند، فقط رشته ها.

در اینجا یک نسخه fr از فایل بالا به نظر می رسد.

welcome: 'Bienvenue sur notre blog'
usersCount: '* utilisateurs'
byAuthor: 'par {authorName}'

از کلیدهای تو در تو در فایل های زبان YAML استفاده نکنید. آن را به جفت های کلید-مقدار ساده نگه دارید.

تغییر زبان

معمولاً می‌خواهید یک تغییر زبان در وبلاگ‌های چند زبانه ارائه کنید تا به بازدیدکنندگان اجازه دهید بین زبان‌ها جابجا شوند.

{% if _blog.languages | length > 1 %}
<script>
	function toggleLanguageDropdown() {
		document.querySelector('.dropdown').classList.toggle('open');
	}
</script>
<div class="language-switcher">
	<a class="current-language" onclick="toggleLanguageDropdown()">{{ _lang.code }}</a>
	<div class="dropdown">
		{% for lang in _blog.languages %}
		<a
			href="{{ lang.code | language_variant_url }}"
			class="{% if lang.code == _lang.code %}active{% endif %}"
			>{{ lang.name }}</a
		>
		{% endfor %}
	</div>
</div>
{% endif %}
  • {% if _blog.languages | length > 1 %} بررسی می کند که آیا وبلاگ بیش از یک زبان دارد یا خیر. در وبلاگ های تک زبانه نیازی به تغییر زبان نیست.
  • _lang زبان فعلی است. بنابراین، {{ _lang.code }} کد زبان فعلی را نمایش می دهد.
  • {% for lang in _blog.languages %} در تمام زبان های وبلاگ حلقه می زند و یک عنصر <a> را برای هر زبان در داخل کشویی ارائه می دهد.
  • فیلتر language_variant_url کمک کننده برای تولید URL استفاده می شود. این فیلتر بهترین نوع زبان ممکن را در صفحه فعلی پیدا می کند. به عنوان مثال، اگر صفحه فعلی یک پست باشد، این تابع تنها در صورت وجود آن نوع URL نوع زبان آن پست را می دهد. در غیر این صورت، URL صفحه فهرست (در کد زبان داده شده) برگردانده می شود.