Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
アプリが国際化する時
Search
punchdrunker
September 15, 2017
Technology
600
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
アプリが国際化する時
punchdrunker
September 15, 2017
More Decks by punchdrunker
See All by punchdrunker
Kotlin2.0以降の新機能
punchdrunker
0
65
DnD in Compose
punchdrunker
0
350
what's new in Material Design で気になったトピック
punchdrunker
1
660
7カ国語に対応したサービスでの翻訳管理システムの改善事例
punchdrunker
1
1.7k
Java Bytecode Vertical Tasting
punchdrunker
2
1.6k
getting started with dark theme
punchdrunker
2
1.1k
Practical Activity Transition in Android
punchdrunker
0
1.3k
今時のProgress indicator / Replacing ProgressDialog with ProgressBar
punchdrunker
0
750
レビュー評価4.7の秘密 / The Secret To A Better Reputation
punchdrunker
2
2.1k
Other Decks in Technology
See All in Technology
Genieを崇めよ
kameitomohiro
0
170
SREへの勘違いに気づいた後の話
tomodakengo
0
150
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
30
19k
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
2
20k
現場で役立つ技術負債の効果的な返済方法
masuda220
PRO
11
5.1k
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
640
LLMに渡さなかった仕事
nanaism
0
1.4k
Claude in Chrome 入門 / Introduction to Claude in Chrome
cielo1985
0
890
2026_devsumi_ozono.pdf
o3
3
580
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
11
6.2k
Claude Codeを「使うほど育つ」AI秘書にするノウハウ
minorun365
PRO
33
31k
絵ではじめるKubernetesセキュリティ
aoi1
4
700
Featured
See All Featured
WCS-LA-2024
lcolladotor
0
830
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
280
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
540
Leo the Paperboy
mayatellez
10
2.3k
Un-Boring Meetings
codingconduct
0
420
Producing Creativity
orderedlist
PRO
348
41k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
1k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Designing for Timeless Needs
cassininazir
1
480
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
820
Transcript
ΞϓϦ͕ࠃࡍԽ͢Δ࣌ by punchdrunker shibuya.apk#18
punchdrunker ࣣඌ و࢙ Web੍࡞ձࣾۈΛܦͯ2011ϛΫγΟೖࣾɻ 2011 - 2016 : SNS mixiͷΞϓϦ։ൃɺϚωδϝϯτ
2016 - ݱࡏ : ՈΞϧόϜ ΈͯͶͷ։ൃશൠ (iOS / Android / Rails)
INDEX 1. ΈͯͶʹ͍ͭͯ 2. ΧϧνϟϥΠζ 3. ଟݴޠԽ 4. ҬԽ 5.
ͦͷଞ 0 ͓͢͠Δ͜ͱ
ABOUT 1 ΈͯͶʹ͍ͭͯ
ABOUT 1 ΈͯͶʹ͍ͭͯ
ABOUT 1 ΈͯͶʹ͍ͭͯ ੈքதͷՈͷ“͜͜ΖͷΠϯϑϥ”Λͭ͘Δ ࢠҭͯΛͬͱָ͘͠͠ɺݽಠͳࢠҭͯΛͳ͘͢ ͦͷࢠͷਓੜΛ·Δ͝ͱͤΔՈΞϧόϜΛ
ABOUT 2015αʔϏε։࢝ 180ສϢʔβʔ ૯Ξοϓϩʔυຕ ԯສຕ ύύɺϚϚ͕͍ͨ͘ͳΔΑ͏ͳ ελΠϦογϡ͞ & ͍͡͡ɺ͋Ͱ ͑Δ؆୯͞
Google Play StoreͷϢʔβʔධՁ ˑ4.672 ධՁ૯19,310 1 ΈͯͶʹ͍ͭͯ
ABOUT ΈͯͶϑΥτϒοΫ 2016αʔϏε։࢝ ݄ؒ30,000Λൢച ϫϯίΠϯͰങ͑ΔΧδϡΞϧ͞ ͍͠ύύɾϚϚʹ͚ͨࣗಈ࡞͕ಛ 1 ΈͯͶʹ͍ͭͯ
ABOUT ࠃࡍԽ 20177݄ΑΓӳޠදࣔʹରԠ ϑΥτϒοΫͷւ֎ൃૹࠓޙରԠ༧ఆ 1 ΈͯͶʹ͍ͭͯ
CULTURIZATION 2 จԽͷҧ͍
CULTURIZATION 2 จԽͷҧ͍ ಉੑࠗ
CULTURIZATION 2 จԽͷҧ͍ ΞϓϦͷ໊લ ΞϝϦΧਓɺmitene͕ಡΊͳ͍ൃੜ ථձٞΛܦͯɺ໊લΛܾΊΔͷʹ2िؒ͘Βֻ͍ ͔ͬͨɻ ϚΠςΟʔϯ ϊΡ Ποπϛɾςɾω
Ξʔϋʔ
MULTILINGUALIZATION 3 ଟݴޠԽ
ӳ2ϲࠃޠ ຊޠҎ֎ӳޠѻ͍ɻ ॳظϦϦʔεͰͷϩέʔϧ͔Βࣗಈผ͍ͯ͠ ͕ͨɺϢʔβʔ͔ΒͷཁͰઃఆՄೳʹ͢ΔରԠΛ ϦϦʔεɻ ӳޠ͕ͩɺΞϓϦຊޠͰ͍͍ͨਓ͕Ұ ఆ͍Δɻ MULTILINGUALIZATION 3 ଟݴޠԽ
ෳܗ Androidඪ४ͰPluralରԠ͕؆୯ // plurals.xml <plurals name=“photo_count"> <item quantity=“one”>%1$d photo</item> <item
quantity=“other”>%1$d photos</item> </plurals> // usage getResources() .getQuantityString(R.plurals.photo, quantity, count) // ҙ: quantity͕0ͷ࣌”other”͕ਖ਼͍͠(15ϋϚͬͨ) MULTILINGUALIZATION 3 ଟݴޠԽ
ෳܗ Xcodeඪ४ͰPluralରԠ͍ͯ͠Δ͕ɺdictionaryͳͷͰμϧ͍ // Localizable.stringsdict <dict> <key>number_of_days</key> <dict> <key>NSStringLocalizedFormatKey</key> <string>%#@value@</string> <key>value</key>
<dict> <key>NSStringFormatSpecTypeKey</key> // ܕ <string>NSStringPluralRuleType</string> <key>NSStringFormatValueTypeKey</key> <string>d</string> <key>one</key> // ୯ <string>%d day remaining</string> <key>other</key> // ෳ <string>%d days remaining</string> </dict> </dict> </dict> MULTILINGUALIZATION 3 ଟݴޠԽ
ෳܗ AndroidͬΆ͍ఆٛͰ͑ΔΑ͏ʹͪΐͬͱ࣮ͨ͠ // Localizable.strings “photo.one”="%d photo”; “photo.other”="%d photos"; // usage
func pluralString(key: String, quantity: Int) -> String { let suffix: String if quantity == 1 { suffix = ".one" } else { suffix = ".other" } return NSLocalizedString(key + suffix, comment: "") } // ࣮ࡍʹࣗલͷFormatter͕͋ΔͷͰɺ // ͍ͦͭʹ͢จࣈྻͱͯ͠ར༻ pluralString(key: “photo”, quantity: quantity) MULTILINGUALIZATION 3 ଟݴޠԽ
ςετ RobolectricͷΞϊςʔγϣϯͰϦιʔεͷछྨΛࢦఆͰ͖Δͷ Ͱɺจࣈྻͷςετָͩͬͨ @Test @Config(qualifiers = “en-port”) // ӳޠ&ॎը໘ public
void testFormatter() { …. assertEquals(“Newborn”, formatter.getAge(context, 0)) } ͋͘·ͰϦιʔεͷम০ࢠΛݻఆ͢ΔͨΊͷͰɺLocaleͷ͕ ϞοΫ͞ΕΔΘ͚Ͱͳ͍ɻ LocaleΛऔಘ͢ΔΑ͏ͳॲཧͷ߹ผ్mock͢Δඞཁ͕͋ Δɻ MULTILINGUALIZATION 3 ଟݴޠԽ
LOCALIZATION 4 ҬԽ
LOCALIZATION 4 ҬԽ ωοτϫʔΫڥͷҧ͍ τϨϯυϥΠϯͰൺֱ͢ΔͱɺΞοϓϩʔυ͕࣌ؒඵͷͰɺ ຊʙ.#ɺถࠃʙ.#લޙ
LOCALIZATION 4 ҬԽ ಈըߘ طଘͷߏ౦ژϦʔδϣϯͷΈͩͬͨͷͰɺւ֎ͷϦʔδϣ ϯʹόέοτΛ࡞ɻ ߘ࣌ʹͲͷόέοτ͕͍͔ۙΛAPIʹฉ͍͔ͯΒɺΞο ϓϩʔυ͢ΔΑ͏ʹͨ͠ɻ ߘޙΤϯίʔυॲཧΛߦ͍ɺΫϩεϦʔδϣϯ ϨϓϦ
έʔγϣϯͰ౦ژʹ͢ɻ ࣌transfer accelerationΛΒͣʹ࣮ͨ͠ͷͰɺ࠷ॳ ͔ΒAWSͷਓʹܰ͘૬ஊ͓͚ͯ͠Α͔ͬͨɻ
LOCALIZATION 4 ҬԽ ͓Βͤ௨ ϢʔβʔͷߦಈىҼͷͷϦΞϧλΠϜͷ··ɻ ͓Βͤܥͷ࣌ؒΛௐ͢Δҝʹ௨Λ༧͢ΔΑ͏ʹ͠ ͨɻ ʮn݄ͷϑΥτϒοΫ͕Ͱ͖·ͨ͠ʯͷΑ͏ͳ௨ϐʔΫ λΠϜͷ࣌ؒલʹૹΓ͍ͨɻ ϦϦʔεલͰmigration࣌ͷσʔλΛϛε͓ͬͯΒ͕ͤ
ۭදࣔʹͳΔͱ͜Ζͩͬͨɻ
MISC 5 ͦͷଞ
ετΞͷݴޠ MISC 5 ͦͷଞ App StoreGoogle Playɺӳޠ൛ͷϦϦʔεΛҰऴ͑ ͔ͯΒͰͳ͍ͱɺprimary language(σϑΥϧτݴޠ)Λઃఆ Ͱ͖ͳ͔ͬͨɻ
ϝδϟʔΞοϓσʔτ࣌ʹσϑΥϧτӳޠͰύʔϯοΈͨ ͍ͳ͜ͱΛΓ͔ͨͬͨΒɺखલͷόʔδϣϯͰӳޠͷܝࡌ ใΛೖΕͯϦϦʔε͓ͯ͘͠ඞཁ͕͋Δɻ
THANK YOU!
ຊͷϏʔϧ
KIRIN HEARTLAND ϐϧεφʔελΠϧ ΨϒΨϒҿΊΔ 1
SANKTGALLEN PINEAPPLE ALE ϑϧʔπϏʔϧ εΠεΠҿΊΔ 2
BREWDOG ELVIS JUICE ΄΅άϨʔϓϑϧʔπδϡʔε ΰΫΰΫҿΊΔ 3
YOHHO BREWING YONA YONA ALE ΞϝϦΧϯ ϖʔϧΤʔϧ ίϯϏχͰങ͑Δ ఆ൪ΤʔϧϏʔϧ 4
SHIGA KOGEN BEER IPA ΠϯσΟΞϯϖʔϧΤʔϧ ຊΛද͢ΔIPA 5
SHIGA KOGEN BEER PORTER ϩϒετϙʔλʔ ࠇϏʔϧ͕ۤखͳਓʹҿΜͰΒ ͍͍ͨ 6