문제

위성 어셈블리를 사용하여 모든 현지화 리소스를 C# 응용 프로그램에 보관하고 있습니다.

내가해야 할 일은 응용 프로그램에 존재하는 모든 사용 가능한 언어로 GUI에서 메뉴를 만드는 것입니다. 정보를 동적으로 얻을 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

이 기능은 APP_Globalresources 폴더에 설치된 모든 배양 배열을 반환합니다. 요구에 따라 검색 경로를 변경하십시오. 불변 문화의 경우 "자동"을 반환합니다.

public static string[] GetInstalledCultures()
{
    List<string> cultures = new List<string>();
    foreach (string file in Directory.GetFiles(HttpContext.Current.Server.MapPath("/App_GlobalResources"), \\Change folder to search in if needed.
        "*.resx", SearchOption.TopDirectoryOnly))
    {
        string name = file.Split('\\').Last();
        name = name.Split('.')[1];

        cultures.Add(name != "resx" ? name : "auto"); \\Change "auto" to something else like "en-US" if needed.
    }
    return cultures.ToArray();
}

전체 CultureInfo 인스턴스를 얻는 더 많은 기능을 위해이 제품을 사용할 수도 있습니다.

public static CultureInfo[] GetInstalledCultures()
{
    List<CultureInfo> cultures = new List<CultureInfo>();
    foreach (string file in Directory.GetFiles(HttpContext.Current.Server.MapPath("/App_GlobalResources"), "*.resx", SearchOption.TopDirectoryOnly))
    {
        string name = file.Split('\\').Last();
        name = name.Split('.')[1];

     string culture = name != "resx" ? name : "en-US";
     cultures.Add(new CultureInfo(culture));
    }
    return cultures.ToArray();
}

다른 팁

특정 언어에 대한 각 위성 어셈블리는 동일하게 명명되었지만 특정 문화 (예 : FR 또는 FR-CA)의 이름을 따서 명명 된 하위 폴더에 있습니다.
어쩌면이 사실을 사용하고 폴더 계층 구조를 스캔하여 해당 메뉴를 동적으로 구축 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top