Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Метрическая и не Метрическая системы, Локализация, глобализация и т.д. 
:(
    Опции темы
Rapalex
Дата 30.6.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Ситуация следующая. Существует продукт, который может заинтересовать людей например из США. А они думаю не в метрах и мм, а в дюймах, и моя задача приспособить продукт для них.
Первая проблема, это надписи на диалогах (на статиках). Банальная ситуация, 2 поля ввода "Длина:" и "Ширина:" нужно на каждом таком статике дописать ", мм" или дюйм. Ну я программно и дописываю, но мне это не нравится, может у кого-то есть предложение как это усовершенствовать? Есть-ли какой-то встроенный инструмент локализации, то-ли глобализации который позволяет это автоматизировать?


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Earnest
Дата 30.6.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



"Глобального" инструмента не знаю...
Я предпочитаю писать единицы прямо в редакторе, так выглядит естественнее: 100.5 ежиков.
Требуется, конечно, доработка редактора: пользователь не нужно заставлять вводить единицы во время редактирования, т.е. как ему удобно - может стереть, а может не просто число поменять. Заодно в этот редактор можно встроить форматирование (число цифр после запятой), разборки с десятичной точкой (то ли точка, то ли запятая...) и т.д.
Но тебе ведь надо еще и пересчитать значения.


--------------------
...
PM   Вверх
Lazin
Дата 30.6.2009, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 2
Всего: 154



Цитата(Rapalex @  30.6.2009,  15:26 Найти цитируемый пост)
Есть-ли какой-то встроенный инструмент локализации, то-ли глобализации который позволяет это автоматизировать?

есть, называется std::locale, он конечно не переводит сантиметры в дюймы, но зато он позволяет правильно отображать числа с учетом региональных настроек, к примеру использовать принятый в той или иной стране десятичный разделитель...
PM MAIL Skype GTalk   Вверх
Rapalex
Дата 9.7.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Earnest, спасибо, подумаю ад твоей реализацией.
Lazin, и тебе спасибо, хоть про локаль я знал.
Кстати на сколько я понял локаль влияет на printf и тому подобные С-рантайм функции.
А есть же ещё и FormatMessage, что-то на неё влияет?
Рассказывайте всё что знаете, для меня это фоматирование до сих пор тёмное место ))


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Earnest
Дата 10.7.2009, 07:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Есть еще виндовская setLocale, которая должна влиять на FormatMessage (и на функции RTL тоже, в принципе). Как эти 2 функции связаны - не знаю, никогда особо не интересовалась. Но помню что в одной из книг Майерса (кажется, Эффективное использование STL) есть целая глава на тему локалей. В отличие от MSDN, где не густо информации.


--------------------
...
PM   Вверх
Rapalex
Дата 15.7.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Винда у меня русская, потому и локаль для потока стоит русская. Попробывал функцию GetNumberFormat и получил:
Код

    LCID nLocale = GetThreadLocale();
    CString s;
    LPTSTR sz = s.GetBuffer(200);
    int i = GetNumberFormat(nLocale, 0, TEXT("33000.55"), NULL, sz, 200);
    ASSERT(s == L""33 000,55""); // Где-то так

а рядом вызов
Код

m_str2.FormatMessage(_T("%1!d!"), 31000);

пробел после 31 не вытыкает (((
Не могу понять логики создателей этих функций!


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
Lazin
Дата 15.7.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 2
Всего: 154



на printf влияет crt-шная функция set_locale, а с потоками(iostream) можно работать индивидуально, передавая в конструктор объект std::locale, а можно установить глобальную локаль, для всех потоков
PM MAIL Skype GTalk   Вверх
Rapalex
Дата 18.8.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 732
Регистрация: 20.1.2006
Где: Украина -> Ник олаев

Репутация: 6
Всего: 8



Сделал 
Код

setlocale(LC_ALL, "rus");

После чего 
Код

m_str1.Format(_T("%f"), 31000.5);

вернуло 31000,500000.
В принципе верно но все равно не в виндовом формате.


--------------------
In vitium ducit culpae fuga.
Желание избежать ошибки вовлекает в другую.
(Horatius)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.