1 Отредактировано luara (2015-04-14 14:46:53)

Тема: Мультиязычность: как добавить новые данные

Добрый день.

У меня есть сайт на Symfony. Версию не скажу - ибо не знаю. На хостинг доступа нет, а админке, вроде бы, нет данной информации.

Он поддерживает два языка.

Есть файл messages, содержащий перевод, в таком вот виде:
     <trans-unit>
        <source>Синема Сити Киев</source>
        <target>Сінема Сіті Київ</target>
      </trans-unit>

Я добавила в него новые необходимые слова и словосочетания для перевода слов, содержащихся в новом диве в хедере, но они не подтягиваются.

Подскажите, пожалуйста, какими методами можно заставить участвовать новую часть сайта в "мультиязычности".

Спасибо.

2

Re: Мультиязычность: как добавить новые данные

luara пишет:

Подскажите, пожалуйста, какими методами можно заставить участвовать новую часть сайта в "мультиязычности".

Если у вас нет доступа к хостингу, то никакими. Нужно сбросить кеш, чтобы новые переводы из XLIFF файла попали в закешированный каталог. Без доступа к консоли я не знаю нормальных способов сбросить кеш, а без этого Симфони до изменений в вашем файле переводов никакого дела не будет.

Теоретически, если у вас есть доступ к файловой системе, то вы можете попробовать удалить директорию с кешем вручную. Либо только кеш переводов в ней. Но это крайне экстремальный способ, в случае любой ошибки ваш сайт ляжет.

3 Отредактировано luara (2015-04-14 16:00:28)

Re: Мультиязычность: как добавить новые данные

Сбросить кеш нужно откуда, с хостинга?

Я забыла написать:
Я меняла текст в уже существующих блоках, соответственно и его перевод, - он подтягивается, не подтягивается только перевод вновь созданных блоков.

Совет остается прежним: сбросить кеш сайта?

Хотя сам блок, конечно, на сайте виден))

И, скажите еще пожалуйста, чем чреват сброс кеша правильным путем, кроме того, что заново будет загружена таблица перевода?

4

Re: Мультиязычность: как добавить новые данные

luara пишет:

Сбросить кеш нужно откуда, с хостинга?

Симфони при первом запуске (после удаления кеша) компилит свою конфигурацию, и дальше все исходные конфигурационные файлы уже не читает, до следующего сброса кеша.

luara пишет:

Я меняла текст в уже существующих блоках, соответственно и его перевод, - он подтягивается, не подтягивается только перевод вновь созданных блоков.

Это странно, хотя и вполне возможно. При нормальной настройке перевод из XLIFF читаться не должен при его обновлении (поскольку для этого нужно постоянно, т.е. при каждом запросе, проверять исходные файлы переводов на предмет обновления). Возможно, программист решил уменьшить количество вопросов «а почему у нас ничего не работает» и включил проверку. default/smile

Если добавлялись именно сами файлы переводов (т.е. новые .xliff), то для того, чтобы Симфони их увидела, она должна осуществить поиск переводов по всем сконфигурированным путям. А это делается только при сбросе кеша.

Вообще, сложно диагностировать, что происходит на каком-то проекте, который ты никогда в глаза не видел, и что наваял там программист — понятия не имеешь. default/smile Тем более, что последний раз я видел живую первую Симфони года так три назад.

luara пишет:

чем чреват сброс кеша правильным путем

Сброс кеша, без разницы, каким путем — это перекомпиляция конфигурации проекта. Если вдруг за время там что-то сломалось (или кто-то случайно что-то сломал), то после сброса кеша при компиляции возникнет ошибка, кеш не создастся и проект просто не запустится. Здесь рекомендуется скопировать куда-то директорию с кешем, после чего грохнуть его, и в случае проблемы — перезалить старым кешем и решать проблему с компиляцией, пока живой сайт работает.

Сброс кеша неправильным путем (удаление через ftp например) чреват тем, что кеш не удаляется сразу, и любой запрос страницы сайта в момент удаления запустит процесс создания нового. В результате кеш может создаться с ошибками. Это особенно актуально для проектов с высокой посещаемостью.

Безопаснее всего было бы пнуть создателя проекта, чтобы он решил проблему, чтобы не было потом мучительно больно.

5

Re: Мультиязычность: как добавить новые данные

Спасибо.

У меня, как у любого чайника, есть еще вопросы))

Сбрасывать кеш как-то страшновато)) И сначала я хотела уточнить вот что (в интернете не нашла ничего, что могло бы мне просветить данный вопрос).

А как организуется вызов файла-переводчика?

Я думаю, может мне нужно дописать во вновь созданный блок с текстом функцию, которая вызывает этот перевод при клике на иконку языка?

Или данная функция прописывается для всех блоков на странице где-нибудь вначале исполняемого файла?

