<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Yet Another Tech Blog</title>
	<atom:link href="https://www.yetanothertechblog.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.yetanothertechblog.com</link>
	<description>[:flod] l10n, Mozilla and other stuff</description>
	<lastBuildDate>Sun, 20 Oct 2024 13:28:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>The (pre)history of Mozilla&#8217;s localization repository infrastructure</title>
		<link>https://www.yetanothertechblog.com/2024/10/20/the-prehistory-of-mozillas-localization-repository-infrastructure/</link>
					<comments>https://www.yetanothertechblog.com/2024/10/20/the-prehistory-of-mozillas-localization-repository-infrastructure/#respond</comments>
		
		<dc:creator><![CDATA[flod]]></dc:creator>
		<pubDate>Sun, 20 Oct 2024 13:28:01 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[l10n]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[planet]]></category>
		<guid isPermaLink="false">https://www.yetanothertechblog.com/?p=216</guid>

					<description><![CDATA[With many new faces joining Mozilla, as either staff or volunteer localizers, most are only familiar with the current, more streamlined localization infrastructure. I thought it might be interesting to take a look back at the technical evolution of Mozilla’s localization systems. Having personally navigated every version — first as a community localizer from 2004 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">With many new faces joining Mozilla, as either staff or volunteer localizers, most are only familiar with the current, more streamlined localization infrastructure.</p>



<p class="wp-block-paragraph">I thought it might be interesting to take a look back at the technical evolution of Mozilla’s localization systems. Having personally navigated every version — first as a community localizer from 2004 to 2013, and later as staff — I’ll share my perspective. That said, I might not have all the details exactly right (or I may have removed some for the sake of my sanity), so feel free to point out any inaccuracies.</p>



<figure class="wp-block-image aligncenter size-full"><a href="https://www.flickr.com/photos/flod/458648679/in/album-72157600075305247"><img fetchpriority="high" decoding="async" width="800" height="533" src="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/458648679_decfde3b73_o.jpg" alt="Giovanni (center) and I (left) from Mozilla Italia at a booth to promote Firefox, back in 2007. Probably one of the older photos I have around." class="wp-image-220" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/458648679_decfde3b73_o.jpg 800w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/458648679_decfde3b73_o-300x200.jpg 300w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/458648679_decfde3b73_o-768x512.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></a><figcaption class="wp-element-caption">Attending one of the earliest events organized by the Italian Community (2007)</figcaption></figure>



<h2 class="wp-block-heading">Early days: Centralized version control</h2>



<p class="wp-block-paragraph">Back in the early 2000s, smartphones weren’t a thing, Windows XP was an acceptable operating system — especially in comparison to Windows Me — and distributed version controls weren’t as common. Let’s be honest, <a href="https://en.wikipedia.org/wiki/Distributed_version_control#Distributed_vs._centralized">centralized version controls</a> were not fun: every commit meant interacting directly with the server. You had to remember to update your local copy, commit your changes, and then hope no one else had committed in the meantime — otherwise, you were stuck resolving conflicts.</p>



<p class="wp-block-paragraph">Given the high technical barriers, localizers at that time were primarily technical users, not discouraged by crappy text editors — encoding issues, <a href="https://en.wikipedia.org/wiki/Byte_order_mark">BOMs</a>, and other amenities — and command line tools.</p>



<p class="wp-block-paragraph">To make things more complicated, localizers had to deal with 2 different systems:</p>



<ul class="wp-block-list">
<li><a href="https://en.wikipedia.org/wiki/Concurrent_Versions_System">CVS (Concurrent Versioning System)</a> was used for products like Mozilla Suite, Phoenix/Firefox, etc. To increase confusion, it used branch names that followed the Gecko versions (e.g. MOZILLA_1_8_BRANCH), and those didn’t map at all to product versions. Truth be told, the whole release cadence and cycle felt like complete chaos back then, at least as a volunteer.</li>



<li><a href="https://en.wikipedia.org/wiki/Apache_Subversion">SVN (Subversion)</a> was used to localize mozilla.org, addons.mozilla.org (AMO), and other web projects.</li>
</ul>



<p class="wp-block-paragraph">With time, desktop and web-based applications emerged to support localizers, hiding some of the complexity of version control systems and providing translation management features:</p>



<ul class="wp-block-list">
<li><a href="https://wiki.mozilla.org/L10n:MozillaTranslator">Mozilla Translator</a> (a local Java application. Yes kids, Java).</li>



<li>Narro.</li>



<li><a href="https://pootle.translatehouse.org/">Pootle</a>.</li>



<li>Verbatim: a customized Pootle instance run by Mozilla, used to localize web projects like addons.mozilla.org. This was shut down in 2015 and projects transitioned to Pontoon.</li>



<li><a href="https://pontoon.mozilla.org/">Pontoon</a> (here’s the <a href="https://web.archive.org/web/20090817140526/http://ozten.com/psto/2009/08/14/a-sketch-of-po-liveedit/">first idea</a> and <a href="https://github.com/fwenzel/pontoon">repository</a>, if you’re curious).</li>



<li><a href="https://aisle-moz.github.io/">Aisle</a>, an internal experiment based on C9 that never got past the initial tests.</li>
</ul>



<p class="wp-block-paragraph">This proliferation of new tools led to a couple of key principles that are still valid to this day:</p>



<ul class="wp-block-list">
<li><strong>The repository, not the TMS (Translation Management System), is the source of truth.</strong></li>



<li>TMSs need to support <strong>bidirectional synchronization</strong> between their internal data storage and the repository, i.e. they need to read updated translated content from the repository and store it internally (establishing a conflict resolution policy), not just write updates.</li>
</ul>



<p class="wp-block-paragraph">This might look trivial, but it’s an outlier in the localization industry, where the tool is the source of truth, and synchronization only happens in one direction (from the TMS to the repository).</p>



<h2 class="wp-block-heading">The shift to Mercurial</h2>



<p class="wp-block-paragraph">At the end of 2007, Mozilla <a href="https://soberbuildengineer.com/blog/2007/04/version-control-system-shootout-redux-redux/index.html">made the decision to transition from CVS to Mercurial</a>, this time opting for a distributed version control system. For localization, this meant making the move to Mercurial as well, though it took a few more months of work. This marked the beginning of a new era where the infrastructure quickly started becoming more complex.</p>



<p class="wp-block-paragraph">As code development was happening in <code>mozilla-central</code>, localization was supposed to be stored in a matching <code>l10n-central</code> repository. But here’s the catch: instead of one repository, the decision was to use one repository per locale, each one including the localization for all shipping projects (Firefox, Firefox for Android, etc.). I’m not sure how many repositories that meant at the time — based on the dependencies of <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=434289">this bug</a>, probably around 30 — but as of today, there are <a href="https://hg.mozilla.org/l10n-central/">156 <code>l10n-central</code></a> repositories, while Firefox Nightly only ships in <a href="https://searchfox.org/mozilla-central/rev/156b2012dcf57279e9d40dca54f778efefa44674/browser/locales/all-locales">111 locales</a> (a few of them added recently).</p>



<p class="wp-block-paragraph">The next massive change was the <a href="https://blog.mozilla.org/axel/2011/04/11/being-a-localizer-in-the-rapid-release-cycle/">adoption of the rapid release cycle in 2011</a>:</p>



<ul class="wp-block-list">
<li>3 new sets of repositories had to be created for the corresponding Firefox versions: <code>l10n/mozilla-aurora</code>, <code>l10n/mozilla-beta</code>, <code>l10n/mozilla-release</code>.</li>



<li>Localizers working against Nightly in <code>l10n-central</code> would need to manually move their updates to <code>l10n/mozilla-aurora</code>, which was becoming the main target for localization.</li>



<li>At the end of the cycle (“merge day”), someone in the localization team would manually move content from Aurora to Beta, overwriting any changes.</li>



<li>In order to allow localizers to make small fixes to Beta, 2 separate projects were set up in Pontoon (one working against Aurora, one against Beta), and it was up to localizers to keep them in sync, given that content in Beta would be overwritten on merge day.</li>
</ul>



<p class="wp-block-paragraph">If you’re still trying to keep count, we&#8217;re now at about 600 Mercurial repositories to localize a project like Firefox (and a few hundreds more added later for Firefox OS, one for each locale and version, but that’s a whole different story).</p>



<p class="wp-block-paragraph">I won’t go into the fine details, but at this point localizers were also supposed to “sign off” on the version of their localization that they wanted to ship. Over time, this was done by:</p>



<ul class="wp-block-list">
<li>Calling out which changeset you wanted to ship in an email thread.</li>



<li>Later, requesting sign-off in a web app called Elmo (because it was hosted on l10n.mozilla.org, (e)l.m.o., got it?). Someone in the localization team had to manually go through each request, check the diff from the previous sign-off to ensure that it would not break Firefox, and either accept or reject it. For context, at the time DTDs <a href="https://www.arewefluentyet.com/">were still heavily in use</a> for localization, and a broken translation could easily brick the browser (<a href="https://en.wikipedia.org/?title=Talk:Screen_of_death/Removed_sections#/media/File:Yellow_screen_of_death.png">yellow screen of death</a>).&nbsp;</li>



<li>With the drop of Aurora in 2017, the localization team started <a href="https://github.com/mozilla-l10n/documentation/blob/8497bc97f6839c811348cbf4a13bd5a6535f5186/src/products/review/signoffs.md#how-to-perform-sign-offs">reviewing and managing sign-offs</a> in Elmo without waiting for localizers to make a request. Yay for localizers, one less thing to do.</li>



<li>In 2020, partly because of the <a href="https://blog.mozilla.org/en/mozilla/changing-world-changing-mozilla/">lay-offs</a> that impacted the team, we completely dropped the sign-off process and decommissioned Elmo, automatically taking the latest changeset in each l10n repository.</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="1024" height="1024" src="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image.jpeg" alt="Sad Elmo sitting on a park bench, in a gloomy weather, with rain puddles on the street." class="wp-image-218" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image.jpeg 1024w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image-300x300.jpeg 300w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image-150x150.jpeg 150w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image-768x768.jpeg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">The new kid on the block: GitHub</h2>



<p class="wp-block-paragraph">In 2015 we <a href="https://groups.google.com/g/mozilla.dev.l10n/c/1dloPQIL84Q/m/YBObCSiGDgAJ">started migrating repositories from SVN to GitHub</a>. At the time, that meant mostly web projects, managed by Pascal Chevrel and me, with the notable exception of Firefox for iOS. That part of localization had a whole infrastructure of its own: a web dashboard to track progress, a tool called <code>langchecker</code> to update files and identify errors, and even a <a href="https://github.com/mozilla-l10n/langchecker/wiki/.lang-files-format">file format called dotlang (.lang)</a> that was used for a while to localize mozilla.org (we switched to <a href="https://projectfluent.org/">Fluent</a> in 2019).</p>



<p class="wp-block-paragraph">The move to GitHub removed a lot of bureaucracy, as the team could create new repositories and grant access to localizers without going through an external team, like it was the case for Mercurial. Still today, GitHub is the go-to choice for new projects, although the introduction of <a href="https://docs.github.com/en/enterprise-cloud@latest/authentication/authenticating-with-saml-single-sign-on/about-authentication-with-saml-single-sign-on">SAML single sign-on</a> created a significant hurdle when it comes to add external contributors to a project.</p>



<h2 class="wp-block-heading">Introduction of cross-channel for Firefox</h2>



<p class="wp-block-paragraph">Remember the 600 repositories? Still there… Also, the most observant among you might wonder: didn&#8217;t Mozilla had another version of Firefox (<a href="https://support.mozilla.org/kb/firefox-esr-release-cycle">Extended Support Release</a>, or ESR)? You&#8217;re correct, but the compromise there was that ESR would be string-frozen, so we didn&#8217;t need another ~150 repositories: we used the content from <code>mozilla-release</code> at the time of launch, and that&#8217;s it, no more updates.</p>



<p class="wp-block-paragraph">In 2017, the Aurora channel was “removed”, leaving Nightly (based on <code>mozilla-central</code>), Developer Edition and Beta (based on <code>mozilla-beta</code>), Release (based on <code>mozilla-release</code>) and ESR. I use quotes, because “aurora” is still technically the internal channel name for Dev Edition. </p>



<p class="wp-block-paragraph">That was a challenge, as Aurora represented the main target for localization. That change forced us to <a href="https://groups.google.com/g/mozilla.dev.l10n/c/vzmbHLPo3rg/m/XjcFy60zDQAJ">move all locales to work on Nightly</a> around April 2017. </p>



<p class="wp-block-paragraph">Later in the year, Axel Hecht <a href="https://groups.google.com/g/mozilla.dev.l10n/c/_K2j7Sg0Orw/m/5A4GzHAKAAAJ">came up</a> with a core concept that still supports how we localize Firefox nowadays: <strong>cross-channel</strong>. What if, instead of having to extract strings from 4 huge code repositories, we create a tool that generates a superset of the strings shipping in all supported versions (channels) of Firefox, and put them in a nimble, string-only repository? That’s exactly what cross-channel did, allowing us to drop ~300 repositories (plus ~150 already dropped because of the removal of Aurora). It also gave us the opportunity to support localization updates in release and ESR. At this point, localization for any shipping version of Firefox comes out of a single repository for each locale (e.g. <code>l10n-central/fr</code> for French).</p>



<figure class="wp-block-image size-large"><a href="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/cross-channel.png"><img decoding="async" width="1024" height="894" src="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/cross-channel-1024x894.png" alt="Chart representing the flow in the build system with cross-channel." class="wp-image-221" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/cross-channel-1024x894.png 1024w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/cross-channel-300x262.png 300w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/cross-channel-768x671.png 768w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/cross-channel-1536x1341.png 1536w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/cross-channel.png 1672w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Code repositories are used to generate cross-channel content, which in turn is used to feed Pontoon, storing translations in l10n-central repositories. From the chart, it&#8217;s also visible how English (en-US) is treated as a special case, going directly from code repositories to the build system.</figcaption></figure>



<p class="wp-block-paragraph">In hindsight, cross-channel was overly complex: it would not only create the superset content, but it would also replay the Mercurial history of the commit introducing the change. The content would land in the cross-channel repository with a reference to the original changeset (<a href="https://hg.mozilla.org/l10n/gecko-strings/rev/7938d5db750c33baf551317e23a784edd3216c1e">example</a>), making it possible to annotate the file via Mercurial’s web interface. In order to do that, the code hooked directly into Mercurial internals, and it would break frequently thanks to the complexity of Mozilla’s repositories. In 2021 the code<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1659691"> was changed to stop replaying history</a> and only merging content.</p>



<p class="wp-block-paragraph">At this point, in late 2017, Firefox localization relied on ~150 l10n repositories, and 2 source repositories for cross-channel — one used as a quarantine, the other, called <code>gecko-strings</code>, connected to Pontoon to expose strings for community localization.</p>



<h2 class="wp-block-heading">Current Firefox infrastructure</h2>



<p class="wp-block-paragraph">Fast-forward to 2024, with Mozilla’s <a href="https://groups.google.com/a/mozilla.org/g/firefox-dev/c/QnfydsDj48o/m/8WadV0_dBQAJ?pli=1">decision to move development to Git</a>, we had an opportunity to simplify things even further, and rethink some of the initial choices:</p>



<ul class="wp-block-list">
<li>Instead of 2 repositories for cross-channel, <a href="https://github.com/mozilla-l10n/firefox-l10n-source">we decided to use only one repository with 2 branches</a>. The cross-channel code was completely rewritten by Eemeli Aro and now runs as a GitHub workflow.</li>



<li>Instead of ~150 repositories, we now have a single <a href="https://github.com/mozilla-l10n/firefox-l10n">l10n repository</a>, covering all supported versions of Firefox as <code>l10n-central</code> used to do. All locales, <a href="https://github.com/mozilla-l10n/firefox-l10n/blob/main/README.md#firefox-localizations">except for Italian and Japanese</a>, are localized through Pontoon.</li>
</ul>



<p class="wp-block-paragraph">Thunderbird has adopted a similar structure, with their own 3 repositories.</p>



<p class="wp-block-paragraph">The team completed the migration to Git in June, ahead of the rest of the organization, and all current versions of Firefox ship from the <code>firefox-l10n</code> repository (including ESR 115 and ESR 128).</p>



<figure class="wp-block-image size-large"><a href="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image.png"><img loading="lazy" decoding="async" width="1024" height="260" src="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image-1024x260.png" alt="Visual timeline of changes described in the article, from CSV to Git." class="wp-image-217" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image-1024x260.png 1024w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image-300x76.png 300w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image-768x195.png 768w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image-1536x391.png 1536w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/image.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">Conclusions</h2>



<p class="wp-block-paragraph">So, this was the not-so-short story of how Mozilla’s localization infrastructure has evolved over time, with a focus on Firefox. Looking back, it’s remarkable to see how far we’ve come. Today, we’re in a much better place, also considering the constant effort to improve Pontoon and other tools used by the community.</p>



<p class="wp-block-paragraph">As I approach one of my many anniversaries — I have one for when I started as a volunteer (January 2004), when I became a member of staff as a contractor (April 2013), one “official” when I became an employee (November 2018) — it’s humbling to think about what a small team has accomplished over the past 22 years. These milestones remind me of the incredible contributions of so many brilliant individuals at Mozilla, whose passion helped build the foundations we stand on today.</p>



<p class="wp-block-paragraph">It’s also bittersweet to go back and read emails from over 15 years ago, remembering just how pivotal the community was in shaping Firefox into what it is today. The dedication of volunteers and localizers helped make Firefox a truly global browser, and their impact is still felt — and sometimes missed — today.</p>



<figure class="wp-block-image size-large"><a href="https://flickr.com/photos/nitot/2721409682/in/album-72157606446156227"><img loading="lazy" decoding="async" width="1024" height="768" src="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/mozilla_l10n_2008-1024x768.jpg" alt="Picture of Mozilla L10n folks at the first Mozilla Summit (Whistler, 2008), back when Mozilla was still inviting volunteers to Company events." class="wp-image-219" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2024/10/mozilla_l10n_2008-1024x768.jpg 1024w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/mozilla_l10n_2008-300x225.jpg 300w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/mozilla_l10n_2008-768x576.jpg 768w, https://www.yetanothertechblog.com/wp-content/uploads/2024/10/mozilla_l10n_2008.jpg 1500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Mozilla L10n Community in Whistler, 2008 (Photo by Tristan Nitot)</figcaption></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://www.yetanothertechblog.com/2024/10/20/the-prehistory-of-mozillas-localization-repository-infrastructure/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Benefits of Intermittent Fasting in COVID-19 Times</title>
		<link>https://www.yetanothertechblog.com/2020/11/12/benefits-of-intermittent-fasting-in-covid-19-times/</link>
					<comments>https://www.yetanothertechblog.com/2020/11/12/benefits-of-intermittent-fasting-in-covid-19-times/#respond</comments>
		
		<dc:creator><![CDATA[flod]]></dc:creator>
		<pubDate>Thu, 12 Nov 2020 16:46:34 +0000</pubDate>
				<category><![CDATA[personal]]></category>
		<guid isPermaLink="false">https://www.yetanothertechblog.com/?p=194</guid>

					<description><![CDATA[Quite a deviation from the technology focused articles that I usually post on this blog, but I have been thinking about this for a while, thanks also to COVID-19 lock-downs, and wanted to write down a few thoughts and notes. Premise: I&#8217;ve been obese or overweight for most of my life. My best guess is [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Quite a deviation from the technology focused articles that I usually post on this blog, but I have been thinking about this for a while, thanks also to COVID-19 lock-downs, and wanted to write down a few thoughts and notes.</p>



<p class="wp-block-paragraph">Premise: I&#8217;ve been obese or overweight for most of my life. My best guess is that I got close to 115 kg at my heaviest, and I would be considered tall only for a hobbit basketball team. I started keeping track of my weight when I was about 20 years old, and decided to do something about it, also because my knees and ankles were falling apart. Ignoring some set-backs – the dreaded <a href="https://en.wikipedia.org/wiki/Yo-yo_effect">yo-yo effect</a> – I consider my efforts quite successful.</p>



<p class="wp-block-paragraph">I&#8217;ve learned a few things along the way. Not necessarily in order of importance:</p>



<ul class="wp-block-list"><li>Drastic changes won&#8217;t last. You can starve yourself and lose weight, but you&#8217;ll get that weight back, and some more. It&#8217;s not a matter of &#8220;if&#8221; but &#8220;when&#8221;.</li><li>Find a sport that you like, and use it to balance the calories intake instead of relying on drastic diets.</li><li>Learn to cook, stop eating crap.</li><li>Keep an eye on your weight. Stepping on a scale every day is not needed, once or twice a week is good.</li></ul>



<p class="wp-block-paragraph">But, in the end, it&#8217;s mostly about finding something that works for you. Which brings me to the title of this post: <strong>intermittent fasting</strong> (or IF). </p>



<p class="wp-block-paragraph">A few years ago, I saw this <a href="https://www.dailymotion.com/video/x370lox">documentary from BBC</a>, called <em>Eat, Fast, Live Longer</em> (by Michael Mosley). I was quite skeptic at the beginning, but this turned out to be the &#8220;thing that works for me&#8221;.</p>



<p class="wp-block-paragraph">The concept is simple: you have periods where you can eat (often called &#8220;windows&#8221;), alternated to periods where you don&#8217;t eat anything, and you&#8217;re only allowed to drink water, tea, or coffee (without sugar or other additives). Some folks are less strict about the fasting period, but I personally stick to water, occasionally espresso coffee.</p>



<p class="wp-block-paragraph">There are different intermittent fasting patterns, the most common being:</p>



<ul class="wp-block-list"><li>16:8 &#8211; You eat within a 8 hours window, then fast for 16 hours straight.</li><li>18:6, 20:4 &#8211; Same concept, longer fasting period. The more extreme version is OMAD (one meal a day).</li><li>5:2 &#8211; You eat for 5 days, then fast for 2 days straight (sounds fun, doesn&#8217;t it?).</li></ul>



<p class="wp-block-paragraph">I tried 16:8 a few years back, skipping breakfast, but it wasn&#8217;t really working for me. About a year ago, I noticed my weight slowly but worryingly increasing (did I mention to keep track of your weight?), and decided to give it a try again. But this time I would keep track of what was happening, and how good I was at sticking to my goals.</p>



<p class="wp-block-paragraph">Normally I eat breakfast quite early in the morning (often well before 7AM), have lunch around 12, then a closing snack around 2PM. In case of social events, e.g. dinners, I would try to rotate my schedule, but without losing my mind if I couldn&#8217;t fast for 16 hours for a couple of days.</p>



<p class="wp-block-paragraph">Here are the results of 1 year worth of tracking weight and number of fasted hours (using an Android app called <a href="https://www.zerofasting.com/">Zero</a>), averaged by week.</p>



<figure class="wp-block-image size-large"><a href="https://www.yetanothertechblog.com/wp-content/uploads/2020/11/graph.png"><img loading="lazy" decoding="async" width="1024" height="633" src="https://www.yetanothertechblog.com/wp-content/uploads/2020/11/graph-1024x633.png" alt="Graph of weight and number of hours fasting over last year" class="wp-image-195" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2020/11/graph-1024x633.png 1024w, https://www.yetanothertechblog.com/wp-content/uploads/2020/11/graph-300x186.png 300w, https://www.yetanothertechblog.com/wp-content/uploads/2020/11/graph-768x475.png 768w, https://www.yetanothertechblog.com/wp-content/uploads/2020/11/graph-1536x950.png 1536w, https://www.yetanothertechblog.com/wp-content/uploads/2020/11/graph-2048x1266.png 2048w, https://www.yetanothertechblog.com/wp-content/uploads/2020/11/graph-485x300.png 485w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">On top of helping me lose more weight that I hoped for at my age, I realized how much IF helped me in COVID-19 times, while I work from home and personally cook every meal I eat. Here are a few benefits:</p>



<ul class="wp-block-list"><li>Having one meal per day helps limiting the calories intake, assuming weight loss is your goal.</li><li>I only need to cook – and wash dishes – once per day. It might seem a small thing, but working with a US company means that 4-8PM are my busiest hours of the day. So, dinner often ended up consisting of unhealthy food that didn&#8217;t require too much time or effort.</li><li>I sleep a lot better, since I don&#8217;t end up in bed with my stomach still working on digestion.</li><li>Energy levels are unaffected, or possibly positively affected. For example, earlier this year I lowered my half-marathon personal best by 6 minutes (around 1:50), and I&#8217;ve already exceeded my overall running goal of 1300 km for 2020.</li></ul>



<p class="wp-block-paragraph">OK, but what are the negatives? </p>



<ul class="wp-block-list"><li>It works well for me because I live alone, and I&#8217;m not exactly a social animal. If you have to cook for someone else, or meals represent a social gathering in your family, then you need to adapt your schedule accordingly. And that means no breakfast, which is OK for some, terrible for others. </li><li>It would be challenging to organize my sport activities around a different schedule: running fasted is quite OK, but you are supposed to eat soon after exercising, and my body doesn&#8217;t seem to like running in the afternoon.</li><li>Medical conditions (e.g. diabetes) might require extra care, and IF could just not be suitable for some folks.</li></ul>



<p class="wp-block-paragraph">As they say, &#8220;your mileage might vary&#8221;, but maybe it&#8217;s worth a try now that you&#8217;re likely stuck at home.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.yetanothertechblog.com/2020/11/12/benefits-of-intermittent-fasting-in-covid-19-times/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Why Fluent Matters for Localization</title>
		<link>https://www.yetanothertechblog.com/2018/04/05/why-fluent-matters-for-localization/</link>
					<comments>https://www.yetanothertechblog.com/2018/04/05/why-fluent-matters-for-localization/#comments</comments>
		
		<dc:creator><![CDATA[flod]]></dc:creator>
		<pubDate>Thu, 05 Apr 2018 08:29:06 +0000</pubDate>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[fluent]]></category>
		<category><![CDATA[l10n]]></category>
		<category><![CDATA[planet]]></category>
		<guid isPermaLink="false">https://www.yetanothertechblog.com/?p=181</guid>

					<description><![CDATA[In case you don&#8217;t know what Fluent is, it&#8217;s a localization system designed and developed by Mozilla to overcome the limitations of the existing localization technologies. If you have been around Mozilla Localization for a while, and you&#8217;re wondering what happened to L20n, you can read this explanation about the relation between these two projects. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>In case you don&#8217;t know what <a href="http://projectfluent.org/">Fluent</a> is, it&#8217;s a localization system designed and developed by Mozilla to overcome the limitations of the existing localization technologies. If you have been around Mozilla Localization for a while, and you&#8217;re wondering what happened to L20n, you can read <a href="https://github.com/projectfluent/fluent/wiki/Fluent-and-L20n">this explanation</a> about the relation between these two projects.</p>
<p>With Firefox 58 we started moving Firefox Preferences to Fluent, and today we&#8217;re migrating the last pane (Firefox Account &#8211; Sync) in Firefox Nightly (61). The work is not done yet, there are still edge cases to migrate in the existing panes, and subdialogs, but we&#8217;re <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1415730">on track</a>. If you&#8217;re interested in the details, you can read the full journey in two blog posts from Zibi (<a href="https://diary.braniecki.net/2018/01/08/multilingual-gecko-in-2017/">2017</a> and <a href="https://diary.braniecki.net/2018/03/20/multilingual-gecko-status-update-2018-1/">2018)</a>, covering not only Fluent, but also the huge amount of work done on the Gecko platform to improve multilingual support.</p>
<p>At this point, you might be wondering: do we really need another localization system? What&#8217;s wrong with what we have?</p>
<p><a href="https://xkcd.com/927/"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-184" src="https://www.yetanothertechblog.com/wp-content/uploads/2018/04/standards.png" alt="" width="500" height="283" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2018/04/standards.png 500w, https://www.yetanothertechblog.com/wp-content/uploads/2018/04/standards-300x170.png 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></a>The truth is that there is a lot wrong with the current systems. In Gecko alone, we support 4 different file formats to localize content: .dtd, .properties, .inc, .inc. And since none of them support plural forms, we built hacks on top of .properties to support pluralization.</p>
<p>Here are a few practical examples of why Fluent is a huge improvement over existing technologies, and will allow us to improve the quality of the localizations we ship.</p>
<h2>DTDs and Concatenations</h2>
<p>You want to localize this simple fragment of XUL code without using JavaScript.</p>
<pre lang="XML">
<description flex="1">
 Please sign in to reconnect <label class="fxaEmailAddress"></label>
</description>
</pre>
<p>This turns into 2 separate strings in a DTD file, and a long localization comment:</p>
<pre lang="XML"><!-- LOCALIZATION NOTE (signedInLoginFailure.beforename.label, 
signedInLoginFailure.aftername.label): 
these two string are used respectively before and after the account 
email address. Localizers can use one of them, or both, to better 
adapt this sentence to their language. -->
<!ENTITY signedInLoginFailure.beforename.label "Please sign in to reconnect">
<!ENTITY signedInLoginFailure.aftername.label "">
</pre>
<p>Why the empty string at the end? Because, while English doesn&#8217;t need it, other languages might need to change the structure of the sentence, adding content after the email address. On top of that, some localization tools don&#8217;t support empty strings correctly, not allowing localizers to mark an empty translation as a &#8220;translated&#8221; string.</p>
<p>In Fluent, this is simply:</p>
<pre lang="INI">sync-signedin-login-failure = Please sign in to reconnect { $email }
</pre>
<p>One single string, full visibility on the context, flexibility to move around the email address.</p>
<h2>Plural Forms</h2>
<p>Plural forms are supported in Gecko only for <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Localization/Localization_and_Plurals#Developing_with_PluralForm">.properties files</a>. Fluent supports plural forms natively, and with a lot of additional flexibility.</p>
<p>First of all, if you&#8217;re not familiar with the complexity of plurals across languages (limiting the discussion to cardinal integer numbers):</p>
<ul>
<li>English, like many other European languages, only has 2 plural forms: n=1 uses one form (&#8220;1 page&#8221;), all other numbers (n!=1) use a different form (&#8220;2 pages&#8221;). Sadly, this makes a lot of people think about plural in terms of &#8220;1 vs many&#8221;, while that&#8217;s not really the case for most languages.</li>
<li>French still has 2 plural forms, but uses the same form for both 0 and 1.</li>
<li>Other languages can only have one form (e.g. Chinese), or have up to 6 different plural forms (e.g. Arabic). Fluent uses the <a href="http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html">CLDR categories</a> (zero, one, two, few, many, other) to match a number to the correct plural form. For example, in Russian 1 and 21 will use the form &#8220;one&#8221;, but 11 will use &#8220;other&#8221;.</li>
<li>The behavior might change if the actual number is present or not. For example, Turkic languages don&#8217;t need to pluralize a noun after a number (&#8220;1 page&#8221;), but need plural forms in sentences referencing to one or more elements (&#8220;this&#8221; vs &#8220;them&#8221;).</li>
</ul>
<p>Consider for example this use case: in Firefox, the button to set the home page changes from &#8220;Use Current Page&#8221; to &#8220;Use Current Pages&#8221;, depending on the number of open tabs.</p>
<p>If you want to use a proper plural form, you need to add the number of tabs to the string. In .properties, it would look like this (plural forms are separated by a semicolon):</p>
<pre lang="INI">use-current-pages = Use Current Page;Use Current #1 Pages
</pre>
<p>This will force languages to create all plural forms for their locales, even if they might not be needed. If your language has 6 forms, you need to provide all 6 forms, even if they&#8217;re all identical. Fun, isn&#8217;t it? Note that this is not just a limitation of the plural system used in .properties, the same happens in GetText (.po files).</p>
<p>Here&#8217;s how Fluent improve things: first, you don&#8217;t need to add all plural forms, you can rely on the fall back to the default value (indicated by *), without raising any error:</p>
<pre lang="INI">             
use-current-pages =
     .label =
         {
            *[other] Использовать текущие страницы
         } 
</pre>
<p>More important, you can match a specific number (1 in this case):</p>
<pre lang="INI">  
use-current-pages =
     .label =
         {
             [1] Использовать текущую страницу           
            *[other] Использовать текущие страницы
         } 
</pre>
<p>In Russian, the &#8220;[one]&#8221; form would be also used for 21 tabs, while here it&#8217;s only used for 1 tab.</p>
<p>Let&#8217;s assume the English message looks like this:</p>
<pre lang="INI">use-current-pages =
     .label =
         { $tabCount ->
             [1] Use Current Page
            *[other] Use Current Pages
         }
</pre>
<p>Do you need to expose the number in your message and treat it like a standard plural form? You can:</p>
<pre lang="INI">use-current-pages =
     .label =
         { $tabCount ->
             [one] Use { $tabCount } Page
            *[other] Use { $tabCount } Pages
         }
</pre>
<p>Do you only need one form? Again, you can simplify it into:</p>
<pre lang="INI">use-current-pages =
     .label = Use { $tabCount } Pages
</pre>
<p>or even:</p>
<pre lang="INI">use-current-pages =
     .label = Use Current Pages
</pre>
<h2>Variants</h2>
<p>This is one of the most exciting changes introduced to the localization paradigm. </p>
<p>Consider this example: &#8220;Firefox Account&#8221; is a special brand within Firefox. While &#8220;Firefox&#8221; itself should not be localized or declined, &#8220;account&#8221; can be localized and moved. In Italian it&#8217;s &#8220;Account Firefox&#8221;, &#8220;Cuenta de Firefox&#8221; in Spanish.</p>
<p>A special entity is defined in order to be reused in other strings:</p>
<pre lang="XML">
<!ENTITY syncBrand.fxAccount.label "Firefox Account">
</pre>
<p>For example:</p>
<pre lang="XML">
<!ENTITY signedOut.accountBox.title "Connect with a &#038;syncBrand.fxAccount.label;">
</pre>
<p>In Italian this results in &#8220;Connetti &#038;syncBrand.fxAccount.label;&#8221;. It&#8217;s not natural, and it looks wrong, because we don&#8217;t capitalize nouns in the middle of a sentence. </p>
<p><a href="https://www.yetanothertechblog.com/wp-content/uploads/2018/04/beta.png"><img loading="lazy" decoding="async" src="https://www.yetanothertechblog.com/wp-content/uploads/2018/04/beta.png" alt="" width="685" height="134" class="aligncenter size-full wp-image-185" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2018/04/beta.png 685w, https://www.yetanothertechblog.com/wp-content/uploads/2018/04/beta-300x59.png 300w, https://www.yetanothertechblog.com/wp-content/uploads/2018/04/beta-500x98.png 500w" sizes="auto, (max-width: 685px) 100vw, 685px" /></a></p>
<p>My only option to improve the translation, and make it sound more natural, would have been to drop the entity and just add the translated name. That defies the entire concept of having a central definition for the brand. </p>
<p>Here&#8217;s what I can do in Fluent. The brand is defined as a <b>term</b>, a special type of message that can only be referenced from other strings (not code), and can have additional attributes.</p>
<pre lang="INI">
-fxaccount-brand-name = Firefox Account
sync-signedout-account-title = Connect with a { -fxaccount-brand-name }
</pre>
<p>And now in Italian I can do:</p>
<pre lang="INI">
-fxaccount-brand-name =
    {
        [lowercase] account Firefox
       *[uppercase] Account Firefox
    }
sync-signedout-account-title = Connetti il tuo { -fxaccount-brand-name[lowercase] }
</pre>
<p><a href="https://www.yetanothertechblog.com/wp-content/uploads/2018/04/nightly.png"><img loading="lazy" decoding="async" src="https://www.yetanothertechblog.com/wp-content/uploads/2018/04/nightly.png" alt="" width="678" height="112" class="aligncenter size-full wp-image-186" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2018/04/nightly.png 678w, https://www.yetanothertechblog.com/wp-content/uploads/2018/04/nightly-300x50.png 300w, https://www.yetanothertechblog.com/wp-content/uploads/2018/04/nightly-500x83.png 500w" sizes="auto, (max-width: 678px) 100vw, 678px" /></a></p>
<p>While uppercase vs lowercase is a trivial example, variants can have a much deeper impact on localization quality for complex languages that use declensions, where the word &#8220;account&#8221; changes based on its role within the sentence (nominative, accusative, etc.).</p>
<p>This is only the tip of the iceberg, there&#8217;s more you can do with Fluent, and the new localization API will allow us to drastically improve the experience for non English users in Firefox. Here are some additional links if you want to learn more about Fluent:</p>
<ul>
<li><a href="http://projectfluent.org/">Project Fluent</a></li>
<li><a href="https://firefox-source-docs.mozilla.org/intl/l10n/l10n/fluent_tutorial.html">Fluent documentation for Firefox Developers</a></li>
<li><a href="https://mozilla-l10n.github.io/localizer-documentation/tools/fluent/basic_syntax.html">Fluent documentation for localizers</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.yetanothertechblog.com/2018/04/05/why-fluent-matters-for-localization/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Goodbye Jooliaan</title>
		<link>https://www.yetanothertechblog.com/2017/02/06/goodbye-jooliaan/</link>
					<comments>https://www.yetanothertechblog.com/2017/02/06/goodbye-jooliaan/#comments</comments>
		
		<dc:creator><![CDATA[flod]]></dc:creator>
		<pubDate>Mon, 06 Feb 2017 11:36:36 +0000</pubDate>
				<category><![CDATA[mozilla italia]]></category>
		<category><![CDATA[planet]]></category>
		<guid isPermaLink="false">https://www.yetanothertechblog.com/?p=176</guid>

					<description><![CDATA[Today is a sad day for Mozilla, not just for the Italian community but for the Mozilla Community as a whole. We just learned that Giuliano Masseroni, aka jooliaan, passed away last night. jooliaan, even if he hasn&#8217;t been active for a few years, had a crucial role in the growth of the Italian community [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Today is a sad day for Mozilla, not just for the Italian community but for the Mozilla Community as a whole. We just learned that Giuliano Masseroni, aka jooliaan, passed away last night.</p>
<p>jooliaan, even if he hasn&#8217;t been active for a few years, had a crucial role in the growth of the Italian community and the creation of the legal association known as Mozilla Italia, as Vice President first, then President, and administrator of the local support forum. If you’re using Firefox in Italian, or seeking and getting help on the forum, it&#8217;s also thanks to his work and dedicated contribution.</p>
<p>Today we&#8217;re sharing in the pain of his family and friends, remembering a person, a friend, who&#8217;s given a fundamental contribution to the history of the Open Source in Italy and Mozilla, and to our own lives.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.yetanothertechblog.com/2017/02/06/goodbye-jooliaan/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Test of PHP 7 Performances</title>
		<link>https://www.yetanothertechblog.com/2015/12/19/test-of-php-7-performances/</link>
					<comments>https://www.yetanothertechblog.com/2015/12/19/test-of-php-7-performances/#respond</comments>
		
		<dc:creator><![CDATA[flod]]></dc:creator>
		<pubDate>Sat, 19 Dec 2015 13:29:21 +0000</pubDate>
				<category><![CDATA[php]]></category>
		<category><![CDATA[planet]]></category>
		<guid isPermaLink="false">https://www.yetanothertechblog.com/?p=166</guid>

					<description><![CDATA[PHP might not be hugely popular these days, but it&#8217;s a fundamental part of the tools I use everyday to manage localization of web parts at Mozilla (e.g. mozilla.org). Today I&#8217;ve decided to give PHP 7 a try on my local virtual machine: it&#8217;s a pretty light VM running Debian 8 (2 GB ram, 2 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>PHP might not be hugely popular these days, but it&#8217;s a fundamental part of the tools I use everyday to manage localization of web parts at Mozilla (e.g. mozilla.org).</p>
<p>Today I&#8217;ve decided to give <a href="http://php.net/archive/2015.php#id2015-12-03-1">PHP 7</a> a try on my local virtual machine: it&#8217;s a pretty light VM running Debian 8 (2 GB ram, 2 cores), hosted on a Mac with VMWare Fusion. Web pages are served by Apache and mod_php, not by PHP&#8217;s internal web server, and there&#8217;s no optimization of any kind on the config.</p>
<p>Since I and my colleague <a href="http://www.chevrel.org/carnet/">Pascal</a> spent quite a bit of time improving code quality and performances in our tools during the last year or so, I already had a script to collect some performance data. I ran the test against <a href="https://l10n.mozilla-community.org/~pascalc/langchecker/">Langchecker</a>, which is the tool providing data to our <a href="https://l10n.mozilla-community.org/webdashboard/">Webdashboard</a>.</p>
<p>Existing version: PHP 5.6.14-0+deb8u1<br />
New version: PHP 7.0.0-5~dotdeb+8.1</p>
<h2>Time needed to generate the page</h2>
<h2><a href="https://www.yetanothertechblog.com/wp-content/uploads/2015/12/time.png" rel="attachment wp-att-168"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-168" src="https://www.yetanothertechblog.com/wp-content/uploads/2015/12/time.png" alt="Time" width="1002" height="525" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2015/12/time.png 1002w, https://www.yetanothertechblog.com/wp-content/uploads/2015/12/time-300x157.png 300w, https://www.yetanothertechblog.com/wp-content/uploads/2015/12/time-768x402.png 768w, https://www.yetanothertechblog.com/wp-content/uploads/2015/12/time-500x262.png 500w" sizes="auto, (max-width: 1002px) 100vw, 1002px" /></a>Memory consumption</h2>
<p><a href="https://www.yetanothertechblog.com/wp-content/uploads/2015/12/memory.png" rel="attachment wp-att-167"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-167" src="https://www.yetanothertechblog.com/wp-content/uploads/2015/12/memory.png" alt="Memory" width="1002" height="525" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2015/12/memory.png 1002w, https://www.yetanothertechblog.com/wp-content/uploads/2015/12/memory-300x157.png 300w, https://www.yetanothertechblog.com/wp-content/uploads/2015/12/memory-768x402.png 768w, https://www.yetanothertechblog.com/wp-content/uploads/2015/12/memory-500x262.png 500w" sizes="auto, (max-width: 1002px) 100vw, 1002px" /></a>While the number of runs was pretty small (50 for each request), I got decently consistent results for memory and time. And the results speak clearly about the performance improvements in PHP 7.</p>
<p>I don&#8217;t personally consider PHP 7 ready for a production environment but, if you can, it&#8217;s definitely worth a try. In our case the code didn&#8217;t need any change.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.yetanothertechblog.com/2015/12/19/test-of-php-7-performances/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Localizing BBCodeXtra</title>
		<link>https://www.yetanothertechblog.com/2015/05/18/localizing-bbcodextra/</link>
					<comments>https://www.yetanothertechblog.com/2015/05/18/localizing-bbcodextra/#comments</comments>
		
		<dc:creator><![CDATA[flod]]></dc:creator>
		<pubDate>Mon, 18 May 2015 08:19:02 +0000</pubDate>
				<category><![CDATA[bbcodextra]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[l10n]]></category>
		<guid isPermaLink="false">https://www.yetanothertechblog.com/?p=161</guid>

					<description><![CDATA[If you never noticed the menu item in this blog, I&#8217;m the developer of a small add-on for Firefox called BBCodeXtra: it&#8217;s an extension, started about 10 years ago, that makes posting on forums and other places (e.g. GitHub) a little less painful. This extension, currently at version 0.4.1, is localized in 16 languages: de, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>If you never noticed the <a href="https://www.yetanothertechblog.com/bbcodextra/">menu item</a> in this blog, I&#8217;m the developer of a small add-on for Firefox called <a href="https://addons.mozilla.org/firefox/addon/bbcodextra/">BBCodeXtra</a>: it&#8217;s an extension, started about 10 years ago, that makes posting on forums and other places (e.g. GitHub) a little less painful.</p>
<p>This extension, currently at version 0.4.1, is localized in 16 languages: de, es-ES, fi, fr, he, it, ja, ko, pl, pt-BR, pt-PT, ru, sk, sr, th, zh-TW.</p>
<p>For the first time in years, I&#8217;m going to release a new version that includes new features, and therefore new strings. While I obviously love localization and localizers, I don&#8217;t intend to work with localization platforms for an add-on with a very limited set of strings and infrequent updates.</p>
<p>The new version (v0.5.0) will be released with all the existing languages enabled, but the new strings will be left in English (excluding Italian). Starting from the next version, I will drop locales that go below 60% unchanged strings (currently it&#8217;s about 70% for all locales).</p>
<p>If you want to contribute updating your localization:</p>
<ul>
<li>Source code is <a href="https://github.com/flodolo/bbcodextra/">hosted on GitHub</a>. Localizations are stored in <a href="https://github.com/flodolo/bbcodextra/tree/master/extension/locale">/extensions/locale</a>. If you&#8217;re already familiar with GitHub, great. If you&#8217;re not, you can try with this <a href="http://flod.org/github/">tutorial</a> or try using the <a href="https://help.github.com/articles/editing-files-in-another-user-s-repository/">online editor</a> available on GitHub.</li>
<li>If you want to receive an email before the next release, in case I have to add new strings and you want to localize them before release, send me an email at flod(at)lodolo(dot).net and I&#8217;ll organize a mailing list.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.yetanothertechblog.com/2015/05/18/localizing-bbcodextra/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Video Subtitles and Localization</title>
		<link>https://www.yetanothertechblog.com/2015/01/15/video-subtitles-and-localization/</link>
					<comments>https://www.yetanothertechblog.com/2015/01/15/video-subtitles-and-localization/#respond</comments>
		
		<dc:creator><![CDATA[flod]]></dc:creator>
		<pubDate>Thu, 15 Jan 2015 13:49:32 +0000</pubDate>
				<category><![CDATA[l10n]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[planet]]></category>
		<guid isPermaLink="false">https://www.yetanothertechblog.com/?p=154</guid>

					<description><![CDATA[Let&#8217;s talk about localization and subtitles – not captions. From Wikipedia: &#8220;Subtitles&#8221; assume the viewer can hear but cannot understand the language or accent, or the speech is not entirely clear, so they only transcribe dialogue and some on-screen text. &#8220;Captions&#8221; aim to describe to the deaf and hard of hearing all significant audio content—spoken [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Let&#8217;s talk about localization and subtitles – not <a href="http://screenfont.ca/learn/">captions</a>. From <a href="http://en.wikipedia.org/wiki/Closed_captioning">Wikipedia</a>:</p>
<blockquote><p>&#8220;Subtitles&#8221; assume the viewer can hear but cannot understand the language or accent, or the speech is not entirely clear, so they only transcribe dialogue and some on-screen text. &#8220;Captions&#8221; aim to describe to the deaf and hard of hearing all significant audio content—spoken dialogue and non-speech information such as the identity of speakers and, occasionally, their manner of speaking – along with any significant music or sound effects using words or symbols.</p></blockquote>
<p>So far I worked on two projects that involved subtitles – <a href="https://www.youtube.com/watch?v=Xm5i5kbIXzc">Web We Want</a> and <a href="https://www.youtube.com/watch?v=LtOGa5M8AuU">Firefox: Choose Independent</a> – and this is what I learned in the process.<span id="more-154"></span></p>
<h2>The Process</h2>
<h3>Step 1: Provide Source Content</h3>
<p>You need the video (obviously) and English subtitles with the correct timing (less obvious). This means that the picture might no be final (sometimes they call this <em>picture lock</em> quality), but the audio track and its timing do.</p>
<h3>Step 2: How Do I Localize Subtitles?</h3>
<p>Currently the most common format for subtitles is <a href="http://en.wikipedia.org/wiki/SubRip">SubRip</a>, and it&#8217;s really simple: sequential number of the subtitle, timing (start-end), text. </p>
<p>For example this is the beginning of the Web We Want .srt file:</p>
<pre>
1
00:00:00,000 --> 00:00:00,864
THE WEB WE WANT

2
00:00:00,864 --> 00:00:03,388
THE WEB WE WANT
an open letter

3
00:00:05,503 --> 00:00:07,406
I am not a data point

4
00:00:07,642 --> 00:00:09,503
to be bought and sold.
</pre>
<p><a href="http://www.amara.org/">Amara</a> is a great tool to localize subtitles: you can use an interactive editor/timeline and you can adapt the timing of each sentence to your needs while watching the video. Potentially you can also choose to automatically sync subtitles between Amara and Youtube.</p>
<h3>Step 3: Host the Video on Youtube</h3>
<p>At this point subtitles are available, someone just needs to load them on YouTube and display the video on a web page.</p>
<p>Sounds simple, doesn&#8217;t it? What could go wrong?</p>
<h2>Potential Localization Issues</h2>
<p>The first issue is timing: if the English text requires 2 seconds to be read, that might not be enough to read the same sentence in Spanish, German or other verbose languages. <strong>That&#8217;s something you need to keep in mind from day one while producing the video and audio track.</strong></p>
<p>Split sentences: sometimes a sentence is split into multiple parts because of its length. Unfortunately the sentence structure might be completely different in the target language, and some details will get lost in translation. Consider for example the final frame of the Choose Independent video:</p>
<p><a href="https://www.yetanothertechblog.com/wp-content/uploads/2015/01/burning_bright.png"><img loading="lazy" decoding="async" src="https://www.yetanothertechblog.com/wp-content/uploads/2015/01/burning_bright.png" alt="Choose Independent frame" width="651" height="401" class="aligncenter size-full wp-image-156" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2015/01/burning_bright.png 651w, https://www.yetanothertechblog.com/wp-content/uploads/2015/01/burning_bright-300x185.png 300w, https://www.yetanothertechblog.com/wp-content/uploads/2015/01/burning_bright-487x300.png 487w" sizes="auto, (max-width: 651px) 100vw, 651px" /></a></p>
<p>«It&#8217;s how we keep our independence online…» (pause, switch to burning fox) «…burning bright»</p>
<p>This works nicely in English since &#8220;burning&#8221; is perfectly synced with the picture, but most locales won&#8217;t be able to obtain the same result. Small bits, but still reducing the impact of the message.</p>
<p>In general, watching a subtitled video is a sub-optimal experience. If you plan to have content in video format, <strong>don&#8217;t focus your communication exclusively on that</strong>.</p>
<h2>Why Youtube Is not Great</h2>
<p>For the <a href="https://www.mozilla.org/firefox/independent/">Firefox Independent page</a> we force YouTube to load subtitles with <a href="https://developers.google.com/youtube/player_parameters#cc_load_policy">cc_load_subtitles</a>.</p>
<p>A few hours after the launch, I started receiving complaints from localizers saying that YouTube was loading subtitles with the wrong localization for some languages: for example nl for fy-NL (Dutch instead of Frisian), de for rm (German instead of Romansh), en-US for cy (English instead of Welsh). </p>
<p>This is how YouTube&#8217;s embed works:</p>
<ul>
<li>If you&#8217;re logged in into Google, you&#8217;ll get the locale you choose for YouTube. For example I get English subtitles, even if I&#8217;m using a browser in Italian (a quick test is to watch the video in private mode).</li>
<li>If you&#8217;re not logged in, you&#8217;ll get the first good locale based on the Accept Language header sent by your browser. For example, for &#8216;dsb&#8217; (Lower Sorbian) this equals to &#8220;dsb, hsb, de, en-US, en&#8221;, and German is the first available language on the list.</li>
</ul>
<p>For some unknown reasons YouTube wasn&#8217;t founding a match in Accept Language and falling back to a different language for those locales, even if the subtitles were localized and loaded. My only guess would be a mismatch in the locale format understood by YouTube, like fy_NL vs fy-NL/fy.</p>
<p>Then I found out that we can send a parameter called &#8216;cc_lang_pref&#8217; to force the language (not exactly well documented), and that fixes cy, fy-NL, rm. For example, if you open <a href="https://www.mozilla.org/it/firefox/independent">https://www.mozilla.org/it/firefox/independent</a> you&#8217;ll get the Italian subtitles even if you&#8217;re using a browser in a different language. Since we have a good locale detection on top of mozilla.org, this makes sense and let us use the most of our localization teams&#8217; work.</p>
<p>But then YouTube becomes not smart: if the requested locale is missing, it doesn&#8217;t rely on Accept Language, but just falls back to English. So Welsh (cy) is now getting subtitles in the expected language, <a href="https://www.mozilla.org/dsb/firefox/independent/">Lower Sorbian</a> (dsb) is getting English instead of German and can only manually switch language. Far from great.</p>
<p>Talking about YouTube, I find quite silly a claim as «I support 163 languages” but don&#8217;t provide the list of them anywhere. I have at least 5 locales code that are not supported or recognized (ast, dsb, es-AR, es-CL, hsb).</p>
<h2>How Do We Fix It?</h2>
<p>I think the solution will be to move away from YouTube and its limitations, use native or alternative video players (<a href="https://github.com/paypal/accessible-html5-video-player">example</a>), <a href="https://developer.mozilla.org/en-US/Apps/Build/Audio_and_video_delivery/Adding_captions_and_subtitles_to_HTML5_video#WebVTT">subtitles in VTT format</a> and take full control of the entire chain. But these are discussion and experiments that still need to start.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.yetanothertechblog.com/2015/01/15/video-subtitles-and-localization/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>2014 &#8211; My Q4 [:flod]</title>
		<link>https://www.yetanothertechblog.com/2015/01/03/2014-my-q4-flod/</link>
					<comments>https://www.yetanothertechblog.com/2015/01/03/2014-my-q4-flod/#respond</comments>
		
		<dc:creator><![CDATA[flod]]></dc:creator>
		<pubDate>Sat, 03 Jan 2015 12:07:31 +0000</pubDate>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[planet]]></category>
		<guid isPermaLink="false">https://www.yetanothertechblog.com/?p=152</guid>

					<description><![CDATA[One of my many resolutions for 2015 is to blog more, both here in English and on my Italian blog, which just turned 10 last September. Keeping a diary of what happened in the last months can be useful, and it&#8217;s definitely a good exercise for me, so I&#8217;ll try to make a habit of [&#8230;]]]></description>
										<content:encoded><![CDATA[<div style="margin-bottom: 30px;"><a title="Firefox by Francesco Lodolo, on Flickr" href="https://www.flickr.com/photos/flod/16155125215"><img loading="lazy" decoding="async" class=" aligncenter" src="https://farm8.staticflickr.com/7536/16155125215_07a5df507a_z.jpg" alt="Firefox" width="640" height="395" /></a>One of my many resolutions for 2015 is to blog more, both here in English and on my <a href="http://www.pseudotecnico.org/blog/">Italian blog</a>, which just turned 10 last September.</div>
<div style="margin-bottom: 30px;">Keeping a diary of what happened in the last months can be useful, and it&#8217;s definitely a good exercise for me, so I&#8217;ll try to make a habit of posting a summary of my quarters like my <a href="http://www.chevrel.org/carnet/">teammate Pascal does</a>.</div>
<p><span id="more-152"></span></p>
<h2>mozilla.org</h2>
<p>I probably spent most of my last quarter working on mozilla.org updates. My job, together with Pascal, consists in checking new pages for localizability issues at an early stage, extracting strings in .lang files, exposing them to localizers and pushing content to production. Luckily, on the other side there&#8217;s a wonderful team of people who help us making sure that localization is always treated as a first class citizen.</p>
<p><a href="https://www.mozilla.org/">The new home page design</a> went live in October, localized in 33 languages on day one (57 as I write this post). That&#8217;s a huge accomplishment.</p>
<p>Ignoring smaller updates, this quarter we also had the <a href="https://www.mozilla.org/firefox/android/">new Firefox for Android page</a> (42 languages), the redesigned <a href="https://www.mozilla.org/contribute/">Get Involved page</a> (25 languages, with some bumps on the road), and the new <a href="https://www.mozilla.org/firefox/developer/">Firefox Developer Edition landing page</a> (34 languages).</p>
<p>And then this tiny thing called #fx10 happened.</p>
<h2>Firefox 10th Anniversary</h2>
<p>This was an interesting and exhausting experience. For example in order to localize the UI Tour (&#8220;Privacy Tour&#8221;) for 33.1 I had to manage communications with 26 teams using direct emails. And then organize the localization of subtitles for <a href="https://www.youtube.com/watch?v=LtOGa5M8AuU">this video</a> (I&#8217;ll talk about this in a separate post, long story). Everything trying to disclose as little information as possible to the public before the launch and avoid spoiling the surprise.</p>
<p>To give some numbers: we usually ask for 2/3 weeks for small localization projects, at least 4 weeks for bigger projects that require work from all ~90 locales supported across platforms (last case was Australis launch).</p>
<p>In this case the longest deadline was 3 weeks (privacy tour), most of the material became available 2 weeks from launch, with some edge cases (48 hours), a lot of changes, unplanned material and averted crises (huge shout-out to Erin Lancaster for coordinating so many teams and initiatives).</p>
<p>Size of the work requested to localizers: a rough estimate varies from a minimum of about 140 strings/1000 words, to about 330 strings/3000 words for bigger locales.</p>
<h2>Internal Tools</h2>
<p>To track the localization status of web parts we rely on three different tools:</p>
<ul>
<li><a href="https://l10n.mozilla-community.org/~pascalc/langchecker/">Langchecker</a>: analyzes SVN repositories hosting strings in <a href="https://github.com/mozilla-l10n/langchecker/wiki/.lang-files-format">.lang format</a>, provides status dashboards, error checks and feeds external tools with results.</li>
<li><a href="https://l10n.mozilla-community.org/~flod/webstatus/">Webstatus</a>: same as langchecker, but for external products/websites (SVN/Github) using <a href="http://en.wikipedia.org/wiki/Gettext">Gettext</a> files.</li>
<li><a href="https://l10n.mozilla-community.org/webdashboard/">Webdashboard</a>: it&#8217;s the source used by localizers to track pending work (how many strings are missing, deadlines, errors, etc.), displaying information received from langchecker and webstatus.</li>
</ul>
<p>These are some of the improvements introduced in the last quarter.</p>
<h3>Langchecker</h3>
<p>I added support for a <em>raw</em> file type, currently used for text files. Unlike .lang file, where we can determine the exact status of localization (translated strings, missing, errors, etc.), we can only do minimal checks for this kind of files: does the file exist in locale X? Is it mandatory or optional? Was it updated before or after the last reference update? The main usage for this is to track localization of autoresponders for the new <a href="https://www.mozilla.org/contribute/">Get Involved</a> page.</p>
<p>Also added command line scripts to import strings in .lang files using <a href="https://github.com/mozfr/transvision/wiki/JSON-API">Transvision API</a>, and improved the code detecting errors in translations (e.g. missing Python variables).</p>
<h3>Webdashboard</h3>
<p>Besides displaying information about <em>raw</em> files, I focused on improving a very useful feature added last summer by our intern <a href="http://www.theochevalier.fr/">Théo</a>, called &#8220;Project View&#8221;. Basically we can display on a single page the status of several files scattered across different repositories (<a href="https://l10n.mozilla-community.org/webdashboard/?project=snippets_jan2015">example</a>) and share it with other teams.</p>
<h2>Transvision</h2>
<p>I didn&#8217;t have much time to work on <a href="http://transvision.mozfr.org/">Transvision</a> this quarter, but I managed to land a change that I consider really important: now the list of supported products and supported locales for each product is fetched from an external source. The practical result is that we don&#8217;t have to release a new version of Transvision to support Gaia version X or add a new locale on Aurora, reducing the time necessary to deploy these changes from weeks or months (new manual release) to less than 24 hours (automated cronjob).</p>
<p>I also worked on a view to display &#8220;<a href="http://transvision-beta.mozfr.org/unchanged/">unchanged strings</a>&#8221; (i.e. strings identical to English), and some small refactor/clean-up changes.</p>
<p>One my goals for next quarter is to figure out with other team members a plan/schedule to release more often.</p>
<h2>Productization</h2>
<p>Part of my job is also to take care of <a href="https://wiki.mozilla.org/L10n:Productization">productization</a> (p12n), which means landing settings for new locales, as well as organizing mass updates (e.g. switching Wikipedia to SLL) and making sure that we don&#8217;t ship anything broken.</p>
<p>Last quarter I did a complete rewrite of the <a href="https://github.com/flodolo/p12n-extract">tool</a> I use to extract information from all repositories. The original code was never meant to be shared; for example I realized how counter-intuitive the data structure was only after trying to explain it to another person. It&#8217;s still clumsy Python code written by someone who never saw Python until two years ago, but now with tests <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p>The same tool is at the base of this <a href="http://transvision.mozfr.org/productization/">view on Transvision</a>, or images like this one (all searchplugin images we&#8217;re shipping on Firefox Beta across locales).</p>
<p><a href="https://www.yetanothertechblog.com/wp-content/uploads/2015/01/beta.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-153" src="https://www.yetanothertechblog.com/wp-content/uploads/2015/01/beta.png" alt="Firefox Beta Images" width="502" height="742" srcset="https://www.yetanothertechblog.com/wp-content/uploads/2015/01/beta.png 502w, https://www.yetanothertechblog.com/wp-content/uploads/2015/01/beta-203x300.png 203w, https://www.yetanothertechblog.com/wp-content/uploads/2015/01/beta-300x443.png 300w" sizes="auto, (max-width: 502px) 100vw, 502px" /></a></p>
<h2>Miscellanea</h2>
<p>As part of my daily job I also check all strings landing on master/trunk branches for Gaia, Firefox and Firefox for Android, and file bugs for any localizability issues. Some interesting things happened there (e.g. the new search UI), but that&#8217;s a discussion probably worth a different post (and more thinking on my side).</p>
<p>I also briefly helped Mozilla Foundation organizing the localization process of the <a href="https://fundraising.mozilla.org/category/l10n/">EOY fundraising campaign</a>. I really hope we&#8217;ll manage to organize this better next year, and involve localization teams in the process if they have resources to help.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.yetanothertechblog.com/2015/01/03/2014-my-q4-flod/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>l10n: String Length and Verbosity across Languages</title>
		<link>https://www.yetanothertechblog.com/2013/12/27/l10n-string-length-and-verbosity-across-languages/</link>
					<comments>https://www.yetanothertechblog.com/2013/12/27/l10n-string-length-and-verbosity-across-languages/#comments</comments>
		
		<dc:creator><![CDATA[flod]]></dc:creator>
		<pubDate>Fri, 27 Dec 2013 10:21:34 +0000</pubDate>
				<category><![CDATA[firefox os]]></category>
		<category><![CDATA[l10n]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[planet]]></category>
		<guid isPermaLink="false">https://www.yetanothertechblog.com/?p=142</guid>

					<description><![CDATA[A few months ago I was discussing with @kaze about the truncation plague on Firefox OS, and he came out with a sentence that left me doubtful: according to the desktop metrics I had, French is the least compact locale and Chinese is the most compact one So I had to check it somehow 😉 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>A few months ago I was discussing with <a href="https://twitter.com/fabi1cazenave">@kaze</a> about the <em>truncation plague</em> on Firefox OS, and he came out with a sentence that left me doubtful:</p>
<blockquote><p>according to the desktop metrics I had, French is the least compact locale and Chinese is the most compact one</p></blockquote>
<p>So I had to check it somehow <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> (in Italy they would call me <a href="http://en.wikipedia.org/wiki/Thomas_the_Apostle#Gospel_of_John">Saint Thomas</a> for being skeptical).</p>
<p>The basic idea was simple: use <a href="https://wiki.mozilla.org/L10n:Silme">Silme</a> to analyze all locales available in Mozilla l10n repositories, comparing string lengths between English and another language.</p>
<p>Here&#8217;s the <a href="https://github.com/flodolo/scripts/blob/master/mozilla_l10n/compare_string_length.py">resulting Python script</a> (beware my slowly improving programming skills) and a <a href="http://l10n.mozilla-community.org/~flod/compare_length/static.html">table with the results</a> (data can be sorted by clicking on column headers).</p>
<h2>Sample and Reference</h2>
<p>I&#8217;m using <a href="http://hg.mozilla.org/releases/l10n/mozilla-beta/">mozilla-beta</a> as a reference, and comparing each locale against en-GB. Why not en-US? The reason is simple: en-US strings are scattered across the entire mozilla-central repository, so I should do tricks like <a href="https://github.com/mozfr/transvision">Transvision</a> in order to create a pseudo en-US string-only repository. Using en-GB leads to less precise results (see below), but for the sake of this analysis I considered it an acceptable compromise.</p>
<p>I&#8217;m not checking all folders, only the main ones (&#8216;browser&#8217;, &#8216;dom&#8217;, &#8216;mail&#8217;, &#8216;mobile&#8217;, &#8216;netwerk&#8217;, &#8216;security&#8217;, &#8216;services&#8217;, &#8216;suite&#8217;, &#8216;toolkit&#8217;, &#8216;webapprt&#8217;). This still generates an archive of almost 18,000 strings for locales translating all products, so it seems a decent sample.</p>
<h2>Caveats and Weird Results</h2>
<p>String 1: en-GB 2 characters, locale X 4 characters -&gt; +2 characters, +100%<br />
String 2: en-GB 8 characters, locale X 4 characters -&gt; -4 characters, -50%<br />
Average for locale X: -1 characters, +25% (sum of differences divided by total number of items).</p>
<p>Not sure if this is the best choice, but I couldn&#8217;t think of an alternative. Note also that I&#8217;m ignoring single character strings (access keys, shortcuts).</p>
<p>In the <a href="http://l10n.mozilla-community.org/~flod/compare_length/static.html">table</a> you&#8217;ll see a global column (average results) and &#8220;buckets&#8221;, with string groups based on en-GB original length. Too bad these groups are often unreliable because of the &#8220;concatenation conundrum&#8221;, where one string could be created by concatenating 3 different labels.</p>
<p>Typical example to create a sentence with a link (note that concatenation should be always avoided):</p>
<pre>sentence.before = Hey, this is a
sentence.link = very interesting link
sentence.after = .</pre>
<p>In Italian this could be localized as</p>
<pre>sentence.before = Ehi, questo
sentence.link = link
sentence.after = è veramente interessante.</pre>
<p>Do you see what just happened here? Length comparison based on groups just became less interesting, both averages and maximum/minimum differences.</p>
<p>Anyhow, here&#8217;s a good image (graph based on global difference in percentage) that I&#8217;d like to call “Why using English as a reference for designing UI may not be a great idea”.</p>
<p><a href="https://www.yetanothertechblog.com/wp-content/uploads/2013/12/comparison_mozilla_beta.png"><img loading="lazy" decoding="async" alt="Length Comparison - mozilla-beta" src="https://www.yetanothertechblog.com/wp-content/uploads/2013/12/comparison_mozilla_beta-1024x752.png" width="584" height="428" /></a><br />
<a href="https://www.yetanothertechblog.com/wp-content/uploads/2013/12/comparison_mozilla_beta.png" target="_blank"><span style="font-size: 80%;">Open link in a new tab/window to see the full image</span></a></p>
<h2>Why not use Gaia directly?</h2>
<p>This sounds like a good idea: we have a real en-US repository, and we don&#8217;t have concatenations. But there are some disadvantages as well:</p>
<ul>
<li>Most locales already did at least two rounds of QA, so a lot of strings have already been (heavily) shortened to fit in the UI. So data could be less useful and interesting.</li>
<li>Several locales are incomplete on gaia-l10n. For this very reason I excluded all locales with less than 1000 strings translated.</li>
</ul>
<p>Here&#8217;s the <a href="http://l10n.mozilla-community.org/~flod/compare_length/static_gaia.html">same table</a> for Gaia. And, again, a similar graph based on global difference in percentage.</p>
<p><a href="https://www.yetanothertechblog.com/wp-content/uploads/2013/12/comparison_gaia.png"><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-144" alt="Length Comparison - Gaia" src="https://www.yetanothertechblog.com/wp-content/uploads/2013/12/comparison_gaia-1024x752.png" width="584" height="428" /></a><a href="https://www.yetanothertechblog.com/wp-content/uploads/2013/12/comparison_gaia.png" target="_blank"><span style="font-size: 80%;">Open link in a new tab/window to see the full image</span></a></p>
<p>Fun facts:</p>
<ul>
<li>We know that en-GB is 0.16% longer than en-US, at least on Gaia.</li>
<li>A simple word as &#8220;OK&#8221; (2 characters) can become as long as &#8220;Kulungile&#8221; (9) in <a href="http://en.wikipedia.org/wiki/Xhosa_language">Xhosa</a>, or &#8220;Ceart ma-thà&#8221; (12) in Scottish Gaelic.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.yetanothertechblog.com/2013/12/27/l10n-string-length-and-verbosity-across-languages/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>Summit 2013 planning assembly: a wonderful begin</title>
		<link>https://www.yetanothertechblog.com/2013/06/17/summit-2013-planning-assembly-a-wonderful-begin/</link>
					<comments>https://www.yetanothertechblog.com/2013/06/17/summit-2013-planning-assembly-a-wonderful-begin/#respond</comments>
		
		<dc:creator><![CDATA[flod]]></dc:creator>
		<pubDate>Mon, 17 Jun 2013 08:16:09 +0000</pubDate>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[planet]]></category>
		<guid isPermaLink="false">https://www.yetanothertechblog.com/?p=136</guid>

					<description><![CDATA[Note: this is a guest post from Iacopo Benesperi, a fellow Mozillian from the Italian community. This week-end took place in Mozilla&#8217;s Paris office the Summit 2013 planning assembly: a gathering of about 65 people from all around the world and representing all areas of the Mozilla project, with both paid staff and volunteers, aimed [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><em>Note: this is a guest post from Iacopo Benesperi, a fellow Mozillian from the Italian community.</em></p>
<p>This week-end took place in Mozilla&#8217;s Paris office the Summit 2013 planning assembly: a gathering of about 65 people from all around the world and representing all areas of the Mozilla project, with both paid staff and volunteers, aimed to plan and shape the next Summit, that will take place the first week-end of October in Bruxelles, Toronto and Santa Clara.</p>
<p>TL;DR: it&#8217;s been a great assembly. If we manage to accomplish at the next Summit half of the things we&#8217;ve discussed in this week-end, it will have been the best Mozilla event ever.</p>
<p>The aim of the assembly was not to define a schedule for the event and fix everything but to talk about which are the important topics that animate the Mozilla project these days, start to discuss them and shape them in a way so that we can come out with a good format for the Summit to address them and try to give and propose solutions for them. To do this, all the planning committee has taken interviews to fellow Mozillians in the last month to have a wider view of which is the temperature of the project in these days and act as a representative for the comments expressed.</p>
<p>I went to Paris without a clear idea of what we would have accomplished there, but I&#8217;m impressed with the result we had.<br />
First of all, this assembly was facilitated by people of <a href="http://www.unconference.net">unconference.net</a>, who proposed a peculiar way to proceed with it. I was a bit skeptic with the method proposed, but it turned out that some of their <a href="http://www.unconference.net/methods/">methods</a> are really great (like unpanel) and we will definitely adopt them for the next Summit, while some others still look like rubbish (I may still be proved wrong).<br />
The second important fact is that we talked little about technology and a lot about Mozilla, its community, its communication (internal and external) and the interactions between its components and people. On one hand, as Gandalf pointed out, this is a sign that we trust implicitly our technology and the fact that it will be discussed at the Summit, because this is a big portion of what Mozilla is about. On the other hand, it&#8217;s a sign that there&#8217;s a general awareness, not only among community members but also (finally) among employees and paid staff and board of directors that we have communication problems between the different parts of the projects and especially between paid staff and volunteers, and the time is now mature to address and try to solve them. What I&#8217;m talking about is not only communication to get things done but also communication related to the decision-making process.</p>
<p>So, it will be interesting to experiment discussions around different time-zones and locations. I will probably post more about the assembly and the planning for the Summit in the next days, when ideas and thoughts will have settled down a bit and I&#8217;ll have had the time to read all the ideas and documentation we produced during this two days. What I felt important to communicate immediately is the fact that the next Summit will be a wonderful occasion to talk not only about our technologies but also about who we are, what we want to do and where we want to go. It will be an occasion for the community to teach and mentor the newest community members and more importantly all the new employees to let them understand and feel the power and importance of our community and it will be, in general, an occasion to have our voice finally be heard and taken into consideration not only in the tasks at hand, but in building the new policies and guidelines that will drive all the project in the future.</p>
<p>I&#8217;m sure we&#8217;ll try, in the next months, to provide some initial information and documentation about what have been discussed and decided so far so that you can arrive at the Summit prepared to give your contribution to the conversation, so that we can take the most out of the Summit and make it really matter in our future.</p>
<p>As I said at the beginning: if we manage to discuss and propose solutions to half of the problems and concerns raised during this two days, we will have had the best Mozilla event ever; one that will have strengthened and made our project more mature.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.yetanothertechblog.com/2013/06/17/summit-2013-planning-assembly-a-wonderful-begin/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
