/**
* Simple Placeholder-based Localization
*
- * Call on a selection of HTML which contains <msg key="message-key" /> elements or elements with
- * title-msg="message-key" or alt-msg="message-key" attributes. <msg /> elements will be replaced
+ * Call on a selection of HTML which contains <html:msg key="message-key" /> elements or elements with
+ * title-msg="message-key" or alt-msg="message-key" attributes. <html:msg /> elements will be replaced
* with localized text, elements with title-msg and alt-msg attributes will receive localized title
* and alt attributes.
- *
- * Note that "msg" elements must have html namespacing such as "<html:msg />" to be compatible with
- * Internet Explorer.
- *
+ * *
* Example:
* <p class="somethingCool">
* <html:msg key="my-message" />
*/
( function( $ ) {
/**
- * Localizes a DOM selection by replacing <msg /> elements with localized text and adding
+ * Localizes a DOM selection by replacing <html:msg /> elements with localized text and adding
* localized title and alt attributes to elements with title-msg and alt-msg attributes
* respectively.
*
$.fn.localize = function( options ) {
options = $.extend( { 'prefix': '', 'keys': {}, 'params': {} }, options );
function msg( key ) {
- return mw.msg( options.prefix + ( key in options.keys ? options.keys[key] : key ), ( key in options.params ? options.params[key] : [] ) )
+ var args = key in options.params ? options.params[key] : [];
+ // Format: mw.msg( key [, p1, p2, ...] )
+ args.unshift( options.prefix + ( key in options.keys ? options.keys[key] : key ) );
+ return mw.msg.apply( mw, args );
};
return $(this)
+ // Ok, so here's the story on this selector.
+ // In IE 6/7, searching for 'msg' turns up the 'html:msg', but searching for 'html:msg' does not.
+ // In later IE and other browsers, searching for 'html:msg' turns up the 'html:msg', but searching for 'msg' does not.
+ // So searching for both 'msg' and 'html:msg' seems to get the job done.
+ // This feels pretty icky, though.
.find( 'msg,html\\:msg' )
.each( function() {
var $el = $(this);
+ var msgText = msg( $el.attr( 'key' ) );
+
+ if ( $el.attr('raw') ) {
+ $el.html(msgText);
+ } else {
+ $el.text(msgText);
+ }
+
$el
- .text( msg( $el.attr( 'key' ) ) )
.replaceWith( $el.html() );
} )
.end()