6

Re: Мультиязычность: как добавить новые данные

Давайте попробуем думать логически:
1. "Сброс кеша, без разницы, каким путем — это перекомпиляция конфигурации проекта. Если вдруг за время там что-то сломалось (или кто-то случайно что-то сломал), то после сброса кеша при компиляции возникнет ошибка, кеш не создастся и проект просто не запустится."
2. Исходя из п. 1 получается что кто-то мог уже вносить какие-то изменения и что-то сломать в самом проекте, но сайт работает потому что кеш не чистили.
3. Внимание вопрос, исходя и п.1 и п.2, что будет если внести какие-то изменения (и, возможно, что-то сломать) в самом проекте, но кеш не чистить?


PS: Лучше обратитесь к создателю. Ну или делайте что хотите, не забывая обращаться к Создателю default/smile

7

Re: Мультиязычность: как добавить новые данные

Спасибо)

Если вы имеете ввиду создателя) этого проекта - это невозможно, он уехал за границу.
Связь с ним есть, но на вопросы членораздельно он, к сожалению, не отвечает)

Поэтому мне приходится доставать всех вокруг... и не только))

8

Re: Мультиязычность: как добавить новые данные

luara пишет:

Связь с ним есть, но на вопросы членораздельно он, к сожалению, не отвечает)

Плохой, негодный создатель... default/smile Хотя, если таких, как вы, у него много, то его можно понять. Жить же тоже когда-нибудь надо. default/smile

luara пишет:

А как организуется вызов файла-переводчика?

В случае любого проекта на базе Симфони, и вашего в частности, все зависит от фантазии и степени адекватности программиста(ов), создававшего проект. Фреймворк дает весьма большую свободу действий, на одну и ту же задачу может существовать даже несколько разных «канонических» (т.е. общепринятых) решений. Это, чтобы вы не питали иллюзий по поводу того, что я или кто-либо, не зная проекта и не видя кода, может с уверенностью утверждать, как там что-либо внутри устроено.

Если вы просто создали новый див в хидере, и просто поместили туда текст, то переводчик таки да, никак не узнает о том, что этот текст нужно переводить. default/smile Если это php-шаблон, то туда вместо

<div>Синема Сити Киев</div>

можно поместить что-то вроде:

<div><?php echo __('Синема Сити Киев') ?></div>

и посмотреть на результат (при условии, что ваш XLIFF называется messages.uk.xliff).

Вот старый добрый мануал, на всякий:
http://symfony.com/legacy/doc/jobeet/1_ … m=Doctrine

9 Отредактировано luara (2015-04-16 10:52:27)

Re: Мультиязычность: как добавить новые данные

relo_san пишет:

Плохой, негодный создатель...  Хотя, если таких, как вы, у него много, то его можно понять. Жить же тоже когда-нибудь надо.

default/smile
Я все понимаю, не осуждаю, и поэтому пишу здесь:)

Проблема решена. Большое спасибо всем и особенно relo_san!

Для таких же как и я опишу "что помогло".

Файл перевода у меня называется messages.xml
в котором второй строчкой стоит (наверное это стандарт):

<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd">

У меня был вновь созданный мною блок:

 <div id="p-ua">
        <p>Билеты в кассах<br>
        <p>кинотеатра и на</p>
            <div id="logo-p-ua">
                <a href="http://www.parter.ua/ua/event/42/49/5063.html"  target="_blank"> 
                <img src="/design/img/parter.png" width="70" height="30"></a>
            </div>
</div>

в файле messages.xml
я дописала следующий кусок

...
<trans-unit>
        <source>Билеты в кассах кинотеатра и на</source>
        <target>Квитки у касах кінотеатру та на</target>
</trans-unit>
...

default/smile Да. Без комментариев.

Теперь у меня в header.php

...
<div id="p-ua">
        <div><?php echo __('Билеты в кассах')?></div>
        <div><?php echo __('кинотеатра и на')?></div>
        
            <div id="logo-p-ua">
                <a href="http://www.parter.ua/ua/event/42/49/5063.html"  target="_blank"> 
                <img src="/design/img/parter.png" width="70" height="30"></a>
            </div>
    </div>
...

и в файле messages.xml

...
<trans-unit>
        <source>Билеты в кассах</source>
        <target>Квитки у касах</target>
</trans-unit>
<trans-unit>
        <source>кинотеатра и на</source>
        <target>кінотеатру та на</target>
</trans-unit>
...

Вот так. Опыт, к сожалению, вместе с книжкой не купишь))

10

Re: Мультиязычность: как добавить новые данные

luara пишет:

Файл перевода у меня называется messages.xml

Это я уже просто плохо помню первую ветку. Сейчас у файлов XLIFF уже правильное родное расширение. default/smile