امنیت، هویت، استقرار و تابآوری · فصل ۸ — Security، Tenant، Rights و Hallucination · 123
Weak Localization
failure را بعد از وقوع و بهصورت موردی تحلیل میکند و هنوز detection، containment و repair path از قبل طراحی نشده است. موضوع جاری: «Weak Localization». میتواند failure family «Weak Localization» را بازتولید/تشخیص دهد و detection، containment و recovery مناسب را تعیین کند.
خلاصهٔ درس
failure را بعد از وقوع و بهصورت موردی تحلیل میکند و هنوز detection، containment و repair path از قبل طراحی نشده است. موضوع جاری: «Weak Localization».
میتواند failure family «Weak Localization» را بازتولید/تشخیص دهد و detection، containment و recovery مناسب را تعیین کند.
خروجی این درس
میتواند failure family «Weak Localization» را بازتولید/تشخیص دهد و detection، containment و recovery مناسب را تعیین کند.
1. صفحهای که ترجمهشده به نظر میرسد، هنوز میتواند localization ضعیفی داشته باشد
یک داشبورد ممکن است بیشتر متنهای فارسی را درست نشان دهد اما برای یک کلید گمشده بیصدا به انگلیسی برگردد، همان متن انگلیسی را با lang=fa و جهت RTL برچسب بزند، plural را با منطق انگلیسی انتخاب کند و تاریخ یا عدد را با en-US قالببندی کند. در این وضعیت «ترجمه وجود دارد» معادل «locale behavior درست است» نیست. نقطه شروع این درس، شکستن localization به چند بعد مستقل و قابلمشاهده است.
2. قبل از اصلاح متن، مرز شواهد را ثبت کنید
برای هر run حداقل اینها را ثبت کنید: requested locale، supported locales، selected locale، fallback path، message key، وجود یا نبود ترجمه، زبان و جهت همان رشته، plural category، formatter locale و خروجی number/date. سپس هر نتیجه را به مشاهده، authority، استنباط یا OPEN وصل کنید. اگر runtime سیاست fallback را آشکار نمیکند، آن را از روی ظاهر صفحه حدس نزنید.
3. locale selection و fallback یک مسئله مستقل است
درخواست fa-IR لازم نیست دقیقاً به یک resource با همان برچسب متنی ختم شود؛ یک برنامه ممکن است fa را بهعنوان locale پشتیبانیشده انتخاب کند، یا طبق policy خودش به گزینه دیگری برود. CLDR language-matching داده و الگوریتمهایی برای تطبیق locale مطلوب با localeهای پشتیبانیشده ارائه میکند، اما policy دقیق هر application باید از fixture یا runtime trace بهدست آید، نه از فرض ذهنی. [UNICODE-CLDR-MATCH]
4. زبان و جهت باید برای رشتهای که واقعاً رندر شده قابل تعیین باشد
W3C میگوید مقادیر declaration زبان باید از BCP 47 استفاده کنند و برای stringهای natural language باید زبان و string direction همان رشته قابل تعیین باشد؛ اتکا به default سطح resource یا heuristic بهتنهایی کافی نیست. بنابراین اگر fallback انگلیسی داخل یک صفحه فارسی رندر میشود، metadata آن رشته نمیتواند صرفاً از context فارسی ارث برده و بدون بررسی معتبر فرض شود. [W3C-I18N-SPEC-2026]
5. missing translation با unsafe mixed-language fallback یکی نیست
یک کلید گمشده ممکن است طبق policy به انگلیسی fallback کند. این میتواند containment موقت باشد، اما فقط وقتی fallback صریح، قابلردیابی و از نظر language/direction درست برچسبگذاری شده باشد. اگر متن انگلیسی با fa/rtl منتشر شود، defect metadata داریم؛ اگر fallback پنهان شود و تیم آن را «ترجمهشده» تلقی کند، defect evidence نیز داریم. Recovery کامل معمولاً نیاز دارد کلید هدف یا policy مصوب بسته شود و locale matrix دوباره اجرا شود.
6. منطق one/other انگلیسی برای همه زبانها معتبر نیست
CLDR plural categories بین زبانها متفاوتاند. در داده فعلی CLDR 49، فارسی برای cardinal category one شامل ۰ و ۱ است، در حالی که عربی categoryهای zero، one، two، few، many و other دارد. پس branch سختکدشده انگلیسی میتواند در فارسی برای ۰ یا در عربی برای ۲ و بازههای دیگر نتیجه غلط بدهد، حتی اگر واژه ترجمهشده باشد. [UNICODE-CLDR-PLURAL] [UNICODE-CLDR-LANGUAGE-PLURALS]
7. number/date formatting باید جدا از message translation سنجیده شود
ممکن است همه message keyها وجود داشته باشند اما formatter هنوز با en-US کار کند. عدد، تاریخ، currency و time conventions به locale حساساند؛ به همین دلیل matrix باید output formatter و locale مورد استفاده را جدا ثبت کند. انتظار دقیق format باید به runtime/fixture مشخص وابسته باشد؛ این درس یک شکل جهانی و واحد برای همه runtimeها ادعا نمیکند.
8. Localization Failure Diagnosis & Recovery Record v1
Artifact اصلی درس یک رکورد ممیزیپذیر است با این ستونها: requested/supported/selected locale، fallback path، message key، translation presence، rendered language/direction، plural category، number/date formatter، expected output، evidence label، containment، closure probe و residual risk. هدف رکورد این است که «چه چیزی ثابت شده» از «چه چیزی فقط به نظر درست میرسد» جدا بماند.
9. حداقل دو توضیح رقیب برای failure بسازید
اگر یک متن انگلیسی در صفحه فارسی دیده شد، حداقل دو احتمال دارید: locale selection اشتباه شده یا فقط همان message key missing بوده است. اگر count غلط است، ممکن است translation بد باشد یا plural selector اشتباه کار کند. یک diagnosis قوی قبل از تغییر code یا copy، competing explanationها را مینویسد و با mutation تکبعدی حداقل یکی را رد میکند.
10. negative control باید فقط یک بعد را تغییر دهد
برای تشخیص locale selection، فقط requested/supported locale را تغییر دهید. برای metadata، همان rendered text را نگه دارید و language/direction را بررسی کنید. برای plural، count را طوری عوض کنید که category هدف تغییر کند. برای formatter، message ثابت بماند و formatter locale عوض شود. وقتی چند چیز همزمان تغییر میکنند، نتیجه causal مبهم میشود.
11. containment باید defect را پنهان نکند
Containment میتواند یک locale یا message خاص را موقتاً از release خارج کند، fallback صریح و correctly-labeled را فعال کند، یا مسیر آسیبدیده را با warning نگه دارد. containment نباید با relabel کردن متن انگلیسی به فارسی، force کردن dir=rtl روی هر رشته، یا حذف test failing «سبز» شود. دامنه affected locale/message و شرط خروج باید روشن باشد.
12. closure فقط با locale matrix rerun معتبر است
بعد از repair، دوباره selection/fallback، per-string metadata، plural/message behavior و formatter output را مستقل اجرا کنید. یک صفحه که «ظاهراً بهتر شده» closure نیست. اگر یک dimension هنوز evidence کافی ندارد، state باید OPEN بماند. همچنین یک passing fa-IR اجازه نمیدهد درباره ar-EG یا همه localeها حکم کلی بدهید.
13. classificationهای Lab
Lab از این classificationها استفاده میکند: LOCALIZATION_HEALTHY، LOCALE_SELECTION_FAILURE، STRING_METADATA_FAILURE، PLURAL_MESSAGE_FAILURE، LOCALE_FORMATTING_FAILURE، MULTI_DIMENSION_LOCALIZATION_FAILURE و WEAK_LOCALIZATION_UNRESOLVED. یک MISSING_TRANSLATION_CONTAINED نیز برای fallback ایمن اما هنوز ناقص وجود دارد. classifier باید evidence هر dimension را مستقل بخواند.
14. Lab: هشت fixture و 64 assertion
هشت fixture شامل baseline سالم fa-IR→fa، انتخاب locale اشتباه، mixed-language metadata failure، خطای plural فارسی برای count=0 با English-style logic، formatter سختکدشده، صفحه «کاملاً ترجمهشده» با دو defect پنهان، یک case عمداً OPEN و transfer ar-EG هستند. evaluator برای هر case هشت خروجی میدهد و test مدیریتی دقیقاً ۶۴ assertion را کنترل میکند. همه دادهها synthetic و آفلایناند.
15. Exit checklist و transfer
قبل از خروج باید بتوانید بگویید requested locale چه بود، چه localeی انتخاب شد، fallback دقیقاً کجا رخ داد، language/direction کدام رشته غلط بود، plural و formatter چگونه مستقل تست شدند، کدام alternative رد شد، containment چه دامنهای داشت و closure با چه rerunی ثابت شد. در transfer، requested locale به ar-EG تغییر میکند، missing key عوض میشود و count/date-number expectation جدیدی وارد میشود؛ diagnosis باید از evidence تازه ساخته شود، نه از برچسبهای fa-IR.
ارزیابی
پاسخنامهی این درس در بستهی آموزش وجود ندارد؛ خودت جواب بده و صادقانه علامت بزن. «نیاز به مرور» درس را به صف تکرار میفرستد.
FLR-013-AS1 diagnosis
Build Localization Failure Diagnosis & Recovery Record v1 for the baseline failure. Trace requested→selected locale, fallback path, per-string metadata, plural behavior, formatter evidence, one competing explanation, and explicit OPEN cells.
FLR-013-AS2 decision
Choose a bounded containment/release action. Name the affected locale/message scope, what fallback is safe, what must be blocked or flagged, and the evidence required for release.
FLR-013-AS3 transfer
Rebuild the record for the ar-EG transfer fixture. Do not copy the fa-IR classification; use the new match, fallback, plural, and formatter evidence.
FLR-013-AS4 reflection
State the strongest localization claim supported, the strongest claim not supported, one residual risk, and the trigger for future re-review.
ملاکهای ارزیابی (rubric)
| Dimension | Critical | Sufficient evidence |
|---|---|---|
| Locale boundary and evidence | Yes | Requested, supported, selected, and fallback locale states are explicit; decisive claims trace to fixture or authority evidence. |
| Metadata / grammar / formatting discrimination | Yes | Language/direction, plural/message behavior, and locale-sensitive formatting are tested as separate dimensions; at least one tempting alternative is rejected. |
| Containment and closure | Yes | Fallback/release containment is bounded; recovery uses an independent locale-matrix rerun and preserves OPEN where evidence is missing. |
| Transfer | Yes | ar-EG is diagnosed from changed evidence rather than copied fa-IR labels. |
Blocking failures: no requested→selected trace; translated text treated as full proof; mixed-language direction mismatch silently closed; plural/formatter behavior untested; or no changed-locale evidence.
منابع و تازگی
مطالعهٔ موارد (case studies)
تصاویر درس
فایلهای آزمایشگاه
Implement an evidence-bounded evaluate(case) function over the eight synthetic locale cases. Diagnose locale selection, per-string language/direction metadata, plural/message behavior, and locale-sensitive formatting separately.
Do not treat translated text as proof of localization correctness. Preserve OPEN when authoritative metadata is unavailable. A strong solution recognizes the safe fa-IR→fa match, distinguishes wrong selection from a single missing key, catches the Persian count=0 plural defect, and rebuilds the diagnosis for the ar-EG transfer. No network or production data is required.
رسانه و اسلایدهای درس
فایلهای آموزشی (دانلود)