Я работал над проектом для своего предыдущего работодателя, который использовал.NET, и был созданный в формате .resx, который мы использовали. У нас в основном был файл, который имел все переводы в .resx файле, и затем нескольких файлах с различными переводами. Последствие этого - то, что необходимо быть очень прилежными об обеспечении, что все строки, видимые в приложении, хранятся в .resx, и каждый раз, когда каждый изменяется, необходимо обновить все языки, которые Вы поддерживаете.
, Если Вы становитесь ленивыми и не уведомляете людей, отвечающих за переводы, или Вы встраиваете строки, не проходя Вашу систему локализации, это будет кошмар, чтобы попытаться зафиксировать его позже. Точно так же, если локализация будет запоздалой мыслью, будет очень трудно поместить на месте. Нижняя строка, если у Вас нет всех видимых строк сохраненными внешне в стандартном месте, будет очень трудно найти все, что должно быть локализовано.
Еще одно примечание, очень строго постарайтесь не связывать видимые строки непосредственно, такой как
String message = "The " + item + " is on sale!";
Вместо этого необходимо использовать что-то как
String message = String.Format("The {0} is on sale!", item);
, причина этого состоит в том, что различные языки часто заказывают слова по-другому, и конкатенирующие строки непосредственно будут нуждаться в новой сборке для фиксации, но если Вы использовали некоторый строковый заменяющий механизм как вышеупомянутый, можно изменить .resx файл (или безотносительно файлов локализации, которые Вы используете) для определенного языка, который должен переупорядочить слова.
В C ++, поскольку количество шаблонов, которые вы можете делать на C ++, ограничено их сложностью.
Однако в D ... до того, как существовала CTFE (оценка функций во время компиляции), нам приходилось использовать шаблоны для обработки строки . Это также причина того, что большие искаженные символы сжимаются в DMD - строки, используемые в качестве аргументов шаблона, становятся частью искаженных имен символов, и при создании экземпляров шаблонов с более длинными сегментами кода (например) результирующие размеры символов резко взорвали бы формат объекта. .
Сейчас лучше. Но в целом шаблоны по-прежнему вызывают большое количество раздутий по простой причине - они быстрее анализируют и являются более мощными, чем в C ++, поэтому люди, естественно, используют их гораздо чаще (даже в тех случаях, когда технически не нужны шаблоны). Должен признать, что я здесь один из главных нарушителей (взгляните на tools.base , если хотите, но не забудьте держать под рукой мешок для барахла - файл фактически на 90% состоит из кода шаблона).
Я думаю, вам нужно найти более старый компилятор, чтобы увидеть на практике раздувание кода шаблона. Современные компиляторы C ++ (и компоновщики) на некоторое время смогли его оптимизировать.
Раздутый шаблон НЕ проблема (это умственная проблема, а не проблема кода).
Да, это может стать большим. Но какова альтернатива?
Вы можете написать весь код вручную (по одному разу для каждого типа). Как вы думаете, если написать его вручную, он станет меньше. Компилятор создает экземпляры только тех версий, которые ему действительно нужны, а компоновщик удаляет несколько копий, разбросанных по единицам компиляции.
Так что фактического раздувания нет.
Это просто создание того, что вы используете. Если вы используете много разных типов, вам нужно написать больше кода.
Я думаю, это в основном умственное раздувание. Следующий программист, который будет работать над вашим кодом, должен будет сначала выяснить, какое его подмножество имеет значение.
Раздутость инстансов шаблонов - это вопрос на практике, потому что она может увеличить (намного!!!) время компиляции и компоновки.
Я лично считаю, что проблема c++ №1 - время компиляции, и это в основном из-за шаблонов.
Я работал над проектом, в котором было около 50 либ. У нас была своя система rtti, использующая шаблоны. Мне пришлось переписывать из-за раздутости шаблонов
Вот некоторые цифры: