LINUX.ORG.RU
Ответ на: комментарий от LamerOk

Ты напишешь, как не терять память на приведение к char* или все же признаешь, что ты тупица и тебе стоит почаще молчать?

Waterlaz ★★★★★
()
Ответ на: комментарий от shty

Где можно почитать, по-нормальному, про форматирование. Вот подумал, если сделать вот так:

#define doubleFormat xxx

int main()
{
   double a=5.1e6;
   cout << (xxx) << a;
   return 0;
}
Zodd ★★★★★
() автор топика
Ответ на: комментарий от shty

> у кого это у Вас?

Как у кого? У тех, кто «мы» в

Почему мы тогда должны признавать свое поражение? ;)


)))

LamerOk ★★★★★
()
Ответ на: комментарий от Waterlaz

> Ты напишешь, как не терять память на приведение к char*

Я не могу, меня пробивает на «хихи» )))

LamerOk ★★★★★
()
Ответ на: комментарий от Zodd

Почитай Саттера, у него эта тема раскрыта более-менее объективно.

Reset ★★★★★
()
Ответ на: комментарий от Reset

>Еще один неуч?

Или ты тоже будешь утверждать, что перегрузив (char*) для некоторого класса, ты сможешь нормально писать printf((char*)myFancyClass); ?

Waterlaz ★★★★★
()
Ответ на: комментарий от Waterlaz

Мне ничего. Прочто смешно читать какой тут бред пишут :)

Reset ★★★★★
()
Ответ на: комментарий от shty

>Тебе несколько раз приводили ссылки о том как делается в случае с С++, в том силе и для messaging, с примерами, но ты просто всё проигнорировал.

Нет, примерно такая херня

std::cout<<n<<resBundle.getMessage(" Files read\n");

никуда не годится.

Нужна такая херня

resBundle.getMessage(«%i Files read\n»).format(n);

По моей ссылке показано почему первый подход никуда не годится и должен использоваться только второй вариант.

Absurd ★★★
()
Ответ на: комментарий от JackyTreehorn

> cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n;

Просто пипец читабельность. Представляю, сколько говна на вас выльют переводчики ресурсов.

andreyu ★★★★★
()
Ответ на: комментарий от Absurd

По моей ссылке показано почему первый подход никуда не годится и должен использоваться только второй вариант.

по твоей ссылке баттхёрт хомячков :)

shty ★★★★★
()
Ответ на: комментарий от andreyu

> cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n;

Просто пипец читабельность. Представляю, сколько говна на вас выльют переводчики ресурсов.

у Вас в конторе переводчики лазят в код?

shty ★★★★★
()
Ответ на: комментарий от shty

А это ничего, что переводчики в программе перевода вместо фразы будут видеть какие-то несвязные клочки текста ?

Reset ★★★★★
()

Дискуссия уже давно потеряла смысл и превратилась в бессмысленный срач.
Было уже сказано с примерами:

1) Перевод должен быть отделён от ввода-вывода.

2) printf не справляется с задачей перевода: строка вроде «item 3 from 12» превращается в «यह आइटम पूरी तरह से 12 वस्तुओं से 3 नंबर है» (если гугл не врёт). Поэтому фразы должны быть с номерами аргументов типа %1 %2, как это есть в boost format.

3) Работать лучше с тем, что удобнее конкретному программеру. Но потоки являются типобезопасными, в этом есть их некоторое приемущество.

anonymous
()
Ответ на: комментарий от Reset

А это ничего, что переводчики в программе перевода вместо фразы будут видеть какие-то несвязные клочки текста ?

да не будут они их видеть, с чего Вы это взяли?

shty ★★★★★
()
Ответ на: комментарий от shty

Это почему это? клочок текста один — msgs.get (cat, 1, CODE1, def). клочок текста два — msgs.get (cat, 1, CODE2, def). а связи между ними не будет. Такое корректно перевести вообще невозможно.

Reset ★★★★★
()
Ответ на: комментарий от anonymous

Срач затянулся

>Дискуссия уже давно потеряла смысл и превратилась в бессмысленный срач.

Да и попкорн кончился. :)

pathfinder ★★★★
()
Ответ на: комментарий от shty

> у Вас в конторе переводчики лазят в код?

Переводчики лезут в ресурсы. И если в ресурсах одна фраза будет поделена на куски, то переводчики передадут вам пламенный привет.

andreyu ★★★★★
()

cout работает с частями текста, поэтому не пригоден для перевода

printf работает со строго заданной последовательностью аргументов, поэтому не пригоден для перевода. «item 3 from 12» для другого языка требует изменить порядок аргументов «यह मद 12 मदों से 3 नंबर है».

Пора бы понять, что они оба не справляются с переводом.

anonymous
()
Ответ на: комментарий от pathfinder

У меня вопрос ко всем участникам этого треда. Немцы и французы спорят: какой язык лучше. Одни говорят - немецкий, другие - французский.

Как вы думаете кто из них прав?

pathfinder ★★★★
()
Ответ на: комментарий от Reset

Это почему это? клочок текста один — msgs.get (cat, 1, CODE1, def). клочок текста два — msgs.get (cat, 1, CODE2, def). а связи между ними не будет. Такое корректно перевести вообще невозможно.

а Вы им будете давать типы аргументов вписывать, да?

или таки локализованная строка таки будет выглядеть «## of ## files loaded» и потом (для printf) по ней пройдёт автопарсер и по заданным правилам приведёт строку к «%d of %d files loaded» и положит её в ресурсы?

