WBEM — открываем возможности локализации
Многим известно, а остальные догадываются, что браузеры умеют передавать веб-серверу список предпочитаемых пользователем языков. Реализуется это с помощью специального http-заголовка Accept-Language. Например, его значением может быть:
ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Получив эту строку, веб-сервер понимает, что пользователь хочет получить информацию прежде всего на русском языке, причем на его разновидности, принятой в России. Если это невозможно — просто на русском, в крайнем случае на английском (американском), и на худой конец — любом английском.
В случае наличия подходящего контента веб-сервер сможет удовлетворить пользователя, условно говоря, на 100%, 80%, 50% и 30% соответственно.
Но этот механизм работает не только в вебе для обычных смертных. В стандартизированном наборе технологий для управления предприятием через веб, WBEM (Web-based Enterprise Management), предусмотрена подобная возможность получать с управляемых устройств информацию на языке, предпочитаемом администратором.
Например, администратор может получить с управляемого компьютера описание интересующего его пакета на русском языке.
В Linux есть несколько (как всегда) вариантов внедрения WBEM. Один из них — использовать
- на стороне управляемого компьютера проверенный временем CIM-сервер Pegasus, разработанный командой The Open Group;
- а на стороне управляющего — молодую, но многообещающую библиотеку для Python'а lmiwbem, разработанную в Red Hat.
В этой связке многое работает хорошо и здорово, кроме вышеупомянутой возможности локализации. Заголовок, в котором должен передаваться предпочитаемый язык при запросе, к сожалению просто никак нельзя задать на стороне lmiwbem, хотя сервер готов принять это указание и передать конечному получателю — коду конкретного провайдера, который сможет выдать информацию на желаемом языке.
Наше решение — добавить в объект WBEMConnection соответствующее свойство requestAcceptLanguages.
Предложение было принято разработчиками, и в версии lmiwbem, следующей за версией 0.3.1, становится возможным следующее [1]:
import lmiwbem conn = lmiwbem.WBEMConnection() # Get Accept languages print conn.request_accept_languages # Set Accept languages conn.request_accept_languages = [("ru", 1.0), ("en", 0.5)]
В итоге управляемый компьютер теперь может общаться с администратором на его языке в меру своих сил и наличия у себя соответствующей локализованной информации.
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.