<?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>mFabrik - mobile sites, apps, HTML5 and CMS software development &#187; multilingual</title>
	<atom:link href="http://blog.mfabrik.com/tag/multilingual/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mfabrik.com</link>
	<description>Freedom delivered.</description>
	<lastBuildDate>Wed, 03 Aug 2011 09:47:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Building a mobile site and applications with Django and Python</title>
		<link>http://blog.mfabrik.com/2009/09/30/building-a-mobile-site-and-applications-with-django-and-python/</link>
		<comments>http://blog.mfabrik.com/2009/09/30/building-a-mobile-site-and-applications-with-django-and-python/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 08:46:52 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[pys60]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apex vertex]]></category>
		<category><![CDATA[augmented reality]]></category>
		<category><![CDATA[bicycling]]></category>
		<category><![CDATA[bilingual]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[browsercontrol]]></category>
		<category><![CDATA[capabilities]]></category>
		<category><![CDATA[darwin]]></category>
		<category><![CDATA[django-cms]]></category>
		<category><![CDATA[extjs]]></category>
		<category><![CDATA[google maps]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[handset]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[lbs]]></category>
		<category><![CDATA[localhost]]></category>
		<category><![CDATA[location based]]></category>
		<category><![CDATA[map]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[mobile profile]]></category>
		<category><![CDATA[mod_python]]></category>
		<category><![CDATA[multichannel]]></category>
		<category><![CDATA[multilingual]]></category>
		<category><![CDATA[nokia]]></category>
		<category><![CDATA[oulu]]></category>
		<category><![CDATA[phonegap]]></category>
		<category><![CDATA[premium]]></category>
		<category><![CDATA[print]]></category>
		<category><![CDATA[publishing]]></category>
		<category><![CDATA[rtsp]]></category>
		<category><![CDATA[series 40]]></category>
		<category><![CDATA[series 60]]></category>
		<category><![CDATA[sniffing]]></category>
		<category><![CDATA[streaming]]></category>
		<category><![CDATA[symbiansigned]]></category>
		<category><![CDATA[tourism]]></category>
		<category><![CDATA[traffic statistics]]></category>
		<category><![CDATA[twinapex]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[upnorth]]></category>
		<category><![CDATA[user agent]]></category>
		<category><![CDATA[webkit]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://blog.twinapex.fi/?p=248</guid>
		<description><![CDATA[Recently we created a mobile site for an interactive bicycle tour. oulugo.mobi (you need to use mobile browser to access the site or you&#8217;ll get a redirect) is a multimedia enriched bicycle tour through the historic parts of the city of Oulu. All content is provided by OnGo. The route, which you can bicycle through is [...]]]></description>
			<content:encoded><![CDATA[<p>Recently <a href="http://www.twinapex.com">we</a> created a mobile site for an interactive bicycle tour. <a href="http://oulugo.mobi">oulugo.mobi</a> (you need to use mobile browser to access the site or you&#8217;ll get a redirect) is a multimedia enriched bicycle tour through the historic parts of <a href="http://ouka.fi/english/index.asp">the city of Oulu</a>. All content is provided by <a href="http://www.ongo.fi/en/index.htm">OnGo</a>.</p>
<p>The route, which you can bicycle through is drawn on Google Maps. There are nine  action points where the user can listen to streaming audio clips, with still images, in his/her mobile phone. This is sort of  augmented reality experience: The user sees the real world (where he/she is now bicycling) combined with the historic events (audio playback narrative). For example, at Linnansaari (a location on the route) you&#8217;ll see the actual 17th century castle ruins and the narrator tells how the castle exploded when fire, caused by a lighting, reached gunpowder warehouse&#8230; boom. The explosion caused stones fly over 400 meters.</p>
<p>Alternatively, the clips are available as podcasts from <a href="http://www.oulutourism.fi/oulugo/en_default.aspx">Oulu Tourism pages</a>. You can download them into your iPod for offline listening and use in conjuction with a paper map. This demostrates interesting mix of multichannel publishing: paper, web, mobile and podcasts.</p>
<p>The tour is bilingual in Finnish and English.</p>
<p>There exists unreleased iPhone application, based on <a href="http://phonegap.com">PhoneGap</a>, which allows the user to track his/her location real-time on the web page. We didn&#8217;t see it worth of trouble to go through Apple iPhone application review process. When location based service support comes for the browser this feature is indended to be included as the standard HTML5 feature of the service.</p>
<p>There also exists Nokia Series 60 mobile application, based on<a href="http://wiki.opensource.nokia.com/projects/PyS60"> PyS60</a> and Series 60<a href="http://www.forum.nokia.com/info/sw.nokia.com/id/47d8a7fe-768c-44e5-bc26-fcba0a05e35e/S60_Platform_Browser_Control_API_Guide_v2_0_en.pdf.html"> BrowserControl API</a>, which allows the user to track his/her location in real-time. The application provides wrapper around Series 60 WebKit control and allows Javascript to access phone native functions (GPS) over localhost socket communication. Like with Apple, we didn&#8217;t see real-time tracking feature interesting enough to go through Symbian Signed process to get our application released. Also, BrowserControl had seriousquality problems and we didn&#8217;t consider it stable enough for the end users. <a href="https://code.launchpad.net/~august-joki/pys60community/browsercontrol">Some work is available in PyS60 Community Edition repository</a>.</p>
<p>The service is hosted <a href="http://www.twinapex.com/solutions/outsourcing-hosting-and-maintenance-of-internet-and-mobile-systems">on Python specific virtual server on Twinapex services server farm</a>.</p>
<h2>Features</h2>
<ul>
<li>Premium content tailored for audio listening</li>
<li>Dubbed in English and Finnish by a professional voice actor</li>
<li>Bilingual: English/Finnish</li>
<li>Adapts for smartphones (WebKit based browsers) and low end phones (XHTML mobile profile browsers)</li>
<li>Streaming video and audio (RTSP / progressive HTTP download forv iPhone). Different audio quality is provided on depending on the handset features.</li>
<li>Screen resolution detection based on <a href="http://en.wikipedia.org/wiki/User_Agent">user agent sniffing</a>. Three different version of images are used.</li>
<li>Custom Google Maps component for mobile is used. The component adapts for different mobile phones based on sniffing. Features include zoom, show action point, show the current location, search street address name. This component can be published on a request.</li>
<li>Management interface features include video upload, video transcoding different mobile versions and editing bilingual content</li>
<li><a href="http://www.twinapex.com/products/mobile-publishing/apex-vertex/handset-database">Apex Vertex handset database is used to detect the user&#8217;s mobile phone capabilities</a></li>
<li><a href="http://www.twinapex.com/products/mobile-publishing/apex-vertex/reporting">Apex Vertex logging and traffic analytics capabilities are used for the site statistics</a></li>
</ul>
<h2>Software stack</h2>
<ul>
<li><a href="http://www.ubuntu.com">Ubuntu 8.04 Hardy Heron virtual server</a></li>
<li><a href="http://www.apache.org">Apache 2.2 / mod_python</a></li>
<li><a href="http://python.org">Python 2.5</a></li>
<li><a href="http://djangoproject.com">Django 1.0</a></li>
<li><a href="http://django-cms.org/">Django-CMS 1.0</a></li>
<li><a href="http://code.google.com/p/mobilesniffer/">mobile.sniffer Python package to provide abstraction over different handset databases</a></li>
<li><a href="http://www.twinapex.com/products/mobile-publishing/apex-vertex">Apex Vertex streaming</a> solution (RTSP based on Darwin streaming server by Apple)</li>
<li><a href="http://tinymce.moxiecode.com/">TinyMCE WYSIWYG editor</a></li>
<li><a href="http://developer.apple.com/opensource/server/streaming/index.html">Darwin streaming server</a></li>
<li><a href="http://extjs.com/">ExtJS</a> is extensively used in Apex Vertext management interface</li>
</ul>
<h2>Development effort</h2>
<p>Development time: Around 100 hours. Three different developers where involved. Used development tools: <a href="http://www.eclipse.org">Eclipse</a>, <a href="http://pydev.sourceforge.net/">PyDev</a>, <a href="http://subclipse.tigris.org/">Subclipse</a>, <a href="http://subversion.tigris.org/">Subversion</a>. There were around five meetings between the content provider and the technology provider. Few beta testing rounds using iPhone application were performed by bicycling in -10 celcius degrees weather (north and so on&#8230;). No polar bears were harmed during the creation of this mobile service.</p>
<p>The service is linked in from Oulu Tourism pages and thousands of paper brochures printed for Oulu summer season 2009.</p>
<p><strong style="font-weight: bold;">About the author Mikko Ohtamaa</strong></p>
<ul>
<li><a href="http://www.linkedin.com/in/ohtis  ">LinkedIn</a></li>
<li><a href="http://twitter.com/moo9000">Twitter</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2009/09/30/building-a-mobile-site-and-applications-with-django-and-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEO tips: query strings, multiple languages, forms and other content management system issues</title>
		<link>http://blog.mfabrik.com/2009/08/07/seo-tips-query-strings-multiple-languages-forms-and-other-content-management-system-issues/</link>
		<comments>http://blog.mfabrik.com/2009/08/07/seo-tips-query-strings-multiple-languages-forms-and-other-content-management-system-issues/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 11:34:15 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[plone]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[content management system]]></category>
		<category><![CDATA[description]]></category>
		<category><![CDATA[disallowed]]></category>
		<category><![CDATA[dublin core]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[googlebot]]></category>
		<category><![CDATA[hidden]]></category>
		<category><![CDATA[images]]></category>
		<category><![CDATA[keywords]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[mediapartners]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[meta tags]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[multilingual]]></category>
		<category><![CDATA[query string]]></category>
		<category><![CDATA[robots.txt]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[search engine optimizations]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[sitemap]]></category>
		<category><![CDATA[tld]]></category>
		<category><![CDATA[top level domain]]></category>
		<category><![CDATA[webmaster tools]]></category>

		<guid isPermaLink="false">http://blog.twinapex.fi/?p=254</guid>
		<description><![CDATA[This post is collection of search engine optimization tips for content management systems, especially for Plone. Do not index query strings It is often desirable to make sure that query string pages (http://yoursite/page?query_string_action=something) do not end up into the search indexes. Otherwise search bots might index pages like site&#8217;s own search engine results  (yoursite/search?SearchableText=&#8230;) lowering [...]]]></description>
			<content:encoded><![CDATA[<p>This post is collection of search engine optimization tips for content management systems, especially for Plone.</p>
<h2>Do not index query strings</h2>
<p>It is often desirable to make sure that query string pages (http://yoursite/page?query_string_action=something) do not end up into the search indexes. Otherwise search bots might index pages like site&#8217;s own search engine results  (yoursite/search?SearchableText=&#8230;) lowering the visibility of  actual content pages.</p>
<p>GoogleBot has regex support in robots.txt and can be configured to ignore any URL ? in it. See the example below.</p>
<p>Query string indexing causes the crawler crawl things like</p>
<ul>
<li>Various search results (?SearchableText)</li>
<li>Keyword lists (?Subject)</li>
<li>Language switching code (?set_language)&#8230; making set_language appear as the document in the search results</li>
</ul>
<p>Also, &#8220;almost&#8221; human readable query strings look ugly in the address bar&#8230;</p>
<h2>Top level domains and languages</h2>
<p>Using top level domain name (.fi for Finland, .uk for United Kingdoms, and so on.) to make distinction between different languages and areas is optimal solution from the SEO point of view. Search engines use TLD information to reorder the search results based on where  the search query is performed  (there is difference between google.com and google.fi results).</p>
<p>Plone doesn&#8217;t use any query strings for content pages. Making robots to ignore query strings is especially important if you are hosting multilingual site and you use top level domain name (TLD) to separate languages: if you don&#8217;t configure robots.txt to ignore ?set_language links only one of your top level domains (.com, .fi, .xxx) will get proper visibility in the search results. For example we had situation where our domain <a href="www.twinapex.fi">www.twinapex.fi</a> did not get proper visibility because Google considered <a href="www.twinapex.com">www.twinapex.com</a>?set_language=fi as the primary content source (accessing Finnish content through English site and  language switching links).</p>
<h2>Shared forms</h2>
<p>Plone has some forms (send to, login) which can appear on any content page. These must be disallowed or otherwise you might have a search result where the link goes to the form page instead of the actual content page.</p>
<h2>Hidden content and content excluded from the navigation</h2>
<p>Any content excluded from the sitemap navigation  should be put under disallowed in robots.txt. E.g. if you check &#8220;exclude from navigation&#8221; for Plone folder remember to update robots.txt also.</p>
<p>In our case, our internal image bank must not end up being indexed, though images themselves are visible on the site. Otherwise you get funny search result: if you search by person&#8217;s name the photo will be the first hit instead of biography.</p>
<h2>Sitemap protocol</h2>
<p>Crawlers use Sitemap protocol to help determining the content pages on your site (note: sitemap seems to be used for hinting only and it is not authoritative).  Since version 3.1 Plone can automatically generate sitemap.xml.gz. You still need to register sitemap.xml.gz in Google webmaster tools manually.</p>
<p>There exists a sitemap protocol extension for mobile sites.</p>
<h2>Webmaster tools</h2>
<p>Google <a href="Webmaster tools">Webmaster tools</a> enable you to monitor your site visibility in Google and do some search engine specific tasks like submitting sitemaps.</p>
<p>I do not know what kind of similar functionality other search provides have. Please share your knowledge in the blog comments regarding this.</p>
<h2>HTML &lt;head&gt; metadata</h2>
<p>Search engines mostly ignore &lt;meta&gt; tags besides title so there is no point of trying fine-tune them.</p>
<h2>Example robots.txt</h2>
<p>Here is our optimized robots.txt for <a href="http://www.twinapex.com">www.twinapex.com</a>:</p>
<pre># Normal robots.txt body is purely substring match only
# We exclude lots of general purpose forms which are available in various mount points of the site
# and internal image bank which is hidden in the navigation tree in any case
User-agent: *
Disallow: set_language
Disallow: login_form
Disallow: sendto_form
Disallow: /images

# Googlebot allows regex in its syntax
# Block all URLs including query strings (? pattern) - contentish objects expose query string only for actions or status reports which
# might confuse search results.
# This will also block ?set_language
User-Agent: Googlebot
Disallow: /*?*
Disallow: /*folder_factories$

# Allow Adsense bot on entire site
User-agent: Mediapartners-Google*
Disallow:
Allow: /*</pre>
<h2>Useful resources</h2>
<ul>
<li><a href="http://googlewebmastercentral.blogspot.com/2007/12/answering-more-popular-picks-meta-tags.html">How Google treats HTML metatags</a>. This is especially interesting considering Plone&#8217;s support for Dublin core metadata (title, description, keywords). Note: &lt;meta&gt; keywords are not indexed.</li>
<li><a href="http://plone.org/products/plone-seo">Plone SEO add-on product</a></li>
<li><a href="http://www.askapache.com/seo/seo-with-robotstxt.html">SEO with robots.txt</a></li>
<li><a href="http://www.google.com/support/webmasters/bin/answer.py?hl=en&amp;answer=34627">Sitemaps mobile protocol</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2009/08/07/seo-tips-query-strings-multiple-languages-forms-and-other-content-management-system-issues/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Scripting Google analytics for multidomain site</title>
		<link>http://blog.mfabrik.com/2009/07/15/scripting-google-analytics-for-multidomain-site/</link>
		<comments>http://blog.mfabrik.com/2009/07/15/scripting-google-analytics-for-multidomain-site/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 10:41:00 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[plone]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[multilingual]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[tld]]></category>
		<category><![CDATA[top level domain]]></category>

		<guid isPermaLink="false">http://blog.twinapex.fi/?p=206</guid>
		<description><![CDATA[We are running few Plone sites which use top level domain (TLD) to identify the site language. Like many other CMSs out there,  Plone has only one box to enter Google Analytics script snippet.  It is often desirable to use different tracker for different domain and different language combinations, but Google itself doesn&#8217;t provide any [...]]]></description>
			<content:encoded><![CDATA[<p>We are running few Plone sites which use top level domain (TLD) to identify the site language.</p>
<p>Like many other CMSs out there,  Plone has only one box to enter Google Analytics script snippet.  It is often desirable to use different tracker for different domain and different language combinations, but Google itself doesn&#8217;t provide any fancy generator to create complex page tracking code.</p>
<p>Page tracker code, though looks little difficult when spit out by Google Analytics, is just normal Javascript.  You can make the condition to choose the appropriate page tracker id in Javascript itself using document.location property and this way you don&#8217;t need to mess with your page templates to create separate tracking Javascript snippet slots.</p>
<p>Here is an example what you can toss in to Plone <em>site setup</em> -&gt; <em>site</em> -&gt; <em>JavaScript for web statistics support</em>:</p>
<pre>&lt;script type="text/javascript"&gt;
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
&lt;/script&gt;

&lt;script type="text/javascript"&gt;
try {
// Choose page tracker id according to domain
  var domains = document.location.hostname.split(".");
  var tld = domains[domains.length-1];
if(tld == "fi") {
  // .fi
  pageTracker = _gat._getTracker("UA-8819100-1");
} else {
  // .com
  pageTracker = _gat._getTracker("UA-8819100-4");
}
pageTracker._trackPageview();
} catch(err) {
}

&lt;/script&gt;</pre>
<p>This is used on <a href="http://www.twinapex.com">www.twinapex.com</a> and <a href="http://www.twinapex.fi">www.twinapex.fi</a> sites.</p>
<p>Use console.log(err) to output possible Javascript in catch {} errors using Firebug.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2009/07/15/scripting-google-analytics-for-multidomain-site/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Designing a high usability Plone theme</title>
		<link>http://blog.mfabrik.com/2008/09/12/designing-a-high-usability-plone-theme/</link>
		<comments>http://blog.mfabrik.com/2008/09/12/designing-a-high-usability-plone-theme/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 19:24:44 +0000</pubDate>
		<dc:creator>Mikko Ohtamaa</dc:creator>
				<category><![CDATA[Plone (old)]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[fluid]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[icon]]></category>
		<category><![CDATA[icons]]></category>
		<category><![CDATA[layout]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[links]]></category>
		<category><![CDATA[look]]></category>
		<category><![CDATA[multilingual]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[skin]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[theming]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.redinnovation.com/?p=115</guid>
		<description><![CDATA[This is my brain dump of instructions for artists how to design good Plone themes. I hope I can receive some comments, some feedback from the artists itself and then publish this as a plone.org tutorial. Often external artist is used to design a site theme. Artists might or might not have seen Plone, artists [...]]]></description>
			<content:encoded><![CDATA[<p>This is my brain dump of instructions for artists how to design good Plone themes. I hope I can receive some comments, some feedback from the artists itself and then publish this as a plone.org tutorial.</p>
<p>Often external artist is used to design a site theme. Artists might or might not have seen Plone, artists might or might not have any basic usability know how. This article should explain the elements which &#8220;must be there&#8221; to make a match between the theme and Plone easily.</p>
<h2>The basic layout</h2>
<p><!-- 		@page { size: 8.5in 11in; margin: 0.79in } 		P { margin-bottom: 0.08in } 		H1 { margin-bottom: 0.08in } 		H1.western { font-family: "Arial", sans-serif; font-size: 16pt } 		H1.cjk { font-family: "DejaVu Sans"; font-size: 16pt } 		H1.ctl { font-family: "DejaVu Sans"; font-size: 16pt } 		H2 { margin-bottom: 0.08in } 		H2.western { font-family: "Arial", sans-serif; font-size: 14pt; font-style: italic } 		H2.cjk { font-size: 14pt; font-style: italic } 		H2.ctl { font-size: 14pt; font-style: italic } 		TD P { margin-bottom: 0in } 		H3 { margin-bottom: 0.08in } 		H3.western { font-family: "Arial", sans-serif } --></p>
<p style="margin-bottom: 0in;">This document describes the elements of multilingual high usability Plone theme. It is based on fluid div layout, meaning that the content stays very readable on small screens or when CSS is not loaded (<a href="http://en.wikipedia.org/wiki/Screen_reader">screen readers</a>). See <a href="http://css-tricks.com/examples/PerfectFluidWidthLayout/">the example layout</a>. <a href="http://css-tricks.com/examples/PerfectFluidWidthLayout/"></a></p>
<p style="margin-bottom: 0in;">The layout must not break down when user is using non-default font size. E.g. all element accept two rows text, even if the default case is usually one row.</p>
<h2>Plone layout</h2>
<p>Here we are designing a &#8220;normal&#8221; site theme where Plone is used to publish textual content for external readers. This might not always be the case &#8211; for example if Plone is used as a professional tool one might want to use all available screen space to display as much as possible action shortcuts to make the tool to quick to use. The latter is actual case I have seen in medical applications.</p>
<p>Plone layout is formed by seven main parts.</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="56"></col>
<col width="142"></col>
<col width="58"></col>
<tbody>
<tr valign="top">
<td width="22%">Left body padding (auto width)</td>
<td width="55%">
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="256"></col>
<tbody>
<tr>
<td width="100%" valign="top">Header (780 – 1280 pixels)</td>
</tr>
<tr>
<td width="100%" valign="top">
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="85"></col>
<col width="85"></col>
<col width="85"></col>
<tbody>
<tr valign="top">
<td width="33%">Left portlets</td>
<td width="33%">Content (780 – 1000 pixels)</td>
<td width="33%">Right portlets</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td width="100%" valign="top">Footer (780 – 1280 pixels)</td>
</tr>
</tbody>
</table>
</td>
<td width="23%">Right body padding (auto width)</td>
</tr>
</tbody>
</table>
<p>The layout must be designed so that</p>
<ul>
<li>The maximum width of content area newer exceeds a certain 	amount (1200px) so that <a href="http://en.wikipedia.org/wiki/Characters_per_line">characters-per-line</a> count stays readable on wide screen displays. 	Left body padding and right body padding fill the wide screen gap to 	keep the content in sane max-width.</li>
<li>Left portlets and right portlets parts can be missing, giving 	space to content part</li>
<li>Header and footer are resizable. Usually logo is at the left site of the header and actions at the right side of the header. These sections should not overlap with the width of 780 px.</li>
<li>Left body padding and right body padding can have shadow 	effect on the central column a la <a href="http://www.blogger.com/home">blogger</a>.</li>
</ul>
<h3>Alternative layout cases</h3>
<p>The layout must be formed from such a blocks that left or right portlets can be easily dropped without breaking the layout.</p>
<p>Right portlets missing:</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="256"></col>
<tbody>
<tr>
<td width="100%" valign="top">
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="256"></col>
<tbody>
<tr>
<td width="100%" valign="top">Header</td>
</tr>
<tr>
<td width="100%" valign="top">
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="85"></col>
<col width="171"></col>
<tbody>
<tr valign="top">
<td width="33%">Left portlets</td>
<td width="67%">Content</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td width="100%" valign="top">Footer</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<p style="margin-bottom: 0in;">Both portlets missing (front page view):</p>
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="256"></col>
<tbody>
<tr>
<td width="100%" valign="top">
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="256"></col>
<tbody>
<tr>
<td width="100%" valign="top">Header</td>
</tr>
<tr>
<td width="100%" valign="top">
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="256"></col>
<tbody>
<tr>
<td width="100%" valign="top">Content</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td width="100%" valign="top">Footer</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<h2>Header elements</h2>
<p>The header should have the following elements</p>
<ul>
<li>Logo</li>
<li>Language selector &#8211; either a drop down list, flag icons or language names</li>
<li>Site action links with icons: site map, accessibility help, 	toggle easy read (make fonts larger), contact</li>
<li>Search box</li>
<li>Section (main level) navigation tabs</li>
<li>Personal bar. Contains the username and log out buttons. Only 	available when logged in. To see an example, create plone.org account and 	login to ploen.org.</li>
</ul>
<p>The header must scale between 780 – 1280 px. Section navigation tabs may trigger drop down menus, see <a href="http://www.jyu.fi/">http://www.jyu.fi/</a></p>
<h2>Content area elements</h2>
<p>The content area contains</p>
<ul>
<li>Content title</li>
<li>Content description: one paragraph, no HTML formatting</li>
<li>Breadcrumbs path bar displaying the position in the 	navigation hierarchy. <a href="http://plone.org/documentation/how-to/backup-plone">Example</a>.</li>
<li>Content actions: send to, print, RSS feed. Icons with or without text labels. New Plone versions place these <a href="http://www.archred.com/updates/news">at the bottom</a>, but they used to be <a href="http://www.jyu.fi/it/">at the top</a>.</li>
<li>Document byline: creator name w/link, creation date or edit 	date. This is usually only available for logged in members.</li>
<li>Notification messages: When user performs actions (e.g. save) this feedback box is rendered with white i(nfo) letter in blue circle having a message like &#8220;Save succeeded.&#8221;</li>
<li>The main body text and images</li>
</ul>
<p><!-- 		@page { size: 8.5in 11in; margin: 0.79in } 		P { margin-bottom: 0.08in } --></p>
<p>The whole portlet section can be dropped, making space for the content.</p>
<h3>Portlets</h3>
<p>Portlets are boxes on the left and right side of the content containing section specific actions.</p>
<p>Example portlets:</p>
<ul>
<li>
<p style="margin-left: 0.49in;">Navigation</p>
</li>
<li>
<p style="margin-left: 0.49in;">Search (not the header search)</p>
</li>
<li>
<p style="margin-left: 0.49in;">News</p>
</li>
<li>
<p style="margin-left: 0.49in;">Recently changed</p>
</li>
</ul>
<p>The portlet consists of</p>
<ul>
<li>Title (usually link)</li>
<li>Content area</li>
<li>Optional More link, located at the right bottom corner.</li>
</ul>
<p>See <a href="http://www.siggraph.org/">http://www.siggraph.org/</a> for creative use of portlets.</p>
<h2>Footer elements</h2>
<p>The footer has</p>
<ul>
<li>Copyright clause</li>
<li>Link to about page</li>
<li>Contact information</li>
</ul>
<p>The footer must scale between 780 – 1280 px.</p>
<h2>Complete picture</h2>
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="56"></col>
<col width="142"></col>
<col width="58"></col>
<tbody>
<tr valign="top">
<td width="22%">Left body padding</p>
<ul>
<li>Texture</li>
<li>Drop shadow</li>
</ul>
</td>
<td width="55%">
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="256"></col>
<tbody>
<tr>
<td width="100%" valign="top">
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="256"></col>
<tbody>
<tr>
<td width="100%" valign="top">
<ul>
<li>Logo</li>
<li>Search box</li>
<li>Site actions</li>
<li>Language selector</li>
</ul>
</td>
</tr>
<tr>
<td width="100%" valign="top">
<ul>
<li>Section tabs</li>
</ul>
</td>
</tr>
<tr>
<td width="100%" valign="top">
<ul>
<li>Personal bar</li>
</ul>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td width="100%" valign="top">
<table border="1" cellspacing="0" cellpadding="4" width="100%" bordercolor="#000000">
<col width="85"></col>
<col width="85"></col>
<col width="85"></col>
<tbody>
<tr valign="top">
<td width="33%">
<ul>
<li>Navigation</li>
</ul>
</td>
<td width="33%">
<ul>
<li>Breadcrumbs</li>
<li>Content actions</li>
<li>Notification messages</li>
<li>Title</li>
<li>Description</li>
<li>Text body /images</li>
</ul>
</td>
<td width="33%">
<ul>
<li>Calendar</li>
<li>News</li>
<li>Recently added</li>
</ul>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td width="100%" valign="top">
<ul>
<li>Copyright</li>
<li>Link to about page</li>
<li>Contact information</li>
</ul>
</td>
</tr>
</tbody>
</table>
</td>
<td width="23%">Right body padding</td>
</tr>
</tbody>
</table>
<p style="margin-bottom: 0in;">
<h2>Special cases</h2>
<p>These are often required and might shoot you into a foot</p>
<ul>
<li>The current section (main level folder) where the user is 	located is identified somehow: a changing big topic picture, text. 	For example, see <a href="http://www.archred.fi/updates/news">http://www.archred.com/updates/news</a> and you see that there is big Updates title.</li>
<li>To make more space available for front page or top level 	content, breadcrumbs and portlets are missing. A special front page 	animation may be used.See <a href="http://www.archred.com/">http://www.archred.com</a></li>
<li>Breadcrumbs is also often disabled for top level elements</li>
<li>There is a special print.css which is loaded when the 	document is printed. It sets display:none to porlets, header and 	footer so that only the main content area is printed.</li>
<li>Visual editor (Kupu) text might require special CSS rules to have the same formatting rules as in non-edit mode to get real WYSIWYG.</li>
<li>A special attention must be paid for the style of generic HTML elements like a, h1, h2 and p. They are used on the content area and outside it, often with different colors.</li>
</ul>
<h2>Colors</h2>
<p>Plone uses mechanism to have color variables in CSS. See <a href="http://plone.org/documentation/tutorial/working-with-css/base_properties-1">base_properties.prop</a> to get an idea what colors there are and try to guess how they are used.</p>
<h2>Icons</h2>
<p>Plone uses generic icon mechanism to apply icons to any action available on site. Icons are 16&#215;16, transparent with one pixel transparent border leaving 14&#215;14 pixels for the content.</p>
<p>The icons should preferably be suitable for dark and light backgrounds. This might be hard to achieve, though, so it is suitable to use ligh background icons, since this is the Plone default.</p>
<h3>Actions</h3>
<ul>
<li>Search</li>
<li>Smaller font</li>
<li>Larger font</li>
<li>Print</li>
<li>Send to (email)</li>
<li>Contact</li>
<li>Sitemap</li>
<li>Member icon</li>
<li>Settings</li>
<li>Log out</li>
<li>Login</li>
<li>RSS feed</li>
</ul>
<h3>Language flags</h3>
<p>Plone default flags can be used</p>
<ul>
<li>Finnish</li>
<li>English</li>
<li>Swedish</li>
<li>etc.</li>
</ul>
<h3>Content icons</h3>
<p>These reflect different Plone content types</p>
<ul>
<li>Page</li>
<li>Folder</li>
<li>News</li>
<li>Event</li>
<li>Collection</li>
<li>File</li>
</ul>
<h3>Link icons</h3>
<p>Plone uses Javascript to apply special icons for external links</p>
<ul>
<li>HTTP link (globe)</li>
<li>HTTPS link (lock)</li>
<li>mailto link (letter)</li>
</ul>
<h3>Favorite icon</h3>
<ul>
<li>The site bookmark icon, the one seen in the address bar, uses normal favicon.ico practices</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.mfabrik.com/2008/09/12/designing-a-high-usability-plone-theme/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

