SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Droidcon Croatia
Danny Preussler
GROUPON
@PreusslerBerlin
All around the World
i18n and l10n in android
http://gizmodo.com/5397215/giz-explains-android-and-how-it-will-take-over-the-world
45 17Millions
downloads
Millions
active users
+
#droidconzg #PreusslerBerlin
Definitions
Page 3
Internationalization (i18n) is the process of developing products in such a way
that they can be localized for languages and cultures easily.
Localization (l10n), is the process of adapting applications and text to enable
their usability in a particular cultural or linguistic market.
(docs.angularjs.org)
The better internationalized an application is, the easier it is to localize it for
a particular language and character encoding scheme.
(docs.oracle.com)
The main concern (i18n) is that application can be adapted to various
languages and regions without engineering changes.
(Apple Guidelines)
#droidconzg #PreusslerBerlin
Try not to kill your user...
Page 4
„A Cellphone's Missing Dot Kills Two People, Puts Three More in Jail“
http://gizmodo.com/382026/a-cellphones-missing-dot-kills-two-people-puts-
three-more-in-jail
#droidconzg #PreusslerBerlin
Locales
Page 5
• Never hardcode text in code or layouts!
(android studio even helps extracting to strings.xml)
• If needed for layouts use the tools namespace
also good for testing long texts:
• Never hardcode text in images
<TextView
android:id="@+id/deal“
android:text="@string/deal_title“
tools:text="deal of killing 2 zombie for one“/>
#droidconzg #PreusslerBerlin
Locales
Page 6
• How Locale’s work:
#droidconzg #PreusslerBerlin
Locales
Page 7
• How Locale’s work with Android N:
#droidconzg #PreusslerBerlin
Locales
Page 8
• How Locale’s work with Android N:
#droidconzg #PreusslerBerlin
Strings
Page 9
Don’t concatenate strings!
• Order might change in other language for grammar
• Dangerous in Right-to-Left
TextView textView = ...
textView.setText(" ‫לחץ‬‫כאן‬ " + ">");
a) ‫לחץ‬‫כאן‬ >
b) > ‫לחץ‬‫כאן‬
c) < ‫לחץ‬‫כאן‬
#droidconzg #PreusslerBerlin
Strings
Page 10
Don’t concatenate strings!
• Order might change in other language for grammar
• Dangerous in Right-to-Left
TextView textView = ...
textView.setText(" ‫לחץ‬‫כאן‬ " + ">");
a) ‫לחץ‬‫כאן‬ >
b) > ‫לחץ‬‫כאן‬
c) < ‫לחץ‬‫כאן‬
#droidconzg #PreusslerBerlin
Strings
Page 11
Don’t concatenate strings!
• Use Formatter.format
• Yes even for numbers!
• Or better: Use Phrase from Square
Phrase.from(
"Hi {first_name}, you are {age} years old.")
.put("first_name", firstName)
.put("age", age)
.format();
format(locale, "Choose a %d-digit PIN", 4)
#droidconzg #PreusslerBerlin
Strings
Page 12
• Plurals
<?xml version="1.0" encoding="utf-8"?>
<resources>
<plurals
name="tutorials">
<item quantity="zero">no Tutorial </item>
<item quantity="one">one Tutorial </item>
<item quantity="other">%d Tutorials</item>
</plurals>
</resources>
getResources().getQuantityString(
R.plurals.tutorials, number);
#droidconzg #PreusslerBerlin
Locales
Page 13
• Don’t reuse your strings too often.
Same names for different things might be different names on other
languages
• Provide context to translator
• Be aware: texts have different length in different languages,
English tends to be short, Finnish or German tend to be very long
• Different line-heights, careful with custom fonts or cropping views in height
#droidconzg #PreusslerBerlin
Locales
Page 14
• Test with Pseudo Localization
buildTypes {
debug {
pseudoLocalesEnabled true
}
}
#droidconzg #PreusslerBerlin
Locales
Page 15
• Careful with default locales:
assertEquals(
“billy”, “BILLY”.toLowerCase());
assertEquals(
“bılly”,
“BILLY”.toLowerCase(
new Locale(“tr”,“TR”)));
-> FALSE for turkish!!!
#droidconzg #PreusslerBerlin
Numbers
Page 16
https://en.wikipedia.org/wiki/File:Clock-in-cairo-with-eastern-arabic-numerals.jpg
#droidconzg #PreusslerBerlin
Numbers
Page 17
The decimal mark: Dot vs. Comma
1.00$
vs
1,00€
With delimiters:
4,294,967,295.00
vs
4 294 967.295,000
In 1958, disputes between European and American delegates over the correct
representation of the decimal mark nearly stalled the development of the ALGOL
computer programming language. (wikipedia)
#droidconzg #PreusslerBerlin
Numbers
Page 18
The decimal mark: Dot vs. Comma
https://en.wikipedia.org/wiki/Decimal_mark
#droidconzg #PreusslerBerlin
Numbers
Page 19
NumberFormat.getNumberInstance(Locale)
NumberFormat.getIntegerInstance(Locale)
Same for Percentages, don’t just concatenate!
Example: Turkey has sign before the number!
NumberFormat.getPercentInstance(Locale)
#droidconzg #PreusslerBerlin
Currencies
Page 20
#droidconzg #PreusslerBerlin
Currencies
Page 21
• WHICH symbols, if ANY
• WHERE to put the symbol (front or back)?
• How many digits after comma/dot?
0-3 are common
• Represent currencies in the Currency class ;-)
NumberFormat.getCurrencyInstance(Locale);
#droidconzg #PreusslerBerlin
Currencies
Page 22
• Never ever use floating point numbers (float or double)
for Money!
Floats are broken by design (for representing money)
IEEE 754:
it is impossible to represent 0.1 (or any other negative
power of ten)
System.out.println(1.03 - .42);
>>> 0.6100000000000001
(Bloch, J., Effective Java, 2nd ed)
• Use BigDecimal and the String(!) constructor
• Check Martin Fowlers Money pattern class
#droidconzg #PreusslerBerlin
Dates
Page 23
#droidconzg #PreusslerBerlin
Dates
Page 24
• 12 hours vs 24 hours
• Timezones
• Daylight Time DST
#droidconzg #PreusslerBerlin
Dates
Page 25
• Careful with calculations and comparison (be aware of DST jumps)
public static Date getYesterday(Date from) {
Calendar c = getCalendarFor(from);
c.add(Calendar.DAY_OF_THE_MONTH, -1);
return c.getTime();
}
public static Date getYesterday(Date from) {
return new Date(from.getTime() - (24*60*60*1000));
}
#droidconzg #PreusslerBerlin
Dates
Page 26
DateFormat
Careful with custom formats, try to use the standard java one else “pm” might
show up to “nachmittag”
DateFormat.getDateInstance(DateFormat.LONG)
DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT);
#droidconzg #PreusslerBerlin
Dates
Page 27
android.text.format.DateUtils
• Has nice methods like:
isToday()
formatDateRange()
getRelativeTimeSpanString() “5 minutes ago”
• Check out joda-time-android
https://github.com/dlew/joda-time-android
(don’t use normal Java joda-time!
because of GetResourceAsStream performance issue on Android)
#droidconzg #PreusslerBerlin
Units
Page 28
#droidconzg #PreusslerBerlin
Units
Page 29
• Km vs miles
• Celcius vs Fahrenheit
• Liters vs Galons
#droidconzg #PreusslerBerlin
Units
Page 30
Regional differences:
• Structure and Length of telephone numbers
• Elements of Address informations
• ZIP code validation
#droidconzg #PreusslerBerlin
Dubai Airport #1 by emi emi, CC by 2.0; flickr.com/photos/emi_b/4793218993Right-to-Left
#droidconzg #PreusslerBerlin
The signs are in greek by Karl Baron,
flickr.com/photos/kalleboo/6624480775
Dubai Airport #1 by emi emi, CC by 2.0;
flickr.com/photos/emi_b/4793218993
#droidconzg #PreusslerBerlin
#droidconzg #PreusslerBerlin
Right-to-Left
#droidconzg #PreusslerBerlin
Right To Left
• Replace left/right with start/end
• Manifest flag:
android:supportsRtl="true"
• Check your images and correct in xml drawable:
android:autoMirrored=“true/false“
• Set margins to both sides
35
#droidconzg #PreusslerBerlin
Cultural context
Page 36
#droidconzg #PreusslerBerlin
Cultural context
Page 37
• Careful with iconography
©wikipedia
#droidconzg #PreusslerBerlin
Thank you
Happy localizing!

