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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
62
DnD in Compose
punchdrunker
0
340
what's new in Material Design で気になったトピック
punchdrunker
1
650
7カ国語に対応したサービスでの翻訳管理システムの改善事例
punchdrunker
1
1.6k
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
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
240
Android skills に学ぶ
kokiko
0
150
AI時代に、人は何を、どう学ぶのか #pbl_pub / What and How Do We Learn in the AI Era?
takaking22
1
240
関東Kaggler会発表資料
takoi
1
280
【Aiming】共通基盤なのに「共通化しない」課金・認証基盤「LINK」が選び取ったシングルテナント戦略と運用の秘訣
saikeda
0
150
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
300
RelayerというPHPのフレームワークを作った
polidog
PRO
0
120
案件に一番詳しいAIを Amazon Bedrock AgentCore で作る ― 知見が知見を生むチームへ / Compounding Knowledge with AgentCore
yusukeshimizu
1
170
Sets in Go
ramalho
1
1.2k
도구에서 동료까지: 10년차 AI 스타트업의 AI 적응기
inureyes
PRO
1
330
作って理解するCoding Agent 〜フレームワークに頼らないピュア Python での実装〜
takapy
3
1.1k
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
130
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
630
Balancing Empowerment & Direction
lara
6
1.2k
Code Reviewing Like a Champion
maltzj
528
40k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Agile that works and the tools we love
rasmusluckow
331
22k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
180
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