تخطي إلى المحتوى

النصوص و t!

هذه الصفحة مترجمة من الإنجليزية. اقرأ الصفحة الإنجليزية

كل نص يراه المستخدم يأتي من ملفات اللغة عبر t!. يتحقق المترجم من أن كل ملف لغة يحوي المفتاح ومن أن الوسائط تطابق العناصر النائبة، فتكون الترجمة المفقودة خطأ بناء، لا تسمية فارغة.

ملفات اللغة

يحوي locales/<lang>.json مفاتيح متداخلة. يجب أن تحوي كل الملفات المفاتيح نفسها.

{
  "stock": {
    "products": "Products",
    "saved": "Product {code} saved."
  }
}

t!

Screen::new(t!("stock.products"))
ui.toast(t!("stock.saved", code = p.code));

يعيد t! قيمة Text: مفتاحاً مع وسائطه، يُحلّ بلغة المستخدم عند عرض الصفحة. تفشل الأخطاء الإملائية عند التصريف:

error: t!: key `stock.prodcts` is missing in locales/tr.json
  = help: add it to every file in locales/

تسميات الحقول والخيارات

تستخدم تسميات الحقول المفتاح <Model>.<field>، مثل Product.code. وتستخدم تسميات الخيارات <Choice>.<Variant>. وعندما يكون المفتاح مفقوداً تعود التسمية إلى #[label("...")] أو إلى صيغة مقروءة من الاسم. يبلّغ zeyn check عن المفاتيح التي تملكها بعض اللغات وتفتقر إليها أخرى.

{
  "Product": { "code": "Code", "name": "Product name" },
  "Unit": { "Piece": "Piece", "Kg": "Kilogram" }
}

تسجيل اللغات

let i18n = I18n::new("en")
    .catalog("en", include_str!("../locales/en.json"))
    .and_then(|i| i.catalog("tr", include_str!("../locales/tr.json")))?;
App::new(t!("app.name")).i18n(i18n)

الوسيط الأول في I18n::new هو اللغة الافتراضية. ومع أكثر من فهرس يعرض الغلاف محدد لغة. تأتي نصوص الإطار نفسه (الجدول والنماذج والغلاف) بالإنجليزية والتركية.

نصوص إطار العمل بلغات أخرى

تتوفر نصوص إطار العمل الخاصة أيضًا بالصينية والروسية والإسبانية والكورية واليابانية والهندية والعربية. كل لغة ميزة Cargo مستقلة، فلا يدفع التطبيق إلا ثمن اللغات التي يفعّلها (تضيف كل لغة ما بين 35 و60 كيلوبايت من النصوص إلى الملف التنفيذي):

zeyn = { version = "0.0", features = ["lang-ru", "lang-ar"] }

lang-all يفعّل كل اللغات. ولا يعرض التطبيق لغة إلا عندما يسجل لها فهرسه الخاص كما في الأعلى. ومن دون الميزة تظهر نصوص إطار العمل باللغة الافتراضية.

نصوص خارج الشاشات

  • يحوّل ctx.t(&text) قيمة Text إلى String بلغة المستخدم، كما في رسالة بريد إلكتروني.
  • يعطي Text::english() النص الإنجليزي للسجلات والاختبارات.
  • Text::from("literal") نص لا يُترجم أبداً، مثل رمز منتج.

راجع Time and languages لمعرفة كيف تُختار اللغة وكيف تُنسَّق الأرقام والمبالغ والتواريخ.