Weitere ähnliche Inhalte

Ähnlich wie All around the world, localization and internationalization on Android (DroidCon Zagreb)

GDG DART Event at Karachi
GDG DART Event at KarachiGDG DART Event at Karachi
GDG DART Event at Karachi
Imam Raza
 

Ähnlich wie All around the world, localization and internationalization on Android (DroidCon Zagreb) (20)

Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
Beyond php it's not (just) about the code
Beyond php   it's not (just) about the codeBeyond php   it's not (just) about the code
Beyond php it's not (just) about the code
 
Clean Code 2
Clean Code 2Clean Code 2
Clean Code 2
 
The goodies of zope, pyramid, and plone (2)
The goodies of zope, pyramid, and plone (2)The goodies of zope, pyramid, and plone (2)
The goodies of zope, pyramid, and plone (2)
 
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...
Kotlin - The Swiss army knife of programming languages - Visma Mobile Meet-up...
 
Appcelerator droidcon15 TLV
Appcelerator droidcon15 TLVAppcelerator droidcon15 TLV
Appcelerator droidcon15 TLV
 
Fast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDBFast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDB
 
Kotlin Coroutines and Android sitting in a tree - 2018 version
Kotlin Coroutines and Android sitting in a tree - 2018 versionKotlin Coroutines and Android sitting in a tree - 2018 version
Kotlin Coroutines and Android sitting in a tree - 2018 version
 
