برنامه نویسی

چگونه از gettext در فونیکس استفاده کنیم؟

Summarize this content to 400 words in Persian Lang
نحوه استفاده از Gettext به این صورت است:

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خطاها در Gettext

استخراج ترجمه ها

mix gettext.extract

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ترجمه‌های استخراج‌شده را با ترجمه‌هایی که از قبل دارم (برای همه زبان‌ها) ترکیب کنید

mix gettext.merge priv/gettext

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کثرت سازی

https://phrase.com/blog/posts/i18n-for-phoenix-applications-with-gettext/

این دستور جمع‌سازی زمانی که عددی کمتر از 1 به آن ارسال می‌شود، خطا ایجاد می‌کند، زیرا هیچ جمعی برای اعداد 0 یا منفی وجود ندارد و از نظر نحوی معنی ندارد.

مثال

## Llamado de un texto en singular con número 1
= ngettext(“Total salary”, “Total salaries”, 1) %> #-> Total Salaries
## Llamado de un texto plural con número 2 ó mas en este caso ese numero se interpola

= ngettext(“Total salary”, “Total salaries”, 2) %> #-> Total Salaries

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جمع فایل های .po

msgid “Total salary”
msgid_plural “Total %{count} salaries”
msgstr[0] “Total Salary”
msgstr[1] “Total Salaries”

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مزایای استفاده از Gettext بدون نامگذاری

ترجمه انگلیسی قبلاً در کد انجام شده است.

مدیریت حروف بزرگ و کوچک به استفاده از پیشوندها (مثلاً: متن یا برچسب) بستگی ندارد، اما اگر کلمه ای با حروف بزرگ استفاده شود، اولین کلمه به همان اندازه که نوشته شده است ظاهر می شود.

با نامگذاری

msgid “LabelDeductions”
msgstr “Deducciones”

msgid “textDeductions”
msgstr “deducciones”

بدون نامگذاری

msgid “Deductions”
msgstr “Deducciones”

msgid “deductions”
msgstr “deducciones”

استفاده کنید:

= gettext(“house”) %>
= gettext(“House”) %>

اگر موارد فوق را در کد دارید و ترجمه را مانند آن انجام دهید

msgid “house”
msgstr “casa”

هنگام استخراج و ترکیب ترجمه ها، Gettext به طور خودکار ترجمه دیگر را بدون در نظر گرفتن حروف بزرگ استنباط می کند و (با کلمه فازی) برمی گرداند.

#, elixir-format, fuzzy
msgid “House”
msgstr “casa”

موارد فوق به توسعه‌دهنده اجازه می‌دهد تا از حروف بزرگ موجود در سند آگاه نباشد.

زمان کدنویسی بهینه شده است، ترجمه ها را می توان به روشی بی زمان انجام داد.

واقعیت بی زمان و بدون زمینه به این واقعیت اشاره دارد که “شخصی بدون داشتن زمینه یا اطلاعات در مورد مکان نمایش این پیام ها در برنامه می تواند آنها را ترجمه کند یا ترجمه بهتری ایجاد کند.”

msgid “LabelDaysGrantedVacation”
msgstr “Días otorgados de vacaciones”

## Reemplaza con

msgid “Vacation days granted”
msgstr “Días otorgados de vacaciones”

## La traducción en ingles se torna opcional, ya que el usuarió visualizara
## “Vacation days granted” y no “LabelDaysGrantedVacation” al igual que el
## programador que vera un texto mas entendible

“`bash
msgid “TextInfoAbbRUTAbbDIAN”
msgstr “Para ingresar la información personal de su nuevo trabajador, puede ingresar el archivo (PDF) del Registro Único Tributario (RUT) descargado de la DIAN (maximo de treinta días de antiguedad). Recuerde que lo puedes descargar del sistema Muisca de la DIAN ”

msgid “To enter the personal information of your new worker, you can enter the file (PDF) of the Single Tax Registry (RUT) downloaded from the DIAN (maximum thirty days old). Remember that you can download it from the DIAN Muisca system ”
msgstr “Para ingresar la información personal de su nuevo trabajador, puede ingresar el archivo (PDF) del Registro Único Tributario (RUT) descargado de la DIAN (maximo de treinta días de antiguedad). Recuerde que lo puedes descargar del sistema Muisca de la DIAN ”
“`

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

