44
LEVELING UP YOUR MULTILINGUAL WORDPRESS SITE JANNE ALA-ÄIJÄLÄ WORDCAMP FINLAND 15.4.2016

Leveling Up Your Multilingual WordPress site

Embed Size (px)

Citation preview

Page 1: Leveling Up Your Multilingual WordPress site

LEVELING UP YOURMULTILINGUALWORDPRESS SITE

JANNE ALA-ÄIJÄLÄ WORDCAMP FINLAND 15.4.2016

Page 2: Leveling Up Your Multilingual WordPress site

MY PERSONAL LEVEL 1:

POLYLANG

Page 3: Leveling Up Your Multilingual WordPress site

• SMOOTH ADMIN WORKFLOW

• ADVANCED MULTILINGUAL THEME

• WORKING WITH NON-LATIN ALPHABET

Page 4: Leveling Up Your Multilingual WordPress site

TRANSLATIONP O L I S H T H E

WORKFLOW

Page 5: Leveling Up Your Multilingual WordPress site

TO COPY ORCONTENT DILEMMA:

NOT TO COPY

https://github.com/aucor/polylang-copy-content

Page 6: Leveling Up Your Multilingual WordPress site

HOW TO CHANGESHOW YOUR USERS

ADMIN LANGUAGE

Page 7: Leveling Up Your Multilingual WordPress site

A V O I DUSER EDITABLEWIDGETSAS LONG AS POSSIBLE

Page 8: Leveling Up Your Multilingual WordPress site

THEMEMULTILINGUAL

Page 9: Leveling Up Your Multilingual WordPress site

 💩 if ( $current_language == 'fi' ) { print 'Moi!'; } elseif ( $current_language == 'sv' ) { print 'Hej!'; } else { print 'Hello!'; }

Page 10: Leveling Up Your Multilingual WordPress site

THE USUAL WAY_e( 'Hello!' , 'my-text-domain' );

Page 11: Leveling Up Your Multilingual WordPress site

ARE AWFUL!.PO/.MO -FILES

Page 12: Leveling Up Your Multilingual WordPress site

THE PLUGIN WAYpll_e( 'Hello!' );

Page 13: Leveling Up Your Multilingual WordPress site

THE PLUGIN WAY

Page 14: Leveling Up Your Multilingual WordPress site

USE FALLBACKS

if ( ! function_exists( 'pll__' ) ) { function pll__( $string ) { return __( $string , 'my-theme-textdomain' ); }

}

Page 15: Leveling Up Your Multilingual WordPress site

FROM PAGE GENERATION TIMESHAVING MANY % OFF

* Actual results may vary and terms do apply

*

Page 16: Leveling Up Your Multilingual WordPress site

0

22,5

45

67,5

90

front page post-new.php

default install: 0 plugins theme: twentysixteen

en fi

0

100

200

300

400

front page post-new.php

15 popular plugins theme: twentysixteen

+42%

+72%

+74%

+59%

msms

Page 17: Leveling Up Your Multilingual WordPress site

NOT EVEN A SLOTH IS AS SLOW ASLOAD_TEXTDOMAIN

Page 18: Leveling Up Your Multilingual WordPress site

WHAT IF?

0

22,5

45

67,5

90

front page post-new.php

en fi

0

100

200

300

400

front page post-new.php

+42%

+72%

+74%

+59%

+12%

+30%

+6%

+42%

fi, cached

ms ms

Page 19: Leveling Up Your Multilingual WordPress site

WE CAN!

NOTE: YOU NEED AN OBJECT CACHE LIKE REDIS, MEMCACHED OR APCU

wordpress.org/plugins/wp-performance-pack/

OR ONLY THE CACHEABLE MO LOADING:github.com/aucor/dynamic-mo-loader

Page 20: Leveling Up Your Multilingual WordPress site

CHOOSING THE BESTLANGUAGE SELECTOR

Page 21: Leveling Up Your Multilingual WordPress site

"#$%&'()

Page 22: Leveling Up Your Multilingual WordPress site

FI / SV / EN

LANGUAGE CODES

ET / RU / EL / TR / ZH / JA / HI / AR

Page 23: Leveling Up Your Multilingual WordPress site

