2015-09-02 6 views
1

У меня возникает проблема, при которой l20n применяется только к стандартным атрибутам по умолчанию для HTML-элемента.Использование l20n в браузере с пользовательскими атрибутами

В моем случае я пытаюсь работать с переводами в формате JSON. Мои фиктивные данные выглядят следующим образом:

{ 
    "test": { 
    "attrs": { 
     "title": "my_title_value", 
     "custom": "my_custom_value", 
     "placeholder": "my_placeholder_value" 
    } 
    } 
} 

Моего тест HMTL выглядит следующим образом:

<input type="text" data-l10n-id="test" title="" custom="" placeholder="" /> 

Однако, браузер генерирует следующий HTML:

<input type="text" data-l10n-id="test" title="my_title_value" custom="" placeholder="my_placeholder_value"> 

Я пробовал различные комбинации атрибутов упорядочения и имена атрибутов, и, казалось бы, только локальные атрибуты HTML по каждому типу элемента локалируются по l20n.

Проблема также проявляется в стандартных атрибутах HTML, таких как «заголовок» при использовании в пользовательском элементе, хотя l20n может обрабатывать стандартные атрибуты стандартных элементов, когда они помещаются в тег <content> пользовательского элемента.

Документация l20n, касающаяся обработки атрибутов, не очень обширна. До сих пор поиск ответов на Stack Overflow и Google оказался бесплодным, и Mozilla размещает собственный список обсуждений и отслеживание ошибок, которые, похоже, не очень доступны для широкой публики.

Проект l20n, по-видимому, находится в состоянии изменения, предположительно ES5-совместимый webcompat/l20n.js в версии, которую я использую (3.0.5), требующей Polyfill из-за использования Array.from(); кроме того, примеры и учебные ресурсы, похоже, точно не соответствуют тому, как использовать структуру. Исходный код полностью не документирован, но, несмотря на это, большинство понимания, которое у меня есть в рамках этой платформы, было получено путем поиска там. Я не вижу никакой фильтрации имен атрибутов в своем коде, поэтому я чувствую, что эта проблема может быть связана с необходимостью регистрации элементов в браузере до того, как l20n сделает проход по атрибутам данных.

Заранее благодарим всех, кто может помочь.

ответ

0

В нашем файле l20n.js есть этот раздел, который контролирует, какие атрибуты могут быть переведены:

var allowed = { elements: ['a', 'em', 'strong', 'small', 's', 'cite', 'q', 'dfn', 'abbr', 'data', 'time', 'code', 'var', 'samp', 'kbd', 'sub', 'sup', 'i', 'b', 'u', 'mark', 'ruby', 'rt', 'rp', 'bdi', 'bdo', 'span', 'br', 'wbr'], attributes: { global: ['title', 'aria-label', 'aria-valuetext', 'aria-moz-hint'], a: ['download'], area: ['download', 'alt'], // value is special-cased in isAttrAllowed input: ['alt', 'placeholder'], menuitem: ['label'], menu: ['label'], optgroup: ['label'], option: ['label'], track: ['label'], img: ['alt'], textarea: ['placeholder'], th: ['abbr'] } };

Обратите внимание, что фрагмент кода пришли от версии l20n в настоящее время опубликованной в стандартном НПМ репо, версии в папке dist/compat.

Смежные вопросы