متغیرها شروع به معنی دار شدن می کنند
#Con nomenclatura
msgid “LabelApplyDecree%{Decree}%{YearDecree}”
msgstr “Aplica para decreto %{Decree} del año %{YearDecree}”

#Sin nomenclatura
msgid “Applies to decree %{NumberDecree} of %{YearDecree}”
msgstr “Aplica para decreto %{Decree} del año %{YearDecree}”

ترجمه ها را می توان بین پروژه ها به اشتراک گذاشت،

دستور mix gettext.merge priv/gettext ترجمه هایی را که از قبل در فایل هستند حذف نمی کند، برعکس آنها را مخلوط می کند و سعی می کند ترجمه های احتمالی را پیش بینی کند، اگر مطابقت کامل نداشته باشد، ترجمه را به عنوان ” علامت گذاری می کند. dirty”، هنگامی که توسط یک برنامه نویس به صورت دستی اصلاح شد، آن را برای استخراج بعدی به صورت خودکار تمیز می کند.

Gettext از فاصله Jaro برای تعیین اینکه آیا دو کلمه یا عبارت مشابه هستند استفاده می کند و بنابراین ترجمه را استنباط می کند که علامت گذاری می کند. مبهم

جمع، چرا پیچیده؟

بله، استفاده صحیح از جمع در Gettext پیچیده تر از استفاده از شرطی ها در اکسیر و استفاده است:

if numero_casas > 1 %>
“Las Casas” %>
% else %>
“La Casa” %>
% end %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

چه چیزی استفاده شود:

ngettext(“La Casa”, “Las Casas”, numero_casas) %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگرچه استفاده از آن منحنی یادگیری دارد، اما کد خواناتر است و این ترجمه ها به ما در پروژه های دیگر کمک می کند

به این ترتیب، اگر چیزی کار نمی کند، شما همیشه یک خواندن واقعی و واضح خواهید داشت.

مزیت ترجمه با جمع

شناسه های مفرد از شناسه های جمع متمایز می شوند

#Los Id no chocan con los Id plurales
msgid “TextDeductions” #mismo ID en singular
msgstr “deducciones”

msgid “TextDeduction”
msgid_plural “TextDeductions” #mismo ID en plural
msgstr[0] “deduccion”
msgstr[1] “deducciones”

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

معایب

جمع شامل اصطلاحی نیست که باید در صورت داشتن 0 مورد استفاده شود، فقط زمانی که مثلاً یک یا چند مورد دارید.

Sin filtros # No hay forma de aplicarlo
1 Filtro
2 Filtros
3 Filtros

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جمع طولانی تر می شوند،

ngettext(“کسر”، “کسر”، 2)

فایل های ترکیبی ابتدا باید esx باشند

ترکیب gettext.merge priv/gettext/en/LC_MESSAGES/default2.po priv/gettext/en/LC_MESSAGES/default.po

2 فایل .po را ادغام کنید

mix gettext.merge priv/gettext/en/LC_MESSAGES/default2.po priv/gettext/en/LC_MESSAGES/default.po

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جفت تست

Mayusculas y minusculas

Gettext است CaseSensitive از آنجایی که در برخی از زبان ها یک کلمه بزرگ با یک کلمه کوچک متفاوت است، بنابراین این تفاوت را دارد و راه حل آن این است که کار برنامه نویس را هم راحت تر کند، این در واقع یک مزیت و یک عیب است با استخراج متن حل شد.

دریافت متن با متغیرهای رشته

