Pro Yearly is on sale from $80 to $50! »

CSS & i18n—dos and don’ts when styling multilingual websites

051dbe29a972707cde167602b38c9778?s=47 Gunnar Bittersmann
September 21, 2011

CSS & i18n—dos and don’ts when styling multilingual websites

The talk covers best practices and pitfalls when dealing with languages that create large compound words (like German), languages with special capitalization rules (again, like German), or languages written in right-to-left scripts. This includes things like box sizes, box shadows and corners, image replacement etc. It also covers benefits that new CSS 3 properties and values offer in terms of internationalization, a discussion wheather the :lang pseudo-class selector meets all needs or if there's more to wish for, and how to implement style sheets for various languages and scripts (all rules in a single file or spread over multiple files?). The talk will be of rather practical than theoretical nature.

Video: http://videolectures.net/w3cworkshop2011_bittersman_css/

051dbe29a972707cde167602b38c9778?s=128

Gunnar Bittersmann

September 21, 2011
Tweet

Transcript

  1. CSS & i18n dos and don’ts when styling multilingual websites

    Gunnar Bittersmann brands4friends
  2. Road ahead 1. pitfalls when styling multilingual websites 2. what’s

    new in CSS 3 3. what’s not in CSS (yet?)
  3. Problem: word length Einige Sprachen, wie z.B. Deutsch, Finnisch und

    Niederländisch, verwenden einzelne lange Wörter dafür, was mehrere kürzere Wörter in anderen Sprachen sind. Aus „Input processing features“ im Englischen wird im Deutschen. Der englische Text kann einfach auf zwei Zeilen verteilt werden, wenn „Eingabeverarbeitungsfunktionen“ nur eine geringe Breite zur Verfügung steht, bspw. neben einem Formulareingabefeld, in einer Reihe von Tabs oder Buttons, in schmalen Spalten. Der deutsche Text hingegen wird nicht automatisch umbrochen, was eine Herausforderung für das Layout darstellen kann.
  4. Solution: soft hyphens Einige Sprachen, wie z.B. Deutsch, Finnisch und

    Nieder-ländisch, verwenden einzelne lange Wörter dafür, was mehrere kürzere Wörter in anderen Sprachen sind. Aus „Input processing features“ im Englischen wird „Eingabe-verarbeitungs- funktionen“ im Deutschen. Der englische Text kann einfach auf zwei Zeilen verteilt werden, wenn nur eine geringe Breite zur Verfügung steht, bspw. neben einem Formular- eingabe-feld, in einer Reihe von Tabs oder Buttons, in schmalen Spalten. Der deutsche Text hingegen wird nicht automatisch umbrochen, was eine Heraus-forderung für das Layout darstellen kann. Setting break points is only feasible for own content, but often content is provided by other departments of the company (CMS) or is user-generated content .
  5. Solution: hyphenation Einige Sprachen, wie z.B. Deutsch, Finnisch und Nie-

    derländisch, verwenden ein- zelne lange Wörter dafür, was mehrere kürzere Wörter in anderen Sprachen sind. Aus „Input processing fea- tures“ im Englischen wird „Eingabeverarbeitungsfunk- tionen“ im Deutschen. Der englische Text kann einfach auf zwei Zeilen verteilt wer- den, wenn nur eine geringe Breite zur Verfügung steht, bspw. neben einem Formu- lareingabefeld, in einer Reihe von Tabs oder Buttons, in schmalen Spalten. Der deut- sche Text hingegen wird nicht automatisch umbro- chen, was eine Herausforde- rung für das Layout darstel- len kann. Text language must be labeled correctly, also of text fragments in different languages
  6. German version Nouns are spelled with a capital letter in

    German language; transformation to lowercase should not be applied to German text.
  7. Corrected German version Additional German language-specific rule overwrites transformation.

  8. German version Long words may cause short lines or large

    spaces. Note that there’s enough space between the menu and the sidenote on the right…
  9. Ukrainian version …as the menu needs more height the space

    between the menu and the sidenote shrinks…
  10. Russian version …as the menu needs even more height the

    contents overlap.
  11. Arabic version A horizontal scrollbar appears because of content for

    screenreaders that should be moved to the right out of the viewport on RTL pages.
  12. Arabic version border-bottom-right-radius should be resetted on RTL pages, box-shadow

    should be a mirrored version of that on LTR pages.
  13. Corrected Arabic version No horizontal scrollbar, border-radius and box-shadow properly

    set.
  14. rtl.css: #wai-start { left: auto; right: -999px; } Separate stylesheets?

    default.css: #wai-start { position: absolute; left: -999px; width: 990px; display: block; } Don’t rely on the order of stylesheets being included in HTML files; use more specific selectors
  15. rtl.css: [dir="rtl"] #wai-start { left: auto; right: -999px; } Separate

    stylesheets? default.css: #wai-start { position: absolute; left: -999px; width: 990px; display: block; } [dir="rtl"] #wai-start { left: auto; right: -999px; } Having all rules in one stylesheet allows to overview corresponding rules at one sight and makes it less likely to forget something on later changes.
  16. Dos and don’ts • Do not assume text to fit

    into a box, neither of certain width nor of certain height • Set soft hyphens in long compound words or use hyphenation • Use text effects that are appropriate for given language • Make sure you flip everything needed for websites in RTL scripts • Do not use multiple stylesheets for different languages/scripts/text directions, use one stylesheet (easier to maintain)
  17. New in CSS 3 text module • hyphens: auto •

    text-emphasis-style: sesame • text-justify: inter-ideograph || kashida • text-align: end might replace: #foo { text-align: right } [dir="rtl"] #foo { text-align: left }
  18. :lang(bal), :lang(bqi), :lang(cja), :lang(glk), :lang(ug) Styling by language body {

    font-family: Palatino, serif; } { font-family: "Traditional Arabic", serif; } :lang(ar) , :lang(fa) , :lang(ps) , :lang(ur) , :lang(az-Arab) , :lang(uz-Arab) , :script(Arab) When content in another language written in Arabic script would later be added to a multilingual website, the stylesheet also needs to be changed. That’s not desired, hence it would be useful if there was a :script pseudoclass.
  19. Styling by script Type: language Subtag: ar Description: Arabic Added:

    2005-10-16 Suppress-Script: Arab Scope: macrolanguage <html lang="ar" script="Arab" dir="rtl"> <html lang="az-Arab" script="Arab " dir="rtl "> The information about the script is already in the language tag: either in the script subtag or in the language subtag.
  20. Implementation get language tag is undefined? has script subtag? look

    up script for language subtag found? use this value use default (Latn) y y y n n n 
  21. Go raibh maith agat gunnar@bittersmann.de http://bittersmann.de