hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک...

75
Hallo.

Upload: others

Post on 05-Aug-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Hallo.

Page 2: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Я очень рад быть здесь.

Page 3: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

ییا ییا گ پپر د ک ے او ففحے ہہر ص فن ے ییا آپ —ک

ییکھا؟ ٹٹن د بب ییم" کا تپرم "—

Page 4: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

How tointernationalize

your codefor Wikimedia and beyond

Amir E. AharoniBangalore DevCamp

November 2012

Page 5: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

The MediaWiki internationalization guide:

https://www.mediawiki.org/wiki/L10n

(frequently updated!)

Page 6: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Terminology

Page 7: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

i18n

internationalization

Page 8: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

echo 'Please enter the sum:';

Not internationalized:

Page 9: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

MyExtension.i18n.php:$messages['en'] = array( 'sum' => 'Enter the sum:',);$messages['ru'] = array( 'sum' => 'Введите сумму:',);

MyExtension.php:echo wfMessage( 'sum' );

// (the software knows the user's language)

Internationalized:

Page 10: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

The translations in i18n files can be edited by

hand, but in practice it is done through

https://translatewiki.net

Page 11: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

L10n

localization

Page 12: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

MyExtension.i18n.php:$messages['en'] = array( 'date' => 'Purchase date: $1',);$messages['ja'] = array( 'date' => '日付を購入 : $1',);

MyExtension.php:$date = "$month/$day/$year";echo wfMessage( 'date', $date );// en: Purchase date: 11/10/2012// ja: 日付を購入 : 11/10/2012

Translated, but not localized:

Page 13: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

MyExtension.i18n.php:$messages['en'] = array( 'date' => 'Purchase date: $1',);$messages['ja'] = array( 'date' => '日付を購入 : $1',);

MyExtension.php:$date = dateFormat( $day, $month, $year );echo wfMessage( 'date', $date );// en: Purchase date: 11/10/2012// ja: 日付を購入 : 2012-11-10

Localized:

Page 14: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

m17n

multilingualization

Page 15: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

article.cssbody { font-family: Arial, Helvetica;}

article.html<p>Bangalore (ಬಂಗಳೂರು) is a city in Karnataka.</p>

Not multilingualized:

Page 16: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Bangalore (□ □ □ □ □ □ □ □) is a city in Karnataka.

Possible result:

Page 17: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

article.css::lang(en) { font-family: Arial, Helvetica;}:lang(kn) { font-family: Lohit Kannada;}

article.html:<p lang="en" dir="ltr">Bangalore (<span lang="kn" dir="ltr">ಬಂಗಳೂರು</span>) is a city in Karnataka.</p>

Multilingualized (partly):

Page 18: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Bangalore (ಬಂಗಳೂರು) is a city in Karnataka.

Result:

Page 19: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Motivation

Page 20: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Do i18n now.

Page 21: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

It doesn't just help speakers of other

languages – it helps uncover bugs early

Page 22: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

It gives the translators time to translate

and to report bugs(translators always find bugs,and you want to hear them)

Page 23: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Give yourself timeto fix issues

Page 24: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Never say“It's only for English”

Page 25: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Messages syntax

Page 26: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

$1, $2, $3

parameters,a.k.a. placeholders

Page 27: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

English, 2 forms:{{PLURAL:$1|hour|hours}}

Russian, 3 forms:{{PLURAL:$1|час|часа|часов}}

{{PLURAL}}

Page 28: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

$1 edited {{GENDER:$1|his|her}} profile page

{{GENDER}}

Page 29: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

English: About {{SITENAME}}.Gives: About Wikipedia.

Polish?: O {{SITENAME}}.Gives: O Wikipedia. :(

Polish!: O {{GRAMMAR:MS|{{SITENAME}}}}.Gives: O Wikipedii. :)

{{GRAMMAR}}

Page 30: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

If it's hard to translate something to your

language, it may be possible to solve it by

programminga GRAMMAR rule.

Page 31: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Cool!Can I use it for my program?

Page 32: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

PHP:Only MediaWiki

Page 33: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

JavaScript:Anywhere!

Page 34: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

jquery.i18n

A generic library that adds i18n capabilities to any

website with jQueryhttps://github.com/wikimedia/jquery.i18n

Page 35: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

myApp.en.json:{"filecount": "$1 {{PLURAL:$1|File|Files}}"}