Rails israel 2013
Rails israel 2013Rails israel 2013
Rails israel 2013
 
Xamarin.Android Introduction
Xamarin.Android IntroductionXamarin.Android Introduction
Xamarin.Android Introduction
 
Down With JavaScript!
Down With JavaScript!Down With JavaScript!
Down With JavaScript!
 
The Ring programming language version 1.8 book - Part 7 of 202
The Ring programming language version 1.8 book - Part 7 of 202The Ring programming language version 1.8 book - Part 7 of 202
The Ring programming language version 1.8 book - Part 7 of 202
 
Novidades do c# 7 e 8
Novidades do c# 7 e 8Novidades do c# 7 e 8
Novidades do c# 7 e 8
 
C# 101: Intro to Programming with C#
C# 101: Intro to Programming with C#C# 101: Intro to Programming with C#
C# 101: Intro to Programming with C#
 
FluentMigrator - Dayton .NET - July 2023
FluentMigrator - Dayton .NET - July 2023FluentMigrator - Dayton .NET - July 2023
FluentMigrator - Dayton .NET - July 2023
 
Building complex UI on Android
Building complex UI on AndroidBuilding complex UI on Android
Building complex UI on Android
 
React Native Evening
React Native EveningReact Native Evening
React Native Evening
 
Building autonomous components with OWIN, PSake, NuGet, GitVersion and Swagger
Building autonomous components with OWIN, PSake, NuGet, GitVersion and SwaggerBuilding autonomous components with OWIN, PSake, NuGet, GitVersion and Swagger
Building autonomous components with OWIN, PSake, NuGet, GitVersion and Swagger
 
GDG DART Event at Karachi
GDG DART Event at KarachiGDG DART Event at Karachi
GDG DART Event at Karachi
 
Tips & tricks for sharing C# code on iOS, Android and Windows Phone by Jaime ...
Tips & tricks for sharing C# code on iOS, Android and Windows Phone by Jaime ...Tips & tricks for sharing C# code on iOS, Android and Windows Phone by Jaime ...
Tips & tricks for sharing C# code on iOS, Android and Windows Phone by Jaime ...
 

Mehr von Danny Preussler

Mehr von Danny Preussler (14)

We aint got no time - Droidcon Nairobi
We aint got no time - Droidcon NairobiWe aint got no time - Droidcon Nairobi
We aint got no time - Droidcon Nairobi
 
Test Driven Development on Android (Kotlin Kenya)
Test Driven Development on Android (Kotlin Kenya)Test Driven Development on Android (Kotlin Kenya)
Test Driven Development on Android (Kotlin Kenya)
 
TDD on android. Why and How? (Coding Serbia 2019)
TDD on android. Why and How? (Coding Serbia 2019)TDD on android. Why and How? (Coding Serbia 2019)
TDD on android. Why and How? (Coding Serbia 2019)
 