shty ★★★★★
()
Ответ на: Срач затянулся от pathfinder

>Дискуссия уже давно потеряла смысл и превратилась в бессмысленный срач.

Да и попкорн кончился. :)

сходи поднови запасы

shty ★★★★★
()
Ответ на: комментарий от pathfinder

У меня вопрос ко всем участникам этого треда. Немцы и французы спорят: какой язык лучше. Одни говорят - немецкий, другие - французский.

Как вы думаете кто из них прав?

правы англичане положившее на обоих болт и искренне удивляющиеся когда кто-то не говорит по ихнему :)

shty ★★★★★
()
Ответ на: комментарий от shty

> > Переводчики лезут в ресурсы

а это не есть гуд


Это еще почему? Или мы под ресурсами понимаем разные вещи?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

> > Переводчики лезут в ресурсы

а это не есть гуд

Это еще почему? Или мы под ресурсами понимаем разные вещи?

ресурсы должны собираться автоматически, вот как у Qt translator (или как там его) сделано, иначе если у тебя вдруг внутренний формат поменяется (а такое бывает) или ещё что то твои переводчики (или кого ты там посадишь) будут работать ишаками перебивая ручками циферки

shty ★★★★★
()
Ответ на: комментарий от Reset

А ничего, что при твоем подходе будут две строки - " of " и " files loaded" ? И как это переводить?

«ты не понял, любитель братьев наших меньших» (c)

какая разница что там будет потом, переводчик видит и работает со строками целиком, а уж как потом они транслируются и хранится - никого не волнует

shty ★★★★★
()
Ответ на: комментарий от Reset

А где тут противоречие с тем, что в ресурсы для перевода придется таки лезть qt linguist'ом ?

перечитай то о чём говорилось и подумай

shty ★★★★★
()
Ответ на: комментарий от shty

> какая разница что там будет потом, переводчик видит и работает со строками целиком, а уж как потом они транслируются и хранится - никого не волнует

Это как это? То есть код генерится по ресурсам, а не наоборот? Тогда веселая жизнь обеспечена программистам.

Reset ★★★★★
()
Ответ на: комментарий от Reset

> какая разница что там будет потом, переводчик видит и работает со строками целиком, а уж как потом они транслируются и хранится - никого не волнует

Это как это? То есть код генерится по ресурсам, а не наоборот? Тогда веселая жизнь обеспечена программистам.

ну зачем Вы глупости говорите, Вы же умный человек :)

код пишут программисты, но чтобы не учить переводчиков в каком внутреннем формате это всё хранится и не переучивать если он внезапно поменялся делается небольшая тулза для них, которая человечий вид переводит во внутренний формат хранения, а там уже пофиг чем и как выводить

эх, не общались Вы с гейм-дизайнерами по рабочим вопросам :)

shty ★★★★★
()
Ответ на: комментарий от shty

Возьмем например qt. Я делаю так tr(«%1 of %2 files loaded»), потом натравливаю lupdate, который генерит ts файл. ts файл открывается в лингвисте переводчиками, которые увидят там полную фразу «%1 of %2 files loaded». В случае с gettext механизм аналогичен.

А как быть вот с этим cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n; ? Опишите механизм полностью. Мне не понятно каким образом в ресурсах возникнет полная фраза, а не ёё куски.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Что ты уцепился за этот кусок? Меня попросили «перевести» дословно. В продакшне я бы тоже не стал такое писать.
У меня ваще опыта локализации нет, если честно, я специализируюсь по легаси.

JackyTreehorn
()
Ответ на: комментарий от Reset

Я понимаю, что ты бы при желании все законсткастил, а я привык смотреть на сигнатуры ;)

JackyTreehorn
()
Ответ на: комментарий от shty

> ресурсы должны собираться автоматически, вот как у Qt translator (или как там его) сделано, иначе если у тебя вдруг внутренний формат поменяется (а такое бывает) или ещё что то твои переводчики (или кого ты там посадишь) будут работать ишаками перебивая ручками циферки

Значит мы все же говорим о разных ресурсах. Какая разница переводчикам, какой там внутренний формат? Они работают со строками. С целыми строками. В моем случае это строки диалогов персонажей, объединенных в группы.
Так что не нужно мне рассказывать про некий геймдейв. Вы ведь преподаватель, а не геймдевелопер.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Может, к нему бывшие студенты-геймдевы приходят и рассказывают ;)

JackyTreehorn
()
Ответ на: комментарий от Reset

А как быть вот с этим cout << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def) << n; ? Опишите механизм полностью. Мне не понятно каким образом в ресурсах возникнет полная фраза, а не ёё куски.

прости дорогой, но твоя проблема в том что ты не понимаешь концепции потоков, это не плохо, это просто вот так сложилось :)

вот сейчас ты путаешь вывод и хранение, к примеру :)

следует относиться относится к приёмнику потока как к буферу, а не устройству вывода

что мешает сделать вот так?

UnicodeString result;
    result = MessageFormat::format(
       "At {1,time} on {1,date}, there was {2} on planet{0,number,integer}.",
       arguments,
       3,
       result,
       err);

а внутри использовать твою «любимую» ;) фразу:

result << msgs.get (cat, 1, CODE1, def) << i << msgs.get (cat, 1, CODE2, def);

что мешает тебе использовать класс для хранения строки целиком и по запросу извлекать из словаря все составляющие?

тебе лучше и дальше использовать концепцию форматирования строк в стиле printf и не забивать себе голову :)

shty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.