myApp.kn.json:{"filecount": "$1 {{PLURAL:$1|ಫೈಲನ|ಫೈಲುಗಳ}}"}

jquery.i18n usage, part 1

Page 36: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

myApp.html:<script src="jquery.js"></script><script src="jquery.i18n.js"></script>...<span data-i18n="filecount" id="filecount"></span>

myApp.js:$( document ).i18n();...$( '#filecount' ) .text( $.i18n( 'filecount', files.length ) );

jquery.i18n usage, part 2

Page 37: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Writing messagesin your features and extensions

Page 38: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

NO LEGO

Page 39: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Do not concatenate messages to create

sentences!

Page 40: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

MyExtension.i18n.php:...'deleted' => 'The page was deleted by','on' => 'on',...

MyExtension.php:$pageDeleted = wfMessage( 'page-deleted' );$on = wfMessage( 'on' );$logMsg = "$pageDeleted $user $on $date.";

Bad:

Page 41: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

MyExtension.i18n.php:...'deleted' => 'The page was deleted by $1 on $2.',...

MyExtension.php:$logMsg = wfMessage( 'page-deleted', $user, $date );

Good:

Page 42: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Don't assume the size of anything, like table

headers, input boxes etc.

Page 43: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Avoid "right"/"left".Write relatively to other

elements.

Page 44: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Avoid jargon, like “comps”, “nav”, “CTA”,

“conversion rate” etc.

If you really need it,you must document it.

Page 45: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Messagedocumentation

Page 46: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

qqq

In MediaWiki, it's a pseudo-language codefor storing documentation

Page 47: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Always write qqq documentation.

(or some other documentation, if it's a different project)

Page 48: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Having a glossary is awesome.

Page 49: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Good examples:Wikibase (Wikidata),

FlaggedRevisions

Page 50: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

It's safe to assume that MediaWiki documentation

will mostly be read at translatewiki.net, so:

Page 51: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Screenshots are great!Put them on Commons

Page 52: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Use the template{{msg-mw|MESSAGE}}to link to other templates

Page 53: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

What is this message?

Table header? Tooltip?Form label? Button?

Something else?

Page 54: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Part of speech!

Page 55: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

“Open”

The file is open.Open the file.

You don't have a permission to open this page.

Page 56: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Adjectives!

Please say what they describe: "green" can be masculine or feminine

Page 57: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Verbs!

Please say whether it's imperative (“do it!”),

infinitive (“to do it”) or something else

Page 58: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

The Message class

Page 59: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Special pages, API, pagers$this->msg()

Elsewhere:wfMessage()

Page 60: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

(There are some other functions, like wfMsg(),

but they are mostly deprecated.)

Page 61: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

No parsing at all, only parameters expansion.

Leaves [[links]], {{templates}},

{{GENDER}} etc. as is.

plain()

Page 62: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Transforms magic words in {{}} – {{GENDER}},

{{PLURAL}}, {{GRAMMAR}}

text()

Page 63: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Same as text(),but with

htmlspecialchars.

escaped()

Page 64: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Parse all wikitext to HTML

parse()

Page 65: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Same as parse() and wrapped in <p></p>

parseAsBlock()

Page 66: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Every method returns a Message object, so you

can chain them:wfMessage( 'myext-deleted-file' ) ->params( $filename ) ->rawParams( $link ) ->inContentLanguage() ->parse();

Page 67: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

More Message objects,less strings

Page 68: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Logging

Page 69: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

New logging systemGender

Flexible word orderFlexible parameters

Many logs yet to be converted (the hardest part is to understand all the

legacy parameter formats)

Page 70: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Help!

Page 71: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Bug 38638

Interface messages needing rewording or documentation and other issues with

existing messages.

It has links to many easy bugs.

Page 72: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

[[Support]] attranslatewiki.net

Page 73: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

Recent feature:Support requests for YOU are

tracked at YOUR USER PAGEat translatewiki.net

Page 74: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

When committing code that has any i18n changes,

invite i18n to review:Nikerabbit, Siebrand,

Amir, Santhosh

Page 75: Hallo. · اییگ ایید رپپوا ےکےحف ف ص رہہ ےن ف — پآ اییک ؟اھکیید نٹ ٹ بب اک "مییمرپ ت — "

ಪರಶ್ನೆಗಳು?(Questions?)

!הָד!ה! תֹו(Thank you!)