Slide 1

Slide 1 text

จࣈɺݴޠɺίϯςϯπɺνʔϜʹඞཁͳࣄ ΞϓϦͷࠃࡍԽͷ෣୆ཪ @niw 8/31/2019 — ౦ژిػେֶ
 Builderscon Tokyo 2019

Slide 2

Slide 2 text

i18n

Slide 3

Slide 3 text

ernationalizati

Slide 4

Slide 4 text

internationalization

Slide 5

Slide 5 text

internationalization

Slide 6

Slide 6 text

i18n

Slide 7

Slide 7 text

ࠃࡍԽ

Slide 8

Slide 8 text

໰୊ͷ܏޲ͱରࡦ ΞϓϦͷࠃࡍԽ

Slide 9

Slide 9 text

@niw
 Yoshimasa Niwa

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

!

Slide 14

Slide 14 text

໨࣍ ຊ೔ͷͳ͕Ε 1.จࣈͷ࿩ 2.ݴޠͷ࿩ 3.ίϯςϯπͷ࿩ 4.νʔϜͷ࿩

Slide 15

Slide 15 text

ΞϓϦͱจࣈͷ໰୊ จࣈͷ࿩

Slide 16

Slide 16 text

ΞϓϦͰ࢖͏จࣈͬͯͳΜͩΖ͏ จࣈͱ͸? ͋

Slide 17

Slide 17 text

ΞϓϦͰ࢖͏จࣈͬͯͳΜͩΖ͏ จࣈͱ͸? Ӭ

Slide 18

Slide 18 text

ΞϓϦͰ࢖͏จࣈͬͯͳΜͩΖ͏ จࣈͱ͸? "

Slide 19

Slide 19 text

© ಺ֳ׭๪಺ֳ޿ใࣨ

Slide 20

Slide 20 text

ΞϓϦͰ࢖͏จࣈͬͯͳΜͩΖ͏ จࣈͱ͸?

Slide 21

Slide 21 text

ΞϓϦͰ࢖͏จࣈͬͯͳΜͩΖ͏ จࣈͱ͸? ኦ #

Slide 22

Slide 22 text

ΞϓϦͰ࢖͏จࣈͬͯͳΜͩΖ͏ จࣈͱ͸? • ʮจࣈʯͱܾΊͨ΋ͷ͕ʮจࣈʯ • ͦΕΛܾΊΔن͕͍֨Ζ͍Ζ͋Δ

Slide 23

Slide 23 text

Character Set ූ߸Խจࣈू߹

Slide 24

Slide 24 text

ΞϓϦͰ࢖͏จࣈͬͯͳΜͩΖ͏ จࣈͱ͸? ͋

Slide 25

Slide 25 text

ΞϓϦͰ࢖͏จࣈͬͯͳΜͩΖ͏ จࣈͱ͸? 3042

Slide 26

Slide 26 text

JIS X 0208 Unicode

Slide 27

Slide 27 text

͋ 3042 2422 Unicode JIS X 0208

Slide 28

Slide 28 text

จࣈΛ࢖͏ͷʹඞཁͳࣄ จࣈΛ࢖͏ํ๏ • จࣈΛ࢖͏લʹ͸ѻ͍΍͍͢ܗʹม׵ • ͦΕͧΕͷʮจࣈʯͷ൪߸ΛόΠτྻʹ͢Δ

Slide 29

Slide 29 text

Encoding จࣈූ߸Խํࣜ

Slide 30

Slide 30 text

3042 2422 e 08 UTF-8 0xE3 0x81 0x82 0x30 0x42 UTF-16 0x82 0xA0 0xA4 0xA2 Shift-JIS EUC-JP

Slide 31

Slide 31 text

Slide 32

Slide 32 text

ʮจࣈʯΛਖ਼͘͠ѻ͏ จࣈͱࠃࡍԽ

Slide 33

Slide 33 text

