ローカライゼーション・サービス Phrase Strings ことはじめ
by
Masayuki Ataka
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
© Chatwork ϩʔΧϥΠθʔγϣϯɾαʔϏε 1ISBTF4USJOHT͜ͱ͡Ί ݄ɹϞόΠϧΞϓϦέʔγϣϯ։ൃ෦҆ਖ਼೭ $IBUXPSLגࣜձࣾ
Slide 2
Slide 2 text
త 2 ● 1ISBTF4USJOHTͷجຊతͳ͍ํΛ͑Δ ● $IBUXPSLͷ1ISBTF4USJOHTར༻ϊϋΛ͑Δ
Slide 3
Slide 3 text
1ISBTF4USJOHTͱ -PDBMJ[BCMFTUSJOHTϑΝΠϧͷऔಘ ϒϥϯνઓུ 4UPSZCPBSEͷଟݴޠԽ 1 2 3 4 AGENDA ΞδΣϯμ
Slide 4
Slide 4 text
1ISBTF4USJOHTͱ 1
Slide 5
Slide 5 text
1ISBTF4USJOHTͷྺ࢙ 5 ● ݄1ISBTF"QQαʔϏεɾϩʔϯν ● 1ISBTFʹαʔϏε໊มߋ ● ݄.FNTPVSDFࣾʹങऩ ● ݄1ISBTF4USJOHTʹαʔϏε໊มߋ
Slide 6
Slide 6 text
1ISBTF4USJOHTͱ 6 ● Σϒϕʔεͷ༁ཧ αʔϏε ● ༁Ωʔͱจݴͷཧ ● ༁ΤσΟλʔͷఏڙ ● ༁ϑΝΠϧͷΞτϓοτ
Slide 7
Slide 7 text
1IBSFT4USJOHTΛͬͯΈΔαϯϓϧϓϩδΣΫτ 7 ● αϯϓϧϓϩδΣΫτΛ࡞͠·ͨ͠ ● IUUQTHJUIVCDPNBUBLBJ04.FFUVQ ● 4XJGUͷΞϓϦ͕ೖ͍ͬͯ·͢ ● 1ISBTF4USJOHTͷઃఆ αϯϓϧ ͕ೖ͍ͬͯ·͢ ● ֤छεΫϦϓτ͕ೖ͍ͬͯ·͢ ● 1ISBTF4USJOHTϓϩδΣΫτͷΞΫηεݖ͋Γ·ͤΜ🙇
Slide 8
Slide 8 text
Ωʔͷొͱ༁
Slide 9
Slide 9 text
1ISBTF4USJOHTΛͬͯΈΔΩʔͷొ 9 ● ʮ)FMMP 8PSMEʯͷΩʔͱ༁Λొͯ͠ΈΔɻ
Slide 10
Slide 10 text
1ISBTF4USJOHTΛͬͯΈΔΩʔͷొ 10 ● ʮ)FMMP 8PSMEʯͷΩʔͱ༁Λొͯ͠ΈΔɻ
Slide 11
Slide 11 text
● ʮ)FMMP 8PSMEʯͷΩʔͱ༁Λొͯ͠ΈΔɻ 1ISBTF4USJOHTΛͬͯΈΔΩʔͷొ 11
Slide 12
Slide 12 text
● ʮ)FMMP 8PSMEʯͷΩʔͱ༁Λొͯ͠ΈΔɻ 1ISBTF4USJOHTΛͬͯΈΔ༁ͷొ 12
Slide 13
Slide 13 text
● ʮ)FMMP 8PSMEʯͷΩʔͱ༁Λొͯ͠ΈΔɻ 1ISBTF4USJOHTΛͬͯΈΔ༁ͷొ 13
Slide 14
Slide 14 text
● ʮ)FMMP 8PSMEʯͷΩʔͱ༁Λొͯ͠ΈΔɻ 1ISBTF4USJOHTΛͬͯΈΔ༁ͷొ 14
Slide 15
Slide 15 text
● ʮ)FMMP 8PSMEʯͷΩʔͱ༁Λొͯ͠ΈΔɻ 1ISBTF4USJOHTΛͬͯΈΔ༁ͷొ 15
Slide 16
Slide 16 text
● ʮ)FMMP 8PSMEʯͷΩʔͱ༁Λొͯ͠ΈΔɻ 1ISBTF4USJOHTΛͬͯΈΔ༁ͷొ 16
Slide 17
Slide 17 text
● ʮ)FMMP 8PSMEʯͷΩʔͱ༁Λొͯ͠ΈΔɻ 1ISBTF4USJOHTΛͬͯΈΔ༁ͷొ 17
Slide 18
Slide 18 text
༁ґཔ
Slide 19
Slide 19 text
1ISBTF4USJOHTΛͬͯΈΔෳΩʔͷొ 19 ● ʮΞοϓάϨʔυʯʹؔ ͢ΔΩʔΛͭొ ● ຊޠ༁ͷΈ༻ҙ
Slide 20
Slide 20 text
1ISBTF4USJOHTΛͬͯΈΔෳΩʔͷొ 20 ● ϓϩδΣΫτϖʔδʹ ʮTranslations requiredʯ ● ͭͷΩʔ͕ະ༁ͩͱ ͔Δ
Slide 21
Slide 21 text
-PDBMJ[BCMFTUSJOHTϑΝΠϧͷऔಘ 2
Slide 22
Slide 22 text
Σϒϖʔδ͔Βμϯϩʔυ
Slide 23
Slide 23 text
● ӳޠͷʮ%PXOMPBEʯϘλϯΛԡ͢ -PDBMJ[BCMFTUSJOHTϑΝΠϧͷऔಘΣϒ͔Βμϯϩʔυ 23
Slide 24
Slide 24 text
● ϑΝΠϧϑΥʔϚοτΛબɾ֬ೝ -PDBMJ[BCMFTUSJOHTϑΝΠϧͷऔಘΣϒ͔Βμϯϩʔυ 24
Slide 25
Slide 25 text
● ʮ%PXOMPBEʯϘλϯΛԡ͢ -PDBMJ[BCMFTUSJOHTϑΝΠϧͷऔಘΣϒ͔Βμϯϩʔυ 25
Slide 26
Slide 26 text
● ʮ)FMMP 8PSMEʯͷΩʔͱ༁Λొͯ͠ΈΔɻ -PDBMJ[BCMFTUSJOHTϑΝΠϧͷऔಘΣϒ͔Βμϯϩʔυ 26
Slide 27
Slide 27 text
© Chatwork ಉ͡ૢ࡞Λݴޠͷ ͚ͩ܁Γฦ͢
Slide 28
Slide 28 text
© Chatwork ໘Ͱ͢Ͷ
Slide 29
Slide 29 text
QISBTFίϚϯυ
Slide 30
Slide 30 text
QISBTFίϚϯυͬͯΈΔ 30 ● phrase pull ● શݴޠͷϑΝΠϧ͕ ● దͳύεʹ ● μϯϩʔυ͞ΕΔ
Slide 31
Slide 31 text
QISBTFίϚϯυΠϯετʔϧํ๏ 31 ● CSFXΛ͏ $ brew tap phrase/brewed $ brew install phrase
Slide 32
Slide 32 text
QISBTFίϚϯυॳظઃఆ 32 ● phrase init ● ϓϩδΣΫτͷࢦఆ ● ϑΝΠϧϑΥʔϚοτͷ ࢦఆ ● μϯϩʔυύεͷࢦఆ ● FUD
Slide 33
Slide 33 text
QISBTFίϚϯυॳظઃఆϑΝΠϧQISBTFZNM 33 ● ● en, ja ʹల։ ● access_token ● อଘ͠ͳ͍
Slide 34
Slide 34 text
QISBTFίϚϯυBDDFTT@UPLFOͷઃఆ 34 ● [TISD ● ڥมͱͯ͠ઃఆ export PHRASEAPP_ACCESS_TOKEN="͋ͳͨͷτʔΫϯ"
Slide 35
Slide 35 text
ϒϥϯνઓུ 3
Slide 36
Slide 36 text
ෳͷϓϩδΣΫτ͕ಉ࣌ʹͬͨΒ
Slide 37
Slide 37 text
ෳϓϩδΣΫτͲ͏͢Δ 37 ● ྫ͑ ● དྷՁ֨վఆ͠·͢ ● ผ1+ಈ͍ͯ·͢
Slide 38
Slide 38 text
ෳϓϩδΣΫτ(JUͳΒ 38 ● ֤ʑʹ(JUͷϒϥϯν࡞ ● Ձ֨վఆϒϥϯν ● ผ1+ϒϥϯν
Slide 39
Slide 39 text
ෳϓϩδΣΫτ(JUͳΒ 39 ● ֤ʑʹ(JUͷϒϥϯν࡞ ● Ձ֨վఆϒϥϯν ● ผ1+ϒϥϯν ● Ձ֨վఆͷจݴมߋ͕ ● ผ1+ʹऔΓࠐ·ΕΔ
Slide 40
Slide 40 text
1ISBTF4USJOHTͷϒϥϯν
Slide 41
Slide 41 text
1ISBTF4USJOHTͷϒϥϯνུ֓ͱઃఆ 41 ● σϑΥϧτͰΦϑ
Slide 42
Slide 42 text
1ISBTF4USJOHTͷϒϥϯνུ֓ͱઃఆ 42 ● σϑΥϧτͰΦϑ ● γϯϓϧͳػೳͷΈఏڙ ● ࡞ɾସ ● Ϛʔδ
Slide 43
Slide 43 text
1ISBTF4USJOHTͷϒϥϯνུ֓ͱઃఆ 43 ● σϑΥϧτͰΦϑ ● γϯϓϧͳػೳͷΈఏڙ ● ࡞ɾସ ● Ϛʔδ ● (JUͱ1ISBTF4USJOHT ● ϒϥϯνಉظͰ͖ͳ͍
Slide 44
Slide 44 text
1ISBTF4USJOHTͷϒϥϯν3VCZ4DSJQUT 44 ● 3VCZ4DSJQUTΛ༻ҙ ● QISBTFCSBODIUYU ● 1ISBTF4USJOHTͷϒ ϥϯν໊Λอଘ ● ϒϥϯνରԠͤͨ͞ QISBTFQVMM༻εΫϦϓ τΛ༻ҙ
Slide 45
Slide 45 text
4UPSZCPBSEͷଟݴޠԽ 4
Slide 46
Slide 46 text
6*ͷଟݴޠԽ
Slide 47
Slide 47 text
4XJGU6*ͷଟݴޠԽ 47 ● ΩʔΛॻ͚Δ struct SwiftUIView: View { let item: SampleItem var body: some View { Text("hello_world") .navigationTitle(item.title) } }
Slide 48
Slide 48 text
4XJGU6*ͷଟݴޠԽ 48 ● ΩʔΛॻ͚Δ struct SwiftUIView: View { let item: SampleItem var body: some View { Text("hello_world") .navigationTitle(item.title) } }
Slide 49
Slide 49 text
4UPSZCPBSEͷଟݴޠԽ 49 ● ΩʔΛॻ͘ͱ
Slide 50
Slide 50 text
4UPSZCPBSEͷଟݴޠԽ 50 ● ΩʔΛॻ͘ͱΩʔ͕ग़Δ
Slide 51
Slide 51 text
4XJGU6*ͷଟݴޠԽ 51 ● ίʔυͰରԠ @IBOutlet var helloLabel: UILabel! { didSet { helloLabel.text = NSLocalizedString(“hello_world” comment: "Hello, World!") } }
Slide 52
Slide 52 text
4UPSZCPBSE͚ͩͰଟݴޠԽ
Slide 53
Slide 53 text
4UPSZCPBSEͷଟݴޠԽ 53 ● ӈΧϥϜ ● 'JMF*OTQFDUPS ● -PDBMJ[BUJPO
Slide 54
Slide 54 text
4UPSZCPBSEͷଟݴޠԽ 54 ● ӈΧϥϜ ● 'JMF*OTQFDUPS ● -PDBMJ[BUJPO ● ࠨΧϥϜ ● 1SPKFDUOBWJHBUPS ● TUSJOHT
Slide 55
Slide 55 text
4UPSZCPBSEͷଟݴޠԽ 55 ● TUSJOHTΛฤू "DKP-2Z-Psf.text" = "hello_world";
Slide 56
Slide 56 text
4UPSZCPBSEͷଟݴޠԽ 56 ● TUSJOHTΛฤू "DKP-2Z-Psf.text" = "͜Μʹͪɺੈք!";
Slide 57
Slide 57 text
4UPSZCPBSEͷଟݴޠԽ 57 ● TUSJOHTΛฤू "DKP-2Z-Psf.text" = "͜Μʹͪɺੈք!";
Slide 58
Slide 58 text
ͦΕɺશͯͷ4UPSZCPBSEͰख࡞ۀ͢Δͷ
Slide 59
Slide 59 text
MTYTίϚϯυ
Slide 60
Slide 60 text
MTYTίϚϯυུ֓ͱΠϯετʔϧ 60 ● TUSJOHTͷฤूΛࣗಈԽ https://github.com/ataka/ls2xs $ brew install ataka/formulae/ls2xs
Slide 61
Slide 61 text
MTYTίϚϯυུ֓ͱΠϯετʔϧ 61 ● σΟϨΫτϦΛҾʹ MTYT࣮ߦ
Slide 62
Slide 62 text
·ͱΊ 62 ● 1ISBTFͷ؆୯ͳհΛ͠·ͨ͠ ● μϯϩʔυΛָʹ͢ΔQISBTFίϚϯυΛհ͠·ͨ͠ ● ϒϥϯνػೳͱαϙʔτ༻ͷεΫϦϓτΛհ͠·ͨ͠ ● 4UPSZCPBSE͚ͩͰ༁͢Δํ๏ͱMTYTίϚϯυΛհ͠·ͨ͠
Slide 63
Slide 63 text
͝੩ௌ͋Γ͕ͱ͏͍͟͝·͢ɻ J04ͱ"OESPJEͷ ΤϯδχΞืूதͰ͢
Slide 64
Slide 64 text
ಇ͘Λͬͱָ͘͠ɺతʹ