summaryrefslogtreecommitdiff
path: root/resources/jquery/jquery.localize.js
blob: 3c8f597afc75df70485febee11ec8432bf015470 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
 * 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
 * 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" />
 *			<img src="something.jpg" title-msg="my-title-message" alt-msg="my-alt-message" />
 *		</p>
 *
 * Localizes to...
 * 
 * 		<p class="somethingCool">
 * 			My Message
 * 			<img src="something.jpg" title="My Title Message" alt="My Alt Message" />
 * 		</p>
 */

( function( $, mw ) {
	/**
	 * Localizes a DOM selection by replacing <msg /> elements with localized text and adding
	 * localized title and alt attributes to elements with title-msg and alt-msg attributes
	 * respectively.
	 * 
	 * @param Object: options Map of options
	 * 	* prefix: Message prefix to use when localizing elements and attributes
	 */

	$.fn.localize = function( options ) {
		options = $.extend( { 'prefix': '' }, options );
		return $(this)
			.find( 'msg,html\\:msg' )
				.each( function() {
					$(this)
						.text( mediaWiki.msg( options.prefix + $(this).attr( 'key' ) ) )
						.replaceWith( $(this).html() );
				} )
				.end()
			.find( '[title-msg]' )
				.each( function() {
					$(this)
						.attr( 'title', mw.msg( options.prefix + $(this).attr( 'title-msg' ) ) )
						.removeAttr( 'title-msg' );
				} )
				.end()
			.find( '[alt-msg]' )
				.each( function() {
					$(this)
						.attr( 'alt', mw.msg( options.prefix + $(this).attr( 'alt-msg' ) ) )
						.removeAttr( 'alt-msg' );
				} )
				.end();
	};
} )( jQuery, mediaWiki );

// Let IE know about the msg tag before it's used...
document.createElement( 'msg' );