Unicode Character Set Unicode Λ࢖͏ Unicode Ͱ͸͍ΖΜͳจࣈΛੈքத͔ΒूΊͯ͋Γ ·͢ɻ

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

65,536 ͋Ε͹े෼͡ΌͶ? 2όΠτͰදݱͰ͖Δ͠

Slide 36

Slide 36 text

https://www.unicode.org/versions/Unicode1.0.0/ch02.pdf

Slide 37

Slide 37 text

U+0000 ʙ
 U+FFFF Unicode Code Point BMP (Basic Multilingual Plane)

Slide 38

Slide 38 text

UTF-16 ͋ U+3042 0x30 0x42 Unicode UTF-16 16-bit Unicode Transformation Format UCS-2

Slide 39

Slide 39 text

Objective-C JavaScript

Slide 40

Slide 40 text

$

Slide 41

Slide 41 text

Unicode 2.0 Ͱૣʑʹഁ୼ ଍Βͳ͍ • ௥Ճͷ׽ࣈ͕͍ͬͺ͍ • ϋϯάϧେҠಈ • ֆจࣈ͸ຖ೥૿͑Δ • ྩ࿨΋૿͑Δ

Slide 42

Slide 42 text

Unicode 2.0 Ͱૣʑʹഁ୼ ଍Βͳ͍ • UTF-16 ͰදݱͰ͖ͳ͘ͳΔ • Ͱ΋ࠓޙ΋จࣈ͸૿͑Δ

Slide 43

Slide 43 text

%

Slide 44

Slide 44 text

2ͭ࢖ͬͯදݱ͠Α͏ Surrogate Pair

Slide 45

Slide 45 text

U+D800 ʙ U+DBFF ͷ 1024ݸ U+DC00
 ʙ
 U+DFFF
 ͷ
 1024ݸ 1024 × 1024 = 1,048,576 ݸ௥ՃͰ͖Δ! ↓ U+10000 ʙ U+10FFFF ʹରԠͤ͞Δ

Slide 46

Slide 46 text

2ͭ࢖ͬͯදݱ͠Α͏ Surrogate Pair • ͋Γ͑ͳ͍૊Έ߹Θ͕ͤՄೳʹ • ยׂΕ͕Ͱ͖ͯ͠·͏ • ؾʹͤͣʹจࣈ਺Λ਺͑Δͱ2จࣈʹ ͳͲͳͲ…

Slide 47

Slide 47 text

$

Slide 48

Slide 48 text

Surrogate Pair ʹ͋Δจࣈ͸͋Μ·Γ࢖Θͳ͍͔Βؔ৺͕ͳ͍ ໰୊ʹؾ͕͔ͭͳ͍ !

Slide 49

Slide 49 text

࣮͸͜ͷ໰୊͸ͳ͘ͳΓͭͭ͋Γ·͢ ΍ͬͨʔ &

Slide 50

Slide 50 text

࣮͸͜ͷ໰୊͸ͳ͘ͳΓͭͭ͋Γ·͢ ΍ͬͨʔ &

Slide 51

Slide 51 text

΄ͱΜͲͷֆจࣈ͸ Surrogate Pair ͕ඞཁ ֆจࣈͷ͸ͨͨ͠໾ׂ U+1F60A &

Slide 52

Slide 52 text

΄ͱΜͲͷֆจࣈ͸ Surrogate Pair ͕ඞཁ ֆจࣈͷ͸ͨͨ͠໾ׂ • Unicode ҎલͷϚϧνόΠτ໰୊͸ͦͷ໰୊͕ى ͜ΔݴޠΛ࢖Θͳ͍ਓʹ͸࣮࣭Өڹ͕ͳ͔ͬͨ • Ͱ΋ֆจࣈ͸ΈΜͳ࢖͍͍ͨ • ؔ৺͕͋Ε͹౰વ໰୊ʹؾ͕ͭ͘͠௚͢ؾʹͳΔ

Slide 53

