26 Mayıs 2016 Perşembe

C++ ile Locale

Locale atamak

C++ programlarında global bir locale bulunur. Bu locale ilk açılışta std::locale::classic() olarak atanmıştır.

Global locale nesnesini değiştirmek için şu yöntemlerden biri kullanılabilir

1. "If a programmer wants to honor local conventions it should use corresponding locale objects. The static member function global of the class locale can be used to install a global locale object."

std::locale::global(std::locale(""));
Programın C locale'i başladığını ancak daha sonra değişitirildiğini gösteren küçük bir örnek
int main(void)
{
  std::cout << std::locale().name() << std::endl;//C locale ile başlar
  std::locale::global(std::locale(""));//Kullanıcının locale'ini atar
  std::cout << std::locale().name() << std::endl;
  std::locale::global(std::locale("C"));//C locale'ini atar
  std::cout << std::locale().name() << std::endl;
  return 0;
}
Çıktı olarak şunu verir
C
French_Canada.1252
C

2. setlocale metodu kullanılır.  std::setlocale yazısına taşıdım.

Locale İsimleri
Eğer belli bir ülkenin locale'i kullanılmak istenirse "" yerine locale ismini kullanmak gerekir.Ancak kullanılan string ismi platforma göre değişkenlik gösterir. Linux üzerinde seçili locale isimini görmek için "locale" komutu kullanılabilir.

Java gibi dillerde locale isimleri standartlaşmıştır.  Locale.getISOLanguages() ve Locale.getISOCountries() metodları kullanılabilir. Java'da şöyle yaparız:
public final class IsoUtil {
    private static final Set<String> ISO_LANGUAGES = new HashSet<String>
        (Arrays.asList(Locale.getISOLanguages()));
    private static final Set<String> ISO_COUNTRIES = new HashSet<String>
        (Arrays.asList(Locale.getISOCountries()));

    private IsoUtil() {}

    public static boolean isValidISOLanguage(String s) {
        return ISO_LANGUAGES.contains(s);
    }

    public static boolean isValidISOCountry(String s) {
        return ISO_COUNTRIES.contains(s);
    }
}





Hiç yorum yok:

Yorum Gönder