% text_action = if @action == “edit”, do: “LabelEdit%{Object}” , else: “LabelCreate%{Object}” %>
span class=”uk-text-capitalize uk-font-size-15″> Gettext.gettext(WebPortalBillingWeb.Gettext, text_action, Object: gettext(“TextClient”)) %>span>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از Gettext در کنترلرهای liveview استفاده کنید

مهم پاس دادن است *NombreApp**Web**.Gettext در پارامتر اول برای کار کردن gettext، به خاطر داشته باشید که ماژول است NombreApp**Web** باطل وب در پایان.*

Gettext.gettext(NombreAppWeb.Gettext, “LabelRestrictionForDSAdquisitionsNational%{Object}”, Object: “#{id_type}”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده از “خطاها” در زمینه خاصی، یعنی فایل errors.po

Gettext.dgettext(NombreAppWeb.Gettext, “errors”, “Message”)

#Si el mensaje esta en una variable puede definir un valor por defecto con ||
#ya que si pasa nil a la función esta fallara

Gettext.dgettext(NombreAppWeb.Gettext, “errors”, (nil || “Default Message”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

چگونه ترجمه ای با مقداری که تغییر می کند بسازیم؟

این به صورت بومی کار نمی کند، اما می توانید سعی کنید متغیرها را به طور جداگانه با یک تابع برای انجام تطبیق حذف کنید.

فرض کنید که خطاهای زیر از پشت می آیند

“Son 300 pesos”
“Son 650 pesos”
“Son 700 pesos”

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آیا می توان یک متن دریافت کرد که این متن را با استفاده از یک شناسه منحصر به فرد ترجمه کند؟

می توانید از named_captures استفاده کنید تا لیست اعدادی را که در یک متن آمده است جدا کنید

Regex – Elixir v1.12.3

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

#Algo como esto
msgid “Son %{Number} pesos”
msgstr “Is %{Number} pesos”
#generara algo como esto
“Is 300 pesos”

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Gettext.gettext(WebPortalBillingWeb.Gettext, “Is 700 pesos”)

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نحوه استفاده از Gettext به این صورت است:


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خطاها در Gettext

استخراج ترجمه ها

mix gettext.extract
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ترجمه‌های استخراج‌شده را با ترجمه‌هایی که از قبل دارم (برای همه زبان‌ها) ترکیب کنید

mix gettext.merge priv/gettext
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کثرت سازی

https://phrase.com/blog/posts/i18n-for-phoenix-applications-with-gettext/

این دستور جمع‌سازی زمانی که عددی کمتر از 1 به آن ارسال می‌شود، خطا ایجاد می‌کند، زیرا هیچ جمعی برای اعداد 0 یا منفی وجود ندارد و از نظر نحوی معنی ندارد.

مثال

## Llamado de un texto en singular con número 1
= ngettext("Total salary", "Total salaries", 1) %> #-> Total Salaries
## Llamado de un texto plural con número 2 ó mas en este caso ese numero se interpola

= ngettext("Total salary", "Total salaries", 2) %> #-> Total Salaries
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جمع فایل های .po

msgid "Total salary"
msgid_plural "Total %{count} salaries"
msgstr[0] "Total Salary"
msgstr[1] "Total Salaries"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مزایای استفاده از Gettext بدون نامگذاری

  1. ترجمه انگلیسی قبلاً در کد انجام شده است.
  2. مدیریت حروف بزرگ و کوچک به استفاده از پیشوندها (مثلاً: متن یا برچسب) بستگی ندارد، اما اگر کلمه ای با حروف بزرگ استفاده شود، اولین کلمه به همان اندازه که نوشته شده است ظاهر می شود.

    1. با نامگذاری
    msgid "LabelDeductions"
    msgstr "Deducciones"
    
    msgid "textDeductions"
    msgstr "deducciones"
    
    1. بدون نامگذاری
    msgid "Deductions"
    msgstr "Deducciones"
    
    msgid "deductions"
    msgstr "deducciones"
    

    استفاده کنید:

    = gettext("house") %>
    = gettext("House") %>
    

    اگر موارد فوق را در کد دارید و ترجمه را مانند آن انجام دهید

    msgid "house"
    msgstr "casa"
    

    هنگام استخراج و ترکیب ترجمه ها، Gettext به طور خودکار ترجمه دیگر را بدون در نظر گرفتن حروف بزرگ استنباط می کند و (با کلمه فازی) برمی گرداند.

    #, elixir-format, fuzzy
    msgid "House"
    msgstr "casa"
    
    

    موارد فوق به توسعه‌دهنده اجازه می‌دهد تا از حروف بزرگ موجود در سند آگاه نباشد.

  3. زمان کدنویسی بهینه شده است، ترجمه ها را می توان به روشی بی زمان انجام داد.

    واقعیت بی زمان و بدون زمینه به این واقعیت اشاره دارد که “شخصی بدون داشتن زمینه یا اطلاعات در مورد مکان نمایش این پیام ها در برنامه می تواند آنها را ترجمه کند یا ترجمه بهتری ایجاد کند.”

    msgid "LabelDaysGrantedVacation"
    msgstr "Días otorgados de vacaciones"
    
    ## Reemplaza con
    
    msgid "Vacation days granted"
    msgstr "Días otorgados de vacaciones"
    
    ## La traducción en ingles se torna opcional, ya que el usuarió visualizara
    ## "Vacation days granted" y no "LabelDaysGrantedVacation" al igual que el 
    ## programador que vera un texto mas entendible
    
```bash
msgid "TextInfoAbbRUTAbbDIAN"
msgstr "Para ingresar la información personal de su nuevo trabajador, puede ingresar el archivo (PDF) del Registro Único Tributario (RUT) descargado de la DIAN (maximo de treinta días de antiguedad). Recuerde que lo puedes descargar del sistema Muisca de la DIAN "

msgid "To enter the personal information of your new worker, you can enter the file (PDF) of the Single Tax Registry (RUT) downloaded from the DIAN (maximum thirty days old). Remember that you can download it from the DIAN Muisca system "
msgstr "Para ingresar la información personal de su nuevo trabajador, puede ingresar el archivo (PDF) del Registro Único Tributario (RUT) descargado de la DIAN (maximo de treinta días de antiguedad). Recuerde que lo puedes descargar del sistema Muisca de la DIAN "
```
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. متغیرها شروع به معنی دار شدن می کنند

    #Con nomenclatura
    msgid "LabelApplyDecree%{Decree}%{YearDecree}"
    msgstr "Aplica para decreto %{Decree} del año %{YearDecree}"
    
    #Sin nomenclatura
    msgid "Applies to decree %{NumberDecree} of %{YearDecree}"
    msgstr "Aplica para decreto %{Decree} del año %{YearDecree}"
    
  2. ترجمه ها را می توان بین پروژه ها به اشتراک گذاشت،

    دستور mix gettext.merge priv/gettext ترجمه هایی را که از قبل در فایل هستند حذف نمی کند، برعکس آنها را مخلوط می کند و سعی می کند ترجمه های احتمالی را پیش بینی کند، اگر مطابقت کامل نداشته باشد، ترجمه را به عنوان ” علامت گذاری می کند. dirty”، هنگامی که توسط یک برنامه نویس به صورت دستی اصلاح شد، آن را برای استخراج بعدی به صورت خودکار تمیز می کند.

  3. Gettext از فاصله Jaro برای تعیین اینکه آیا دو کلمه یا عبارت مشابه هستند استفاده می کند و بنابراین ترجمه را استنباط می کند که علامت گذاری می کند. مبهم

جمع، چرا پیچیده؟

بله، استفاده صحیح از جمع در Gettext پیچیده تر از استفاده از شرطی ها در اکسیر و استفاده است:

 if numero_casas > 1 %> 
     "Las Casas" %>
% else %>
     "La Casa" %>
% end %>

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

چه چیزی استفاده شود:

 ngettext("La Casa", "Las Casas", numero_casas) %>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگرچه استفاده از آن منحنی یادگیری دارد، اما کد خواناتر است و این ترجمه ها به ما در پروژه های دیگر کمک می کند

بدون عنوان

به این ترتیب، اگر چیزی کار نمی کند، شما همیشه یک خواندن واقعی و واضح خواهید داشت.

مزیت ترجمه با جمع

شناسه های مفرد از شناسه های جمع متمایز می شوند


#Los Id no chocan con los Id plurales
msgid "TextDeductions" #mismo ID en singular
msgstr "deducciones"

msgid "TextDeduction"
msgid_plural "TextDeductions" #mismo ID en plural
msgstr[0] "deduccion"
msgstr[1] "deducciones"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

معایب

جمع شامل اصطلاحی نیست که باید در صورت داشتن 0 مورد استفاده شود، فقط زمانی که مثلاً یک یا چند مورد دارید.

Sin filtros # No hay forma de aplicarlo
1 Filtro
2 Filtros
3 Filtros
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جمع طولانی تر می شوند،

ngettext(“کسر”، “کسر”، 2)

فایل های ترکیبی ابتدا باید esx باشند

ترکیب gettext.merge priv/gettext/en/LC_MESSAGES/default2.po priv/gettext/en/LC_MESSAGES/default.po

2 فایل .po را ادغام کنید

mix gettext.merge  priv/gettext/en/LC_MESSAGES/default2.po priv/gettext/en/LC_MESSAGES/default.po
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جفت تست

Mayusculas y minusculas

Gettext است CaseSensitive از آنجایی که در برخی از زبان ها یک کلمه بزرگ با یک کلمه کوچک متفاوت است، بنابراین این تفاوت را دارد و راه حل آن این است که کار برنامه نویس را هم راحت تر کند، این در واقع یک مزیت و یک عیب است با استخراج متن حل شد.

دریافت متن با متغیرهای رشته

% text_action = if @action == "edit", do: "LabelEdit%{Object}" , else: "LabelCreate%{Object}" %>
span class="uk-text-capitalize uk-font-size-15"> Gettext.gettext(WebPortalBillingWeb.Gettext, text_action, Object: gettext("TextClient")) %>span>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از Gettext در کنترلرهای liveview استفاده کنید

مهم پاس دادن است *NombreApp**Web**.Gettext در پارامتر اول برای کار کردن gettext، به خاطر داشته باشید که ماژول است NombreApp**Web** باطل وب در پایان.*

Gettext.gettext(NombreAppWeb.Gettext, "LabelRestrictionForDSAdquisitionsNational%{Object}", Object: "#{id_type}")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده از “خطاها” در زمینه خاصی، یعنی فایل errors.po

Gettext.dgettext(NombreAppWeb.Gettext, "errors", "Message")

#Si el mensaje esta en una variable puede definir un valor por defecto con || 
#ya que si pasa nil a la función esta fallara

Gettext.dgettext(NombreAppWeb.Gettext, "errors", (nil || "Default Message")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

چگونه ترجمه ای با مقداری که تغییر می کند بسازیم؟

این به صورت بومی کار نمی کند، اما می توانید سعی کنید متغیرها را به طور جداگانه با یک تابع برای انجام تطبیق حذف کنید.

فرض کنید که خطاهای زیر از پشت می آیند

"Son 300 pesos" 
"Son 650 pesos" 
"Son 700 pesos" 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آیا می توان یک متن دریافت کرد که این متن را با استفاده از یک شناسه منحصر به فرد ترجمه کند؟

می توانید از named_captures استفاده کنید تا لیست اعدادی را که در یک متن آمده است جدا کنید

Regex – Elixir v1.12.3


وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

#Algo como esto
msgid "Son %{Number} pesos"
msgstr "Is %{Number} pesos"
#generara algo como esto
"Is 300 pesos"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


Gettext.gettext(WebPortalBillingWeb.Gettext, "Is 700 pesos")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا