اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
دو دقیقه
در قسمت قبلی با نحوهی نسخه بندی اسمبلیها آشنا شدیم؛ ولی به غیر از نسخه
بندی، فرهنگ (culture) هم قسمتی از عوامل شناسایی یک اسمبلی است. به عنوان
نمونه من میتوانم یک اسمبلی داشته باشم که برای زبان آلمانی، انگلیسی
آمریکایی، انگلیسی بریتانیایی و ... آماده شده است.
شناسایی فرهنگ یک اسمبلی از طریق یک رشته است که شامل یک تگ اصلی و ثانویه طبق استاندارد RFC1766 میباشد. جدول زیر تعدادی از این تگها را نمایش میدهد.
تگ اولیه | تگ ثانویه | فرهنگ مربوطه |
De | - | آلمانی |
De | AT | آلمانی اتریشی |
De | CH | آلمانی سوئیسی |
En | - | انگلیسی |
En | GB | انگلیسی بریتانیا |
En | US | انگلیسی آمریکایی |
در حالت عادی که یک اسمبلی را که تنها شامل کد میشود، دارید برای آن culture تعریف نمیشود. چون مشخصهی خاصی ندارد که
به آن فرهنگ خاصی هم تعلق بگیرد. به این اسمبلیها Culture Neutral یا خنثی میگویند.
حال اگر شما در حال طراحی برنامهای هستید که منابع Resources شامل مشخصههای فرهنگی و منطقهای میشوند، مایکروسافت به شدت توصیه میکند که بحث کد
را از منابع جدا کرده و اسمبلی هایشان جدا شوند. یک اسمبلی برای کدها و
منابع مشترک استفاده شود که هیچ خصوصیت فرهنگی و منطقهای خاصی ندارد. حال
یک یا چند اسمبلی جداگانه برای منابع ساخته که هر کدام از آنها به فرهنگ و
منطقهی خاصی اشاره میکنند. به این نوع اسمبلیها Satellite Assembly یا
اسمبلی ماهوارهای گویند.
عموما از ابزار AL برای ساخت اسمبلیهای ماهواره ای استفاده میشود. دلیل
آن هم اینست که این اسمبلیها چون عموما کدی را شامل نمیشوند، ساخت آنها از طریق کامپایلر ممکن نیست. برای معرفی یک اسمبلی ماهوارهای باید از سوئیچ
c یا culture استفاده کرد و به عنوان ورودی، این سوئیچ تگها را
به آن نسبت داد.
/c[ulture]:En-US
بعد از اینکه اسمبلی ساخته شد در مسیر برنامه، در یک زیردایرکتوری که با همان شناسهی تگها نام گرفته است، ذخیره میکنیم. به عنوان مثال اگر مسیر زیر، مسیر برنامه ما باشد:
C:\MyApp
C:\MyApp\en-US
System.Resources.ResourceManager
به هر حال اگر کدهای شما در فرهنگ و منطقه تاثیر دارند و دوست دارید اسمبلی کدها هم به عنوان یک اسمبلی ماهوارهای شناخته شوند از خصوصیت زیر برای معرفی اسمبلی خود استفاده کنید:
System.Reflection.AssemblyCultureAttribute =============== [assembly:AssemblyCulture("de-CH")]
در AL هم از سوئیچ Culture/ استفاده میشود. به طور عادی شما نباید یک اسمبلی بسازید که به اسمبلی ماهواره ای اشاره میکند و جداول متادیتا اسمبلیها باید به اسمبلیهای خنثی اشاره کنند. اگر شما قصد دسترسی به اعضاء و خصوصیات یک اسمبلی ماهوارهای را دارید باید از طریق Reflection که در آینده در مورد آن صحبت خواهد شد اینکار را انجام دهید.( در کتاب جفری ریچر به فصل بیست و سوم Assembly Loading and Reflection مراجعه شود)