-
Lipikaar
I just had to point some attention toward the good folks at Lipikaar. To get a sense of their technology, just click that link and you’ll see the tool immediately on their website.
Here’s a link to their Firefox extension.
You don’t have to speak Hindi, Marathi, Sanskrit, Nepali, Konkani, Sindhi, Kashmiri, Bengali, Gujarati, Punjabi, Tamil, Telugu, Oriya, Assamese, Kannada, Malayalam, Arabic or Urdu to see how cool or powerful this is. But, if you do speak one of those 18 languages, now you’ve got a tool to help create content your constituents can read. And, that’s thanks to Lipikaar.
I’m blogging about projects like Lipikaar and Heredict because I want to see how we can impact the web in new markets. Localization is just one small piece. With website evangelism and the ability to create content, users will start to see dramatic increases in what’s available to them on Firefox and on the Web more generally.
Please help spread this project around if you are in India or speak one of the languages listed above.
-
Moz Camp Delhi
Today, we arrived for the Mozilla Camp Delhi at the India Social Institute at 2 PM to a crowded room of Mozilla contributors and developers led by Mohak Prince, the most enthusiastic campus rep from Delhi. In just two weeks, Mohak organized a midday event that attracted somewhere between 75 and 100 interested folks. Three to four large posters had been created feature me and Arun’s visit. (I have some pictures forthcoming, but I left my USB cable at home.) Our names were spelled out on the 4′ x 3′ screen-printed posters.
At the start, we did some initial introductions while we got ourselves technically situated. During that initial go-round, we found that nearly 100% of the participants in the room had coding experience with C++, JS, HTML, XML, CSS, and more. All used Firefox with several extensions. A few had developed add-ons. The audience had some great initial questions, teeing us up for an extra special afternoon. Here is what took place:
* Pascal Finette did an online Skype chat discussing the Mozilla Labs concept series
* I spoke about Mozilla community and L10n
* Arun gave a presentation with lots of demos on SVG, HTML 5, OGG video formattingFrankly, I was blown away by Arun’s presentation. This guy is good. As a member of the Developer Relations team, he really showed excellent demos to this audience. My favorite was probably an OGG formatted video with SVG and CSS overlayed. The reaction by the audience, if I remember correctly, was a gentle “Oooohhhh!”. The combination of his showing his excellent demos, explaining the technology, drawing laughs (when a man was shouting outside and Arun somehow thought he was getting heckled), and driving interaction with the audience really made the crowd squeeze the most out of the 2 hours he presented. Obviously they were impressed and I won’t be surprised to hear from Arun that a number of the developers emailed him to find out how to participate.
I focused on l10n and community development. After I finished, one request I had for Mohak and his team was to use the Mozilla Community Sites project for Mozilla Camp Delhi. Given all the excitement, I hope they’ll use the MCS to set up a point for community development and interaction here in Delhi. I also handed out a number of cards to people who hope to look at and contribute to Silme.
In closing, the first event in India was a big success. I am not sure we could have anticipated such enthusiasm or curiosity in Mozilla. If you attended the event, please comment on my blog. Tell me who you are, what you do, and how you want to get involved. I’ve linked below to many of the topics I mentioned in my presentation and will post the slides soon.
Special thanks to Mohak for his efforts. Well done!
http://contribute.mozilla.org
http://wiki.braniecki.net/Silme
http://diary.braniecki.net/tag/mct/ -
Travel
Yesterday, I embarked on a long journey where I will visit much of the Mozilla community. By the time I am done, I will interact with about 30 of our localization teams at various conferences where I will be a participant. Here’s an itinerary for anyone who might be interested in meeting up:
February 6 – 9: FOSDEM in Brussels with many European localizers and open source developers
February 10 – 11: Delhi, India for MozDelhi Camp
February 12 – 13: Kanpur, India for FOSSkriti at ITT Kanpur
February 14 – 15: Pune, India for GNUify
February 18 – 21: Beijing, China with a big community event on Saturday, February 21 at the Mozilla officeOn my journey through the subcontinent, I will be joined by fellow Mozillan, Arun Ranganathan. When I separate from Arun, I’ll go to our China office in Beijing to visit Li Gong and the team and to present to the community there.
During our presentations, we will demo several tools for developers and localizers to use to expand their impact, build new community, and drive more mainstream adoption of Mozilla ideas. It will be a breakneck pace and we are staying with friends along the way in hope to make this trip as leveraged as possible. Many thanks to Shashank (FOSSkriti) and Harshad (GNUify) for providing me and Arun both transportation and accommodation at their respective conference locations.
My presentation has four sections, designed for easy plug-and-play, depending on the audience. Here is what I plan to discuss on the quest.
- Mozilla and Community overview, using localization efforts to illustrate the breadth of Mozilla’s community contribution. I’ll present some interesting Firefox 3.1 localization participation statistics, including new languages since FF 3.0.
- New Community tools, demoing Mozilla Community Sites project
- Improving localization tools, recapping Verbatim, demoing Silme, and discussing new ideas
- Where do we go next? L20n demos
I’ll post the slides when they are ready. They are still in pieces and demos are still being finalized.
-
L20n
I spent last week writing about some limitations with DTD files and promised to lead up with something about l20n. In fact, a lot has been written about this concept and can be found here:
The introduction from that page is particularly helpful in describing l20n. It opens with the following:
“L20n is the codename for a localization architecture taking existing approaches one step further. The name stands for l10n 2. The architecture is laid out with Mozilla applications in mind, but should be applicable to other areas as well. As for Mozilla, Mozilla 2 will give us a chance to implement significant changes in our l10n architecture, and this is one attempt to do that.”
It may come as no surprise, but Axel is mostly responsible for this TERRIFIC introduction and write up. The wiki covers:
I really suggest everyone take some time to read through this wiki to get a better sense of what l20n is and how to contribute. Rather than try to rewrite something that is already superb, I highly suggest reading the background document linked to above (and again just now).
Let’s give a taste of just what l20n might be one day. Here is some sample code from Axel that helps with plural forms:
<plural: (n) -> {n != 1}>/** * Complex string * @param: beers */ <axel: "Axel had ${beers}i ${axel.bottles[plural(beers)]}s of beer." bottles: ["bottle", "bottles"]>And the translation by a localizer:
<plural: (n) -> {n != 1}> /** * Complex string * @param: beers */ <axel: "Axel hat ${beers}i ${axel.bottles[plural(beers)]}s Bier getrunken." bottles: ["Flasche", "Flaschen"]>The nice thing here is that the code is flexible to provide for multiple plural forms. Ping if you have a question.
Some really excellent demos are on the Examples link from above. I will link to a few I liked here:
- Plural demo (just above)
- Declension demo
These are great because they show the power and flexibility of the code with a straightforward UI to go along.
There is so much fun to be had with l20n, I hope you take the time to go through this wiki, comment on it, blog about it, email me, etc. We are not ready to implement l20n, but we are certainly ready to discuss.
Thank you to Axel and Gandalf for helping me with these posts. Most of what I write is simply me learning new things and then rewriting. I hope you can play along and get involved in the next generation of Mozilla l10n.
-
Another thing about <!ENTITY> and then some on localization
Challenge 3: Some languages with multiple forms of a word
In some languages, words can have multiple forms depending on context. What if the word for tab could be written as tab, tabs, tab(x), or [prefix]-tab where each form might be used depending on what a developer hopes to communicate.
Here is an example:
<!ENTITY tabsOpen1 “You have %1 tab open”>
<!ENTITY tabsOpen2 “You have %1 tabs open”>In English, the UI is relaying to the end-user that he or she may have one tab open or more than one tab open. Using Polish again, we can see that there are multiple forms depending on the context: one kartę; two, three or four karty; or zero or five or more kart. In fact, the Polish grammar rule is much more complex than my explanation and I am sure I am missing all the rules, but you get the point.
See below:
<!ENTITY tabsOpen1 “Masz %1 kartę otwartą“>
<!ENTITY tabsOpen2 “Masz %1 karty otwarte“>
<!ENTITY tabsOpen3 “Masz %1 kart otwartych“>See the problem? Option three can and will never be used because the code only provides for 1 tab or [x] tabs. So, Polish localizers are forced to create an artificial form like ” otwórz kart: %1″. Once again, this is not really a pattern of natural spoken Polish. It reads more as a representation of the database or something.
Challenge 4: Localization in the broader sense
Sometimes in our UI, colors, icons, spacing allocated to certain words like “Firefox”, and more are hard-coded, limiting the ability for a localizer to change them to make more sense or work well in their localizations. If those elements are not hard-coded, they can still be hard to change. In those cases, a localizer can file a bug asking a developer to provide more options.
For instance, let’s say a developer uses the colors red and green to indicate success or failure when a user submits a password. These colors might not mean anything in certain localizations. A bug is then filed and a developer works to extend the options available to that localizer so it is more meaningful. But this can be laborious, and is definitely not scalable. Moreover, this new exception forces all other localizations to translate a new entity, even though it may not have the same level of importance (if any at all) in their home language.
Other issues to think about include languages that use right-to-left writing or languages that present their characters vertically rather than horizontally. The examples are numerous and we can go through all of them, but I think you get my point. Feel free to add your examples to the comments section of this post.
Next time, I’ll present a small piece of what could be the next generation of l10n. You might think of it as Localization 2.0 or L20n.



















