locale etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
locale etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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);
    }
}





19 Nisan 2016 Salı

std::get_money

Giriş
Şu satırı dahil ederiz.
#include <locale>
std::get_money metodu
Elimizde şöyle bir satır olsun.
$89.99
Bu satırı okumak için şöyle yaparız. Doldurulan parametre long double veya string olmalıdır. Değerin kuruş biriminde olduğu varsayalır.
long double price;   get_money only supports long double
ifstream filein("bookfile.txt");

filein.imbue(std::locale("en_US.UTF-8"));
filein >> std::get_money(price);
price /= 100;  //get_money uses the lowest denomination, in this case cents