Slide 53 text

Surrogate Pair ͸ֆจࣈʹΑͬͯ໰୊ͷؔ৺ൣғ͕มΘͬͨ ݴޠΛ௒͑ͯ୭ʹͱͬͯ΋ؔ৺ͷߴ͍໰୊ !

Slide 54

Slide 54 text

Unicode ࢖͓͚ͬͯ͹΋͏໰୊ͳ͠? Surrogate Pair ͷ໰୊΋ղܾͦ͠͏ͩ͠Ͷ!

Slide 55

Slide 55 text

ZWJ, Variation Selector, Normalization, Collation, … Unicode ͸௒ෳࡶ • OSͷϑΥϯτϨϯμϦϯάγεςϜͰ΋͍ͬͺ͍ όά͕͋Δ • ݴޠͷϥϯλΠϜͷ࣮૷Ͱ΋όά͕͋Δ

Slide 56

Slide 56 text

iMessage ͱ͔ͰૹΔͱ௨஌ͰΫϥογϡͨ͠ શ֯εϖʔεͱֆจࣈͰΫϥογϡ ɹ' શ֯εϖʔε U+3000 Surrogate Pair ͷจࣈ

Slide 57

Slide 57 text

iMessage ͱ͔ͰૹΔͱ௨஌ͰΫϥογϡͨ͠ Variation Selector-15 ͰΫϥογϡ ‗ _ Variation Selector-15 ͱ
 ૊Έ߹ΘͤΒΕΔจࣈ Variation Selector-15 U+FE0E Combining
 Diacritical
 Marks

Slide 58

Slide 58 text

iMessage ͱ͔ͰૹΔͱ௨஌ͰΫϥογϡͨ͠ Devanagari ͰΫϥογϡ ◌ऀ a Devanagari Combination Character U+0900 ͳΜͰ΋

Slide 59

Slide 59 text

iMessage ͱ͔ͰૹΔͱ௨஌ͰΫϥογϡͨ͠ RTL ͱ Devanagari ͰΫϥογϡ Devanagari Combination Character U+0936 RTLͷจࣈ

Slide 60

Slide 60 text

Swift 5 ΑΓલͷΞϓϦ͸೚ҙͷจࣈྻͰΫϥογϡͰ͖Δ SR-9048 let str = "\u{0336}\u{0344}\u{0357}\u{0343}
 \u{0314}\u{0351}\u{0340}\u{0300}\u{0340}
 \u{0360}\u{0314}\u{0357}\u{0315}\u{0301}
 \u{0344}a" let set = Set([str])

Slide 61

Slide 61 text

Unicode ͠ΜͲ͍ ͜ͷੈ͸ෳࡶɻUnicode ͸ͦͷࣸ͠ڸ

Slide 62

Slide 62 text

ΞϓϦͷࠃࡍԽͱʮจࣈʯ ·ͱΊ • ʮจࣈʯ͸ͦ͏ܾΊ͔ͨΒจࣈɻ൪߸Ͱ۠ผ • Character Set ͱ Encoding Λཧղ͢Δ • ֆจࣈͷ͸ͨͨ͠໾ׂ͸େ͖͍ • Unicode ͸௒ෳࡶ

Slide 63

Slide 63 text

ΞϓϦͱݴޠͷ໰୊ ݴޠͷ࿩

Slide 64

Slide 64 text

จࣈྻͷ຋༁ ΞϓϦ͕දࣔ͢ΔจࣈྻΛϢʔβʔͷݴޠʹ຋༁͢Δ

Slide 65

Slide 65 text

ࢦఆ͞ΕͨݴޠͰจࣈྻΛදࣔ ෳ਺ͷݴޠͷදࣔʹରԠ͢Δ ΋ͱʹͳΔͷݴޠ(ӳޠ)ͷจࣈྻΛΩʔʹଞͷݴޠ ΁຋༁͢Δ ӳޠ ೔ຊޠ … Cancel Ωϟϯηϧ … Done ׬ྃ … Back ໭Δ …

