In commit
bb084a35739e3f3c54c8680f756ebebb90e13f28 I assumed that
with uselang=qqx, any messages defined in JavaScript would be just
the message key wrapped in parentheses.
It turns out that extensions (e.g. VisualEditor) have been sneaking
in messages in content language using the system we assumed to only
contain messages in user language. This trick stopped working.
Detect this and return the real message, if it's defined.
Bug: T222944
Change-Id: I3f2a6ceb249402ef76e788c494fd5bdc519faf65
* @return {string} Parsed message
*/
parser: function () {
- var text;
- if ( mw.config.get( 'wgUserLanguage' ) === 'qqx' ) {
+ var text = this.map.get( this.key );
+ if (
+ mw.config.get( 'wgUserLanguage' ) === 'qqx' &&
+ ( !text || text === '(' + this.key + ')' )
+ ) {
text = '(' + this.key + '$*)';
- } else {
- text = this.map.get( this.key );
}
return mw.format.apply( null, [ text ].concat( this.parameters ) );
},
var wikiText;
if ( !Object.prototype.hasOwnProperty.call( this.astCache, key ) ) {
- if ( mw.config.get( 'wgUserLanguage' ) === 'qqx' ) {
+ wikiText = this.settings.messages.get( key );
+ if (
+ mw.config.get( 'wgUserLanguage' ) === 'qqx' &&
+ ( !wikiText || wikiText === '(' + key + ')' )
+ ) {
wikiText = '(' + key + '$*)';
- } else {
- wikiText = this.settings.messages.get( key );
- if ( typeof wikiText !== 'string' ) {
- wikiText = '⧼' + key + '⧽';
- }
+ } else if ( typeof wikiText !== 'string' ) {
+ wikiText = '⧼' + key + '⧽';
}
wikiText = mw.internalDoTransformFormatForQqx( wikiText, replacements );
this.astCache[ key ] = this.wikiTextToAst( wikiText );
);
mw.config.set( 'wgUserLanguage', 'qqx' );
+
$bar = $( '<b>' ).text( 'bar' );
- assert.strictEqual( mw.message( 'foo', $bar, 'baz' ).parse(), '(foo: <b>bar</b>, baz)', 'qqx message with parameters' );
+ mw.messages.set( 'qqx-message', '(qqx-message)' );
+ mw.messages.set( 'non-qqx-message', '<b>hello world</b>' );
+
+ assert.strictEqual( mw.message( 'missing-message' ).parse(), '(missing-message)', 'qqx message (missing)' );
+ assert.strictEqual( mw.message( 'missing-message', $bar, 'baz' ).parse(), '(missing-message: <b>bar</b>, baz)', 'qqx message (missing) with parameters' );
+ assert.strictEqual( mw.message( 'qqx-message' ).parse(), '(qqx-message)', 'qqx message (defined)' );
+ assert.strictEqual( mw.message( 'qqx-message', $bar, 'baz' ).parse(), '(qqx-message: <b>bar</b>, baz)', 'qqx message (defined) with parameters' );
+ assert.strictEqual( mw.message( 'non-qqx-message' ).parse(), '<b>hello world</b>', 'non-qqx message in qqx mode' );
} );
QUnit.test( 'setParserDefaults', function ( assert ) {
);
mw.config.set( 'wgUserLanguage', 'qqx' );
- assert.strictEqual( mw.message( 'foo' ).plain(), '(foo)', 'qqx message' );
- assert.strictEqual( mw.message( 'foo', 'bar', 'baz' ).plain(), '(foo: bar, baz)', 'qqx message with parameters' );
+
+ mw.messages.set( 'qqx-message', '(qqx-message)' );
+ mw.messages.set( 'non-qqx-message', 'hello world' );
+
+ assert.strictEqual( mw.message( 'missing-message' ).plain(), '(missing-message)', 'qqx message (missing)' );
+ assert.strictEqual( mw.message( 'missing-message', 'bar', 'baz' ).plain(), '(missing-message: bar, baz)', 'qqx message (missing) with parameters' );
+ assert.strictEqual( mw.message( 'qqx-message' ).plain(), '(qqx-message)', 'qqx message (defined)' );
+ assert.strictEqual( mw.message( 'qqx-message', 'bar', 'baz' ).plain(), '(qqx-message: bar, baz)', 'qqx message (defined) with parameters' );
+ assert.strictEqual( mw.message( 'non-qqx-message' ).plain(), 'hello world', 'non-qqx message in qqx mode' );
} );
QUnit.test( 'mw.msg', function ( assert ) {