TDD on Android (Øredev 2018)
TDD on Android (Øredev 2018)TDD on Android (Øredev 2018)
TDD on Android (Øredev 2018)
 
Junit5: the next gen of testing, don't stay behind
Junit5: the next gen of testing, don't stay behindJunit5: the next gen of testing, don't stay behind
Junit5: the next gen of testing, don't stay behind
 
Demystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and ToothpickDemystifying dependency Injection: Dagger and Toothpick
Demystifying dependency Injection: Dagger and Toothpick
 
Unit Testing on Android: why and how? DevFest Romania, Bucharest 2016
Unit Testing on Android: why and how? DevFest Romania, Bucharest 2016Unit Testing on Android: why and how? DevFest Romania, Bucharest 2016
Unit Testing on Android: why and how? DevFest Romania, Bucharest 2016
 
Unit testing without Robolectric, Droidcon Berlin 2016
Unit testing without Robolectric, Droidcon Berlin 2016Unit testing without Robolectric, Droidcon Berlin 2016
Unit testing without Robolectric, Droidcon Berlin 2016
 
15 tips to improve your unit tests (Droidcon Berlin 2016 Barcamp)
15 tips to improve your unit tests (Droidcon Berlin 2016 Barcamp)15 tips to improve your unit tests (Droidcon Berlin 2016 Barcamp)
15 tips to improve your unit tests (Droidcon Berlin 2016 Barcamp)
 
Unit testing on Android (Droidcon Dubai 2015)
Unit testing on Android (Droidcon Dubai 2015)Unit testing on Android (Droidcon Dubai 2015)
Unit testing on Android (Droidcon Dubai 2015)
 
Clean code on Android (Droidcon Dubai 2015)
Clean code on Android (Droidcon Dubai 2015)Clean code on Android (Droidcon Dubai 2015)
Clean code on Android (Droidcon Dubai 2015)
 
Abgeschottete Realität - Testen im Emulator, Mobile Testing Days 2014, Berlin
Abgeschottete Realität - Testen im Emulator, Mobile Testing Days 2014, BerlinAbgeschottete Realität - Testen im Emulator, Mobile Testing Days 2014, Berlin
Abgeschottete Realität - Testen im Emulator, Mobile Testing Days 2014, Berlin
 
Rockstar Android Testing (Mobile TechCon Munich 2014)
Rockstar Android Testing (Mobile TechCon Munich 2014)Rockstar Android Testing (Mobile TechCon Munich 2014)
Rockstar Android Testing (Mobile TechCon Munich 2014)
 
Android Code Puzzles (DroidCon Amsterdam 2012)
Android Code Puzzles (DroidCon Amsterdam 2012)Android Code Puzzles (DroidCon Amsterdam 2012)
Android Code Puzzles (DroidCon Amsterdam 2012)
 

Kürzlich hochgeladen

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Kürzlich hochgeladen (20)

The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 

All around the world, localization and internationalization on Android (DroidCon Zagreb)

Hinweis der Redaktion

  1. shirts
  2. I18n enables l10n I18n: unicode L10n: currencie support I18n: using resource strings L10n: adding multiple string.xml
  3. Used to kill by viZZZual.com, flickr.com/photos/vizzzual-dot-com/2424064848
  4. Eastern Arabic numerals
  5. In 1958, disputes between European and American delegates over the correct representation of the decimal mark nearly stalled the development of the ALGOL computer programming language.[13] ALGOL ended up allowing different decimal marks, but most computer languages and standard data formats (e.g. C, Java, Fortran, Cascading Style Sheets (CSS)) specify a dot.
  6. https://www.flickr.com/photos/oskay/412424747 Windell Oskay tasty money
  7. https://www.flickr.com/photos/savagecats/17397753821/ savagecats Timezone Clock Alexanderplatz
  8. https://www.flickr.com/photos/107442568@N08/13875962594 WonderWhy Australia Time Zones (Summer: DST)
  9. https://www.flickr.com/photos/107442568@N08/13875962594 WonderWhy Australia Time Zones (Summer: DST)
  10. Neil Cummings Standard Measures https://www.flickr.com/photos/chanceprojects/6372676915
  11. Example of alarm clock
  12. Example of alarm clock
  13. checkmark not mirrored
  14. Piggy, dolphin
  15. © wikipedia
  16. http://picsmobi.net/android/logos-android/126257-droid-world.html#.Vws-BxN97_Q