Методы лучших для локализованных текстов в C++ межплатформенные приложения?

Неустранимая ошибка: использование $ this, если не в контексте объекта

$this - специальная переменная в PHP , которая не может быть назначена. Если он доступен в контексте, где он не существует, эта фатальная ошибка указывается.

Эта ошибка может возникнуть:

  1. Если нестатический метод называется статическим , Пример:
    class Foo {
       protected $var;
       public function __construct($var) {
           $this->var = $var;
       }
    
       public static function bar () {
           // ^^^^^^
           echo $this->var;
           //   ^^^^^
       }
    }
    
    Foo::bar();
    
    Как исправить: снова просмотрите свой код, $this может использоваться только в контексте объекта и никогда не должен использоваться в статическом методе. Кроме того, статический метод не должен обращаться к нестатистическому свойству. Используйте self::$static_property для доступа к статическому свойству.
  2. Если код из метода класса был скопирован в нормальную функцию или только глобальную область и , сохраняя специальную функцию $this переменная. Как исправить: Просмотрите код и замените $this на другую переменную замещения.

Вопросы, относящиеся:

  1. Вызов нестатический метод как статический: PHP Неустранимая ошибка: использование $ this, если не в объектном контексте
  2. Копировать код: Неустранимая ошибка: использование $ this, если не в объекте context
  3. Все «Использование $ this, если не в контексте объекта» Вопросы по Stackoverflow

23
задан ire_and_curses 27 March 2011 в 22:07
поделиться

3 ответа

В небольшой Video Game Company, Черных Студиях Фонаря, я был Ведущим разработчиком для игры по имени Lionel Trains DS. Мы локализовали на английский, испанский, французский и немецкий язык. Мы знали все языки впереди, таким образом, включая их во время компиляции была единственная опция. (Они записываются к ROM, Вы видите)

, я могу дать Вам информацию о некоторых вещах, которые мы сделали. Наши строки были загружены в массив при запуске на основе выбора языка плеера. Каждый отдельный язык вошел в отдельный файл со всеми строками в том же порядке. Строка 1 всегда была заголовком игры, представьте в виде строки 2 всегда первый пункт меню и так далее. Мы выключили массивы enum, как integer, индексация очень быстра, и в играх, скорость - все. (Решение, связанное в одном из другого использования ответов string поиски, которых я был бы склонен избегать.) При отображении строк мы использовали printf() функция типа для замены маркеров значениями". Поезд 3 отбывает из города 1. "

Теперь для некоторых ловушек.

1) Между языками, порядок фразы полностью отличается". Поезд 3 отбывает из города 1. " переведенный в немецкие и бэкэнды, являющиеся" Из Города 1, Поезд 3 отбывает ". Если Вы используете что-то как printf(), и Ваша строка" , Поезд %d отбывает из города %d. " немец закончит тем, что говорил" Из Города 3, Поезд 1 отбывает. ", который является абсолютно неправильным. Мы решили это, вынудив перевод сохранить тот же порядок слов, но мы закончили с некоторым симпатичным поврежденным немецким языком. Если бы я должен был сделать это снова, я записал бы функцию, которая берет строку и основанный на нуле массив значений, чтобы вставить его. Тогда я использовал бы маркеры как %0 и %1, в основном встраивая индекс массива в строку. Обновление: Leffler @Jonathan указал, что совместимое POSIX printf() поддержки с помощью %2$s маркеры типа, где 2$ часть дает команду printf() заполнять тот маркер вторым дополнительным параметром. Это было бы довольно удобно, пока это достаточно быстро. Настраиваемое решение может все еще быть быстрее, таким образом, Вы захотите удостовериться и протестировать обоих.

2) Языки варьируются значительно по длине. То, что было 30 символами на английском языке, иногда выходило к целых 110 символам на немецком языке. Это означало, что часто не будет соответствовать экранам, мы ставили его. Это - вероятно, меньше беспокойства об играх ПК/Mac, но если Вы сделаете какую-либо работу, где текст должен поместиться в определенное поле, Вы захотите рассмотреть это. Для решения этой проблемы мы разделили как можно больше прилагательных из нашего текста для других языков. Это сократило предложение, но сохранило значение при выпуске немного разновидность. Я позже разработал приложение, которое мы могли использовать, который будет содержать шрифт и размер поля и позволять переводчикам делать свои собственные модификации для получения текста поле. Не уверенный, если они когда-нибудь реализовывали его. Вы могли бы также рассмотреть области прокрутки наличия текста, если у Вас есть эта проблема.

3) До кросс-платформенных движений, мы записали в значительной степени чистый C++ для нашей системы Локализации. Мы записали пользовательские закодированные двоичные файлы для загрузки, и пользовательская программа для преобразования из CSV текста языка в .h с перечислением и файлом к карте языка, и .lang для каждого языка. Определенной вещью большей части платформы, которую мы использовали, были шрифты и эти printf() функция, но Вы будете иметь что-то подходящим для того, чтобы где бы вы ни были разработать или могли записать Ваше собственное в случае необходимости.

17
ответ дан Aaron 29 November 2019 в 02:31
поделиться

GNU Gettext делает все это.

7
ответ дан Milan Babuškov 29 November 2019 в 02:31
поделиться

Не будет никаких дополнительных функций в C++ 0x стандарт, насколько я могу сказать. Я подозреваю, что Комитет считает это вопросом для сторонних библиотек.

0
ответ дан David Thornley 29 November 2019 в 02:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: