i18n - лучшие практики для интернационализации - XLIFF, gettext, INI, & hellip ;? [закрыто]

Большинство данных решений используют обходной путь, используя дополнительный заголовок или неадекватный HTTP-код. Эти решения, скорее всего, будут работать, но немного «взломать». Я придумал другое решение.

Мы используем WIF, который настроен на перенаправление (passiveRedirectEnabled = "true") на ответ 401. Переадресация полезна при обращении с обычными запросами, но не будет работать для AJAX-запросов (поскольку браузеры не будут выполнять 302 / переадресацию).

Используя следующий код в вашем global.asax, вы можете отключить перенаправление для запросов AJAX:

    void WSFederationAuthenticationModule_AuthorizationFailed(object sender, AuthorizationFailedEventArgs e)
    {
        string requestedWithHeader = HttpContext.Current.Request.Headers["X-Requested-With"];

        if (!string.IsNullOrEmpty(requestedWithHeader) && requestedWithHeader.Equals("XMLHttpRequest", StringComparison.OrdinalIgnoreCase))
        {
            e.RedirectToIdentityProvider = false;
        }
    }

Это позволяет вам возвращать 401 ответа на запросы AJAX, которые могут быть у вашего javascript затем выполните перезагрузку страницы. Перезагрузка страницы вызовет 401, которые будут обрабатываться WIF (и WIF перенаправит пользователя на страницу входа в систему).

Пример javascript для обработки ошибок 401:

$(document).ajaxError(function (event, jqxhr, settings, exception) {

    if (jqxhr.status == 401) { //Forbidden, go to login
        //Use a reload, WIF will redirect to Login
        location.reload(true);
    }
});
30
задан 14 revs, 3 users 100% 3 February 2009 в 06:59
поделиться

10 ответов

Всегда существует , Переводят Инструментарий , которые позволяют переводить между, я думаю весь упомянутые форматы и предпочтенный (почтовый) gettext и XLIFF.

12
ответ дан 2 revs, 2 users 86% 3 February 2009 в 16:59
поделиться
  • 1
    Спасибо... дисплей css стиль зафиксировал его. – Si8 6 June 2013 в 05:21

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

, Таким образом, идея - это, если можно доверить пользователя для редактирования ее с кодированием UTF8.

можно добавить BOM в начале файла, некоторые редакторы знает об этом.

, Что Вы хотите, чтобы он сохранил? пользователь генерировал содержание или Ваши ресурсы приложения?

1
ответ дан CiNN 3 February 2009 в 06:59
поделиться
  • 1
    Спасибо @kleinfreund, с помощью ' решение 3' работавший для меня на Firefox 29.0.1 и IE10. – hatsrumandcode 22 May 2014 в 08:22

Я работал с двумя из этих форматов на l18n стороне: TMX и XLIFF. Они довольно подобны. TMX более популярен в наше время, но XLIFF получает поддержку быстро. Был по крайней мере один свободный редактор XLIFF, когда я в последний раз изучил его: Transolution, но это не разрабатывается теперь.

1
ответ дан Nemanja Trifunovic 3 February 2009 в 06:59
поделиться
  • 1
    @kleinfreund! я использую хром 39.0.2171.95 и когда я делаю текст-align:center на основном отделении центры ul!!, также - эти взломы действительно требуются для современных браузеров? Ссылка: jsfiddle.net/8jsat2h9 . – Tenali_raman 20 December 2014 в 19:57

POEdit не действительно тверд получить подвешивание. Просто создайте новый .po файл, затем скажите ему импортировать строки из исходных файлов. Программа сканирует Ваши файлы PHP для любых вызовов функции, соответствующих _("Text"), gettext("Text") и т.д. Можно даже определить собственные функции для поиска.

Вы тогда вводите перевод в соответствующее поле. Когда Вы сохранили свой .po файл, .mo файл автоматически сгенерирован. Это - просто версия двоичных файлов переводов, которые может легко проанализировать gettext.

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

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

15
ответ дан Josh 3 February 2009 в 06:59
поделиться

Ни один из того выбора не выглядит очень аппетитным мне.

при отсылке файлов для перевода на нескольких языках, затем Вы хотите смочь положить, что кодировка корректна, особенно если Вы никто в Вашей команде не говорит на тех языках. Иногда трудно определить проблему кодирования на иностранном языке, и просто слишком легко непреднамеренно повредить кодировку файла при разрешении ОС 'предположение'.

Вы действительно хотите формат, который объявляет его кодирование. Иначе переводчики или их инструментальные средства для перевода могли бы выбрать что-то другое, чем UTF-8. За мои деньги любой вид простого формата XML является лучшим, но похоже, что Вам было бы нужно к самокрутке на Пехлеви. XLIFF и TMX являются, конечно, излишеством.

формат А как ресурсы Java XML был бы идеален.

0
ответ дан Mike Sickler 3 February 2009 в 16:59
поделиться
  • 1
    @kleinfreund, да, на его странице, которую они делают, но не во фрагменте кода, который он вставил в вопросе. Это doesn' t вред для явного утверждения этого. – Derek Henderson 6 June 2013 в 04:47

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

у меня есть две таблицы. Первая таблица имеет значение идентификационных данных, 32 символа varchar поле (индексированный на этом поле) и 200 символьных английских описаний фразы.

Моя вторая таблица имеет значение идентификационных данных от первой таблицы, код языка (EN_UK, EN_US, и т.д.) и столбец NVARCHAR для текста.

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

32 символа varchar в первой таблице хранят что-то как 'pleaselogin', в то время как вторая таблица на самом деле хранит полное, "Введите свой вход в систему и пароль ниже".

я создал огромный список динамических значений, которые я заменяю во времени выполнения. Пример был бы, "У Вас есть {[dynamic:passworddaysremain]} дни для изменения пароля". - это позволяет мне работать вокруг упорядочивания слова на различных языках.

я должен был только иметь дело с Арабскими цифрами до сих пор, но должен буду разработать что-то для первого пользователя, который требует не арабских цифр.

я на самом деле вытаскиваю эту информацию из базы данных по 2 почасовым интервалам и кэширую его к диску в файле для каждого языка в XML. Широкое применение CDATA используется.

существует много доступных опций для производительности, Вы могли использовать шаблоны HTML для каждого языка - Мой метод работает хорошо, но действительно использует XML DOM много во времени выполнения для создания страниц.

1
ответ дан John 3 February 2009 в 16:59
поделиться
  • 1
    Я wouldn' t называют эти взломы. Возможно, последний является странным, но могут быть случаи, где Вам нужен он. Каков Ваш вопрос? – kleinfreund 21 December 2014 в 06:01

Это могло бы немного отличаться от того, что было отправлено до сих пор и не может быть точно, что Вы ищете, но я думал, что добавлю его, если ни для чего иного кроме другого подхода. Я пошел с объектно-ориентированным подходом. То, что я сделал, было, создают систему, которая инкапсулирует файлы языка в класс путем хранения их в массиве строки => пары перевода. Доступ к переводу через названный метод, переводят со строкой ключа в качестве параметра. Расширяющиеся классы наследовали массив языка родителя и могут добавить к нему или перезаписать его. Поскольку классы расширяемы, можно изменить базовый класс и иметь изменения, распространяют через детей, делая более удобным в сопровождении, чем массив отдельно. Плюс, Вы только называете классы, в которых Вы нуждаетесь.

0
ответ дан VirtuosiMedia 3 February 2009 в 16:59
поделиться
  • 1
    Возможно, необходимо использовать плавание в качестве примера, потому что пункты меню не встроены на его странице, также. – kleinfreund 6 June 2013 в 04:48

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

0
ответ дан Brian 3 February 2009 в 16:59
поделиться
  • 1
    Пункты меню (привязки) в #headermenu на ссылке предоставленный автор имеют float: left; присвоенный. – kleinfreund 6 June 2013 в 04:45

Мы просто храним строки в DB и встроили режим переводчика в приложение для обработки на самом деле добавляющих строк для различных языков.

В приложении мы используем различные приемы для создания текстовых идентификаторов, как

£("btn_save")
£(Order.class,"amt")

, переводы загружаются из дб, когда начальные загрузки системы, или когда перезагрузка вручную инициирована. ВЈ метод заботится о поиске переведенной строки соответственно язык, указанный на сеансе пользователя.

0
ответ дан John Nilsson 3 February 2009 в 16:59
поделиться
  • 1
    @kleinfreund, прекрасный. У меня было плавание в комментарии, но I' ve передвинул его теперь. – Derek Henderson 5 June 2013 в 17:51

Вы можете проверить мой инструмент l10n под названием iL10Nz на http://www.myl10n.net

Вы можете загружать файлы po / pot, xliff, ini, переводить, скачивать.

вы также можете посмотреть это видео на YouTube http://www.youtube.com/watch?v=LJLmxMFxaxA

Спасибо Оливье

0
ответ дан 28 November 2019 в 00:21
поделиться
Другие вопросы по тегам:

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