Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
アプリが国際化する時
Search
punchdrunker
September 15, 2017
Technology
590
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
63
DnD in Compose
punchdrunker
0
340
what's new in Material Design で気になったトピック
punchdrunker
1
650
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
AI-DLCって実際どう? 〜聞きたいこと全部聞いてみる〜
news_it_enj
0
190
PdMをやめて、 "プロダクトビルダー"という 働き方に変えました / PdM to Product Builder
shikichee
2
660
When Does a Local Qwen Start to Break
morshoto
0
150
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
480
Self Healing Rollouts: Automating Production Fixes with Agentic AI
kdubois
0
140
はじめてのDatabricks:技術者向けワークショップ / beginner-workshop
databricksjapan
PRO
0
130
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
77k
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
2
590
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
1
320
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
140
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
240
Backstageでつくるセルフサービスな社内開発基盤
kikunosuke75
1
220
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Making the Leap to Tech Lead
cromwellryan
135
10k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Prompt Engineering for Job Search
mfonobong
0
430
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
4
550
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
ラッコキーワード サービス紹介資料
rakko
1
4.7M
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
390
Documentation Writing (for coders)
carmenintech
77
5.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
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