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
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
64
DnD in Compose
punchdrunker
0
350
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
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
300
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
3
2k
Webとヘルスデータ
yukukotani
1
360
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
280
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
4
3.9k
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
2
480
クロスボーダーM&AのValue Upを支えるプロダクト開発。日米チームのハブになったプロダクトエンジニアの実践 / Product Engineering Conference 2026
genda
0
110
omasushiというライブラリを作った
polidog
PRO
0
190
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
1
460
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
230
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
160
生成AIのテナント制御とシャドーMCP対策 | AIを"止めずに"、情報を守る
yukun
0
140
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Claude Code のすすめ
schroneko
67
230k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
KATA
mclloyd
PRO
35
15k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
How to train your dragon (web standard)
notwaldorf
97
6.8k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
240
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