التوطين
طلب واحد، مفتاح واحد — اللغة تتبع الترويسة.
كيف يعمل
أرسل ترويسة Accept-Language مع كل طلب. يُعيد الـ API نفس بنية JSON مع حقول النص المُحلَّلة تعكس اختيار لغتك. لا توجد مفاتيح منفصلة name_ar / name_en في الاستجابة — مفتاح name يظهر دائماً، وقيمته باللغة المطلوبة.
| قيمة الترويسة | اللغة المُعادة |
|---|---|
Accept-Language: en (الافتراضي) | الإنجليزية |
Accept-Language: ar | العربية |
إذا حُذفت الترويسة أو ضُبطت على لغة غير مدعومة، يعود الـ API إلى الإنجليزية.
الحقول المُحلَّلة حسب المورد
| المورد | الحقول المُحلَّلة |
|---|---|
| التلاوة | name، description |
| القارئ | name، bio |
| الرواية | name، bio |
| القراءة | name |
| الناشر | name |
الموارد المرتبطة المدمجة (publisher.name، reciter.name، إلخ) داخل استجابة التلاوة مُحلَّلة أيضاً — تحصل على أسماء عربية في جميع أنحاء الحمولة بترويسة واحدة.
مثال
نفس واجهة /reciters/ مع قيمتين مختلفتين لـ Accept-Language:
- curl
- Python
- JavaScript
# الإنجليزية (الافتراضي)
curl -H "Accept-Language: en" https://staging.api.cms.itqan.dev/reciters/
# العربية
curl -H "Accept-Language: ar" https://staging.api.cms.itqan.dev/reciters/
import urllib.request, json
url = "https://staging.api.cms.itqan.dev/reciters/"
for lang in ("en", "ar"):
req = urllib.request.Request(url, headers={"Accept-Language": lang})
with urllib.request.urlopen(req) as resp:
data = json.load(resp)
print(f"[{lang}] اسم أول قارئ: {data['results'][0]['name']}")
const url = "https://staging.api.cms.itqan.dev/reciters/";
for (const lang of ["en", "ar"]) {
const resp = await fetch(url, { headers: { "Accept-Language": lang } });
const { results } = await resp.json();
console.log(`[${lang}] اسم أول قارئ: ${results[0].name}`);
}
الاستجابة بالإنجليزية:
{
"count": 42,
"results": [
{ "id": 1, "name": "Mishary Rashid Alafasy", "bio": "...", "recitations_count": 5 }
]
}
الاستجابة بالعربية:
{
"count": 42,
"results": [
{ "id": 1, "name": "مشاري راشد العفاسي", "bio": "...", "recitations_count": 5 }
]
}
نفس id، نفس البنية — قيم النص فقط تختلف.
انظر أيضاً: مبادئ التصميم · تضمين الكائنات المرتبطة · معالجة الأخطاء