suomeksi på Svenska In EnglishFULL LANGUAGE NAMES == 😍

Page 24: Leveling Up Your Multilingual WordPress site

SUPER ULTIMATE+

Page 25: Leveling Up Your Multilingual WordPress site

WORKING WITHNON-LATIN ALPHABET

Page 26: Leveling Up Your Multilingual WordPress site

GLOBAL SHARES OF ALPHABETS & SCRIPTS

Source: http://www.worldstandards.eu/other/alphabets/

Other 14 %

Cyrillic 4 %

Arabic 14 %

Devanagari 14 % Chinese

18 %

Latin 36 %

Page 27: Leveling Up Your Multilingual WordPress site

WEBFONTSFOR NON-LATIN CHARACTERS

Page 28: Leveling Up Your Multilingual WordPress site

90%OF DESIGNERS

HAVEN’T CONSIDERED

*

* Number completely made up in my mind

Page 29: Leveling Up Your Multilingual WordPress site

font-family: "MyFancyFontWithLimitedLanguageSupport", cursive;

CASCADING FONT-STACKS

Page 30: Leveling Up Your Multilingual WordPress site

Typographically aethstetic headlineSTRÖMSÖ:

Tässä otsikossa on ääkkösiäREALITY:

CASCADING FONT-STACKS

Page 31: Leveling Up Your Multilingual WordPress site

天⽓气weather

CASCADING FONT-STACKS

font-family: "MyFancySerif", serif;

天⽓气weather

font-family: serif;

Page 32: Leveling Up Your Multilingual WordPress site

CHARACTER SUBSET

Typekit

INCLUDE CORRECT

Google Fonts

Page 33: Leveling Up Your Multilingual WordPress site

NOTO SANSgoogle.com/get/noto/

google.com/fonts/earlyaccessGOOGLE WEBFONTS EARLY ACCESS

EASY SOLUTIONS:

Page 34: Leveling Up Your Multilingual WordPress site

TRANSLITERATIONGetting rid of unwanted characters

Page 35: Leveling Up Your Multilingual WordPress site

TRANSLITERATION: WORDPRESS DEFAULT

/tässä-osoitteessa-on-myös-å/

/tassa-osoitteessa-on-myos-a/

Page 36: Leveling Up Your Multilingual WordPress site

TRANSLITERATION: WORDPRESS DEFAULT

/芬兰全国⽓气象预报/

/芬兰全国⽓气象预报/

Page 37: Leveling Up Your Multilingual WordPress site

TRANSLITERATION PLUGINSCYRILLIC: CYR TO LAT ENHANCED

wordpress.org/plugins/cyr3lat/

CHINESE: SO PINYIN SLUGSwordpress.org/plugins/so-pinyin-slugs/

ARABIC: ARABIC TO LATwordpress.org/plugins/arabic-to-lat/

wordpress.org/plugins/tags/transliteration

Page 38: Leveling Up Your Multilingual WordPress site

RTLtfel-ot-thgir

Page 39: Leveling Up Your Multilingual WordPress site

CHANGE THE DIRECTION

<html dir="rtl">

Page 40: Leveling Up Your Multilingual WordPress site

RIGHT SHOULD BE LEFTLEFT SHOULD BE RIGHT

Page 41: Leveling Up Your Multilingual WordPress site

ASSETS FOR RTL

if ( is_rtl() ) { wp_enqueue_style( 'style-rtl', get_stylesheet_directory_uri() . '/css/style-rtl.css' ); wp_enqueue_script( 'script-rtl', get_stylesheet_directory_uri() . '/js/script-rtl.js' ); }

rtl.css

Page 42: Leveling Up Your Multilingual WordPress site

THINGS TO BE MIRRORED• floats • asymmetric margins • asymmetric paddings • list styles • directional JS

Page 43: Leveling Up Your Multilingual WordPress site

THINGS TO BE MIRRORED

EXCEPTION: FLEXBOX

1 2 3

123

DIR=”LTR”:

DIR=”RTL”:

.container { display: flex; }

Page 44: Leveling Up Your Multilingual WordPress site

JANNE ALA-ÄIJÄLÄ[email protected] @j_underdude