הודעת שגיאה בעת הפעלת יישום או ניסיון לגשת לאתר אינטרנט במחשב שבו מותקן עדכון תוכנה מסוים של .NET Framework 2.0: "שם תרבות 'תרבות' אינו נתמך"

סימפטומים

במחשב שבו מותקן Microsoft Windows Server 2003, עליך להתקין את עדכון התוכנה Microsoft .NET Framework 2.0 המתואר במאמר הבא במאגר הידע Microsoft Knowledge Base:

928365 תיאור של עדכון האבטחה עבור .NET Framework 2.0 עבור Windows Server 2003, Windows XP ו-Windows 2000: 10 ביולי 2007

 כאשר תפעיל יישום או תנסה לגשת לאתר אינטרנט במחשב, ייתכן שתקבל את הודעת השגיאה הבאה:

הערה

[System.ArgumentException] : שם התרבות 'תרבות' אינו נתמך עבור 13 התרבויות הבאות: en-CB az-AZ-Latn uz-UZ-Latn sr-SP-Latn az-AZ-Cyrl uz-UZ-Cyrl sr-SP-Cyrl bs-BA-Cyrl sr-BA-Latn sr-BA-Cyrl bs-BA-Latn iu-CA-Latn div-MV

בנוסף, אם ליישום יש משאבים המשתמשים בתבנית שם התרבות הישנה, ואם שם התרבות של המשתמש משתמש בתבנית שם התרבות החדשה, היישום לא יוכל למצוא משאבים עבור תבנית שם התרבות הישנה.

גורם

עדכון התוכנה המוזכר בסעיף 'מאפייני הבעיה' הוא עדכון מצטבר עבור .NET Framework 2.0. עדכון זה כולל שינויים בשמות התרבויות. שמות התרבויות החדשים עוקבים אחר התחביר של תקני IETF (RFC 4646 ו- RFC 4647). השינויים בשמות התרבויות משפרים את יכולת הפעולה ההדדית על-ידי הקפדה על כך שלכל אזור יש מזהה עקבי.

המיפוי של שמות התרבויות הישנות לשמות התרבויות החדשים הוא כדלקמן:

שם תרבות ישנה שם תרבות חדש
az-AZ-Latn az-Latn-AZ
uz-UZ-Latn uz-latn-UZ
sr-SP-Latn sr-Latn-CS
az-AZ-Cyrl az-Cyrl-AZ
uz-UZ-Cyrl uz-Cyrl-UZ
sr-SP-Cyrl sr-Cyrl-CS
bs-BA-Cyrl bs-Cyrl-BA
sr-BA-Latn sr-Latn-BA
sr-BA-Cyrl sr-Cyrl-BA
bs-BA-latn bs-latn-BA
iu-CA-Latn iu-Latn-CA
div-MV dv-MV
en-CB EN-029

פתרון

כדי לעקוף בעיה זו, בנה תרבויות מותאמות אישית מהמיקומים החדשים המשתמשים בשמות התרבותיות הישנים. לשם כך, בצע את השלבים הבאים.

הערה עליך להתקין את .NET Framework 2.0 כדי להשתמש בתוכנית לדוגמה המסופקת כאן.

  1. צור יישום שניתן להשתמש בו לבניית תרבות מותאמת אישית. לשם כך, בצע את השלבים הבאים:

    1. לחץ על התחל, לחץ על הפעלה, הקלד פנקס רשימות ולאחר מכן לחץ על אישור.

    2. הדבק את הקוד הבא ב'פנקס רשימות'.

      using System;
      using System.Globalization;
      
      public class MakeCultures
      {
          static void Main()
          {
              CreateCopyCulture("en-029", "en-CB");
              CreateCopyCulture("az-Latn-AZ", "az-AZ-Latn");
              CreateCopyCulture("uz-Latn-UZ", "uz-UZ-Latn");
              CreateCopyCulture("sr-Latn-CS", "sr-SP-Latn");
              CreateCopyCulture("az-Cyrl-AZ", "az-AZ-Cyrl");
              CreateCopyCulture("uz-Cyrl-UZ", "uz-UZ-Cyrl");
              CreateCopyCulture("sr-Cyrl-CS", "sr-SP-Cyrl");
              CreateCopyCulture("bs-Cyrl-BA", "bs-BA-Cyrl");
              CreateCopyCulture("sr-Latn-BA", "sr-BA-Latn");
              CreateCopyCulture("sr-Cyrl-BA", "sr-BA-Cyrl");
              CreateCopyCulture("bs-Latn-BA", "bs-BA-Latn");
              CreateCopyCulture("iu-Latn-CA", "iu-CA-Latn");
              CreateCopyCulture("dv-MV", "div-MV");
      
      
          }
      
          static void CreateCopyCulture(string strRealName, string strAliasName)
          {
              try
              {
                  // Create a new culture based on the old name
                  CultureAndRegionInfoBuilder carib = new CultureAndRegionInfoBuilder(
                      strAliasName, CultureAndRegionModifiers.None);
      
                  carib.LoadDataFromCultureInfo(new CultureInfo(strRealName));
                  carib.LoadDataFromRegionInfo(new RegionInfo(strRealName));
      
                  carib.Register();
      
                  // Change the existing culture's parent to the old culture
                  carib = new CultureAndRegionInfoBuilder(strRealName, 
                                  CultureAndRegionModifiers.Replacement);
      
                  carib.Parent = new CultureInfo(strAliasName);
                  carib.Register();
      
                  // Verify they're registered...
                  CultureInfo ci = new CultureInfo(strAliasName);
                  Console.WriteLine("Aliased culture {0} has parent of {1}.", ci, ci.Parent);
                  ci = new CultureInfo(strRealName);
                  Console.WriteLine("\"Real\" culture {0} has parent of {1}.", ci, ci.Parent);
              }
              catch (Exception e)
              {
                  Console.WriteLine("Unable to create custom culture " + strAliasName);
                  Console.WriteLine(e);
              }
          }
      }
      
      

      הערה: תוכנית לדוגמה זו מגדירה את הורי התרבויות החדשות לתרבויות הישנות. ההורים של התרבויות הישנות לא יכולים להיות התרבויות החדשות בו זמנית, מכיוון שמצב זה יגרום לרקורסיה אינסופית במהלך חיפוש משאבים.

    3. בתפריט קובץ, לחץ על שמירה בשם.

    4. בתיבת הדו-שיח שמירה בשם, לחץ על המסמך שלי, הקלד MakeCultures.cs בתיבה שם הקובץ, לחץ על הכל Files בתיבה שמור כסוג ולאחר מכן לחץ על שמור.

    5. צא מפנקס הרשימות.

  2. הפעל את היישום שיצרת בשלב 1 כדי לבנות תרבות מותאמת אישית. לשם כך, בצע את השלבים הבאים:

    1. לחץ על התחל, לחץ על הפעלה, הקלד cmd ולאחר מכן לחץ על אישור.
    2. הקלד cd "המסמכים שלי" ולאחר מכן הקש ENTER
    3. הקלד %windir%\Microsoft.NET\Framework\v2.0.50727\csc /r: sysglobl.dll MakeCultures.cs ולאחר מכן הקש ENTER.
    4. הקלד MakeCultures.exe כדי להפעיל את התוכנית לבניית התרבות.

מצב

Microsoft אישרה שזוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".