Slide 66

Slide 66 text

https://www.dell.com/support/article/jp/ja/jpbsd1/sln306712?lang=ja

Slide 67

Slide 67 text

ӳޠ ೔ຊޠ … State ౎ಓ෎ݝ … State ঢ়ଶ … !

Slide 68

Slide 68 text

ࢦఆ͞ΕͨݴޠͰจࣈྻΛදࣔ ෳ਺ͷݴޠͷදࣔʹରԠ͢Δ จࣈྻ͝ͱʹIDΛ࡞ΓɺͦΕͧΕͷݴޠʹ຋༁ ID ӳޠ ೔ຊޠ … CANCEL_BUTTON_LABEL Cancel Ωϟϯηϧ … DONE_BUTTON_LABEL Done ׬ྃ … BACK_BUTTON_LABEL Back ໭Δ …

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

! ID ӳޠ ೔ຊޠ … CANCEL_BUTTON_LABEL Cancel Ωϟϯηϧ … DISCARD_BUTTON_LABEL Discard औΓফ͢ … DISCARD_TWEET_TITLE Are you sure to discard this Tweet? ͜ͷπΠʔτΛഁغ͠· ͔͢? …

Slide 71

Slide 71 text

ίϯςΩετ͕ͱͯ΋େ੾ ਖ਼͍͠຋༁͸ਖ਼͍͚͠ΕͲਖ਼͘͠ͳ͍ $

Slide 72

Slide 72 text

΋͠ม਺͕͋ͬͨΒ? Մมจࣈྻͷ຋༁

Slide 73

Slide 73 text

೔ຊޠʹ͸ͳ͍໰୊ ਺ͷ໰୊ • ୯७ͳ %d ͸ଟ෼΄ͱΜͲͷ৔߹Ͱ࢖͑ͳ͍ • ෳ਺ܗ͕ଘࡏ͢Δ • ਺ࢺ͕ଘࡏ͢Δ

Slide 74

Slide 74 text

https://twitter.com/hoishinxii/status/1167376497306288128

Slide 75

Slide 75 text

https://www.unicode.org/cldr/charts/34/supplemental/language_plural_rules.html

Slide 76

Slide 76 text

https://www.unicode.org/cldr/charts/34/supplemental/language_plural_rules.html

Slide 77

Slide 77 text

https://www.unicode.org/cldr/charts/34/supplemental/language_plural_rules.html

Slide 78

Slide 78 text

$

Slide 79

Slide 79 text

ෳ਺ܗ΍਺ࢺʹมԽͷͳ͍ݴޠݍͰ͸ؔ৺͕ͳ͍ ෳ਺ܗ΍਺ࢺʹछྨ͕͋Δͱؾ͕͔ͭͳ͍ !

Slide 80

Slide 80 text

ສೳༀ͸ଘࡏ͠ͳ͍ ঢ়گʹԠͨ͡ରԠ͕ඞཁɹ • ͦͷΑ͏ͳจࣈྻ͕ඞཁͳ͍Α͏ʹมߋ͢Δ • libicu ΍ɺͦΕΛ͔ͭͬͨ OS ͷ API ͰؤுΔ • จࣈྻΛԿछྨ΋༻ҙͯ͠ɺՄೳੑͷ͋ΔͦΕͧ ΕͷύλʔϯʹରԠ͢Δ • ఘΊΔ

Slide 81

Slide 81 text

จࣈྻͷೖྗ ϢʔβʔͷݴޠͰΞϓϦ͕จࣈྻΛड͚औΔ

Slide 82

Slide 82 text

No content

Slide 83

Slide 83 text

ଞͷݴޠʹൺ΂ͯঢ়ଶͷछྨͱભҠ͕ଟ͍ ೔ຊޠೖྗ͸࠷ڧʹ೉͍͠ • ೔ຊޠೖྗରԠͷΠϯΫϦϝϯλϧݕࡧͷ࣮૷ͷ ೉͠͞ • ೔ຊޠͷ஌͕ࣝ͋Δఔ౓ͳ͍ͱ࢖͑ͳ͍ • ͦ΋ͦ΋ Input Method ͕ࢁ΄Ͳ͋ͬͯڍಈ͕શ෦ ҧ͏

Slide 84

Slide 84 text

΋͏ͳʹ΋৴͡ΒΕͳ͍ API Ͱ͢ΒόάͬͯΔ • ΄΅࣮֬ʹ iOS ΞϓϦͰ೔ຊޠ͕ೖྗͰ͖ͳ͍ͷ ͸ textView(_:shouldChangeTextIn:
 replacementText:) Λ࢖͍ͬͯΔ • ͜ͷAPI͸ͣͬͱόάͬͯΔɺېسͷAPI

Slide 85

Slide 85 text

Input Method Λ࢖Θͳ͍ݴޠݍͰ͸ؔ৺͕ͳ͍ 1ͭͷೖྗ͕1จࣈʹରԠ͢Δͱ͍͏ࢥ͍ࠐΈ !

Slide 86

Slide 86 text

ΞϓϦͷࠃࡍԽͱʮݴޠʯ ·ͱΊ • จࣈྻͷ຋༁͸ίϯςΩετϦονʹ͢Δ • ม਺͸ආ͚Δɻͱ͘ʹ਺ࣈ • จࣈྻೖྗ͸1ೖྗ1จࣈͷࢥ͍ࠐΈ͕ଘࡏ

Slide 87

Slide 87 text

຋༁Λ͑ͨ͜໰୊ ίϯςϯπͷ࿩

Slide 88

Slide 88 text

த՚ϑΥϯτ໰୊ ݴޠͷ༏ઌ౓ʹ͍ͭͯ

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

ͻͱͭͷݴޠࢦఆ͚ͩͰ͸දݱ͕֬ఆ͠ͳ͍ Locale ͷࢦఆ • ΄ͱΜͲͷγεςϜ͸ Language Ͱ͸ͳ͘ɺ Locale Λࢦఆ͢ΔΑ͏ʹͳͬͯΔ • Locale ͸ݴޠʹՃ͑ͯɺ஍Ҭɺ௨՟ɺΧϨϯμʔ ͳͲݴޠίϛϡχςΟΛࢦఆͰ͖Δ • ༏ઌॱҐΛ͚ͭͯෳ਺ࢦఆͰ͖Δ • γεςϜͷσϑΥϧτͷ༏ઌॱҐ͕͋Δ

Slide 91

Slide 91 text

ϝϦοτ΋Θ͔Δ͚ΕͲ… CJK౷߹׽ࣈ • ֤ࠃͰมΘΔࣅͨΑ͏ͳ׽ࣈʹಉ͡൪߸Λ͋ͨ͑ ͍ͯΔ • ΞϓϦଆ͔Β͸൑ผෆೳ • ݸਓతʹ͸σϝϦοτͷ΄͏͕େ͖͍ͱࢥ͍ͬͯ Δ

Slide 92

Slide 92 text

قઅͷΠϕϯτͷҧ͍ ϋϩ΢ΟʔϯɺΫϦεϚεɺ৽೥…

Slide 93

Slide 93 text

https://twitter.com/mayoinomoriko/status/1078446838104055808

Slide 94

Slide 94 text

೔ৗੜ׆Ͱܦݧ͠ͳ͍͜ͱ͸ؔ৺͕ͳ͍ Ͳ͜Ͱ΋ಉ͡ͱ͍͏ࢥ͍ࠐΈ !

Slide 95

Slide 95 text

࡞Γखͷ໰୊ νʔϜͷ࿩

Slide 96

Slide 96 text

ݪҼ͸ͳΜͩͬͨͷ͔ ٕज़తͳ໰୊ʁ

Slide 97

Slide 97 text

Surrogate Pair ʹ͋Δจࣈ͸͋Μ·Γ࢖Θͳ͍͔Βؔ৺͕ͳ͍ ໰୊ʹؾ͕͔ͭͳ͍ !

Slide 98

Slide 98 text

ෳ਺ܗ΍਺ࢺʹมԽͷͳ͍ݴޠݍͰ͸ؔ৺͕ͳ͍ ෳ਺ܗ΍਺ࢺʹछྨ͕͋Δͱؾ͕͔ͭͳ͍ !

Slide 99

Slide 99 text

Input Method Λ࢖Θͳ͍ݴޠݍͰ͸ؔ৺͕ͳ͍ 1ͭͷೖྗ͕1จࣈʹରԠ͢Δͱ͍͏ࢥ͍ࠐΈ !

Slide 100

Slide 100 text

೔ৗੜ׆Ͱܦݧ͠ͳ͍͜ͱ͸ؔ৺͕ͳ͍ Ͳ͜Ͱ΋ಉ͡ͱ͍͏ࢥ͍ࠐΈ !

Slide 101

Slide 101 text

ؔ৺͕ͳ͍໰୊ ͍΍ͩͬͯ೔ຊޠೖྗͰ͖ͳͯ͘΋ࠔΒͳ͍͠

Slide 102

Slide 102 text

ઓಆ୯Ґͱͯ͠ͲΜͳʹ༏लͰ΋ɺಉ͡ن֨඼Ͱߏ ੒͞ΕͨγεςϜ͸ɺͲ͔͜ʹக໋తͳܽؕΛ࣋ͭ ͜ͱʹͳΔΘ © GHOST IN THE SHELL / ߈֪ػಈୂ

Slide 103

Slide 103 text

୭͠΋࣋ͭੜ͖ΔͨΊͷόΠΞε ແҙࣝͷόΠΞε • ෯޿͍໰୊ʹؔ৺Λ΋ͬͯରԠ͢Δͱ৘ใաଟͰ ൑அͰ͖ͳ͘ͳΔ • ࢥ͍ࠐΈ͸ੜ͖ΔͨΊʹඞཁͰ୭Ͱ΋͍࣋ͬͯΔ • Ͱ΋ͦΕ͕͋Δͱ͍͏͜ͱ͸ೝࣝͰ͖Δ

Slide 104

Slide 104 text

ଟ༷ੑͷॏཁੑ Diversity • ଟ༷ੑͷ͋ΔνʔϜ͸ಇ͖ʹ͘͞Λײ͡Δ͕ΑΓ Α͍੒Ռ͕ͰΔͱ͍͏ݚڀ݁Ռ • ΞϓϦͷࠃࡍԽͷ໰୊͸ɺ֤ʑ͕ؔ৺ͷͳ͍໰୊ Λղܾ͠ͳ͍ͱ͍͚ͳ͍ • ΞϓϦͷࠃࡍԽ͸ଟ༷ੑͷॏཁੑͱ͍͏࿩୊Ͱ ͸ɺ௚઀తʹؔ܎ͷ͋Δ໰୊ https://hbr.org/2016/09/diverse-teams-feel-less-comfortable-and-thats-why-they-perform-better

Slide 105

Slide 105 text

ͱ͍͏͜ͱͰ ·ͱΊͰ͢

Slide 106

Slide 106 text

ΞϓϦͷࠃࡍԽ ·ͱΊ • ٕज़Λਖ਼͘͠ཧղ͢Δ • ͜ͷੈ͸ࢥ͍ͬͯΔΑΓෳࡶ • ࢥ͍ࠐΈ͕͋Δ͜ͱΛ஌Δ • ଟ༷ੑͷ͋ΔνʔϜΛ࡞Δ

Slide 107

Slide 107 text

࣭͝໰͕͋Ε͹Ͳ͏ͧ Q&A