Slide 1

Slide 1 text

J04ΞϓϦέʔγϣϯͷ ւ֎ల։ ΫοΫύουגࣜձࣾւ֎ࣄۀ෦ ੢ࢁ༐ੈ!ZVTFJOJTIJZBNB

Slide 2

Slide 2 text

8IPBN* w :VTFJ/JTIJZBNB !ZVTFJOJTIJZBNB w J04EFWFMPQFSZFBST w *OUFSOBUJPOBMHSPVQ

Slide 3

Slide 3 text

એ఻ དྷ೥࢝ʹٕज़ධ࿦ࣾͷ8%# 13&44QMVTγϦʔζ͔Β ʰ4XJGU࣮ફೖ໳ʱΛग़൛͠·͢

Slide 4

Slide 4 text

"HFOEB wϨγϐͱݴޠ wϢʔβʔͷݴޠͷܾఆ w35-ରԠ wϫʔΫϑϩʔ wϩʔΧϥΠζͷ5JQT

Slide 5

Slide 5 text

Ϩγϐͱݴޠ

Slide 6

Slide 6 text

૝ఆ͍ͯ͠ͳ͍Ϣʔεέʔε wϢʔβʔ͕ࣗ෼ͷࠃҎ֎ͷ
 ϨγϐΛӾཡ͢Δ wࣗಈ຋༁ͰཧղͰ͖ͳ͍ݴޠͷ
 Ϩγϐ΋ӾཡͰ͖ΔΑ͏ʹ͢Δ

Slide 7

Slide 7 text

ίϯςϯπͷύʔιφϥΠζ wϢʔβʔ͕ཧղͰ͖ΔݴޠͰϨγϐ͕
 هड़͞Ε͍ͯΕ͹ྑ͍Θ͚Ͱ͸ͳ͍ w৯ࡐʹϦʔνͰ͖Δ؀ڥʹ͍ͳ͚Ε͹
 ϨγϐΛ࠶ݱͰ͖ͳ͍ wΞΧ΢ϯτͱݴޠ͸ର wਓͷϢʔβʔ͕ෳ਺ͷݴޠΛލ͍Ͱ࢖༻͢ Δ͜ͱΛ૝ఆ͍ͯ͠ͳ͍

Slide 8

Slide 8 text

Ϣʔβʔͷݴޠͷܾఆ

Slide 9

Slide 9 text

σόΠεͷݴޠઃఆ͸
 ৴༻Ͱ͖Δʁ wӳޠઃఆ͕໨ཱͭ w୺຤ͷྲྀ௨ܦ࿏͸༷ʑ wݴޠɺϩέʔϧͷม͑ํ Λ஌͍ͬͯΔͱ͸ݶΒͳ͍

Slide 10

Slide 10 text

໌ࣔతͳݴޠબ୒ wݴޠ͝ͱʹίϯςϯπ͕
 ҟͳΔ wཧղͰ͖ΔݴޠͰ͸ͳ͘ɺ ͲͷݴޠʮݍʯͷϨγϐΛ Ӿཡ͍͔ͨ͠Λબ୒͢Δ

Slide 11

Slide 11 text

Ϣʔβʔͷݴޠͷ༧ଌ w4*.ͷ৘ใ wσόΠεͷݴޠ wϩέʔϧ

Slide 12

Slide 12 text

struct CountryCodePredictor { static func inferredISOCountryCode() -> String? { return countryCodeFromNetwork() ?? countryCodeFromLocale() ?? nil } private static func countryCodeFromNetwork() -> String? { return NetworkInfoUtils.isoCountryCode() } private static func countryCodeFromLocale() -> String? { let locale = NSLocale.currentLocale() return locale.objectForKey(NSLocaleCountryCode) as? String } } class NetworkInfoUtils { // Check MCC class func isoCountryCode() -> String? { let networkInfo = CTTelephonyNetworkInfo() let carrier = networkInfo.subscriberCellularProvider if let carrier = carrier { return carrier.isoCountryCode // ISO 3166-1 } else { return nil } } }

Slide 13

Slide 13 text

ίϯςϯπͷݴޠͱ
 6*ͷݴޠ wίϯςϯπͷݴޠͱ6*ͷݴޠΛ Ұக͍ͤͨ͞ wσόΠεͷݴޠઃఆ͸৴༻
 Ͱ͖ͳ͍ લड़

Slide 14

Slide 14 text

6*ͷݴޠΛಈతʹ੾Γସ͑Δ

Slide 15

Slide 15 text

ϦιʔεϑΝΠϧ΁
 ௚઀ΞΫηε͢Δ private func LocalizedString(key: String, tableName: String? = nil, bundle: NSBundle = NSBundle.mainBundle(), value: String = "", language: Language) -> String { if let path = NSBundle.mainBundle().pathForResource(language.ISO639_1, ofType: "lproj"), bundle = NSBundle(path: path) { return bundle.localizedStringForKey(key, value: value, table: tableName) } else { ʢলུʣ } }

Slide 16

Slide 16 text

஫ҙ఺ wϦιʔεϑΝΠϧ΁ͷύεͷ
 ૊Έཱͯ͸ඇਪ঑ wγεςϜ͕දࣔ͢Δจݴ͸
 σόΠεͷݴޠʹґଘͨ͠··

Slide 17

Slide 17 text

35-ରԠ

Slide 18

Slide 18 text

"VUP-BZPVUͷ৔߹

Slide 19

Slide 19 text

"VUP-BZPVUʹ
 པΒͳ͍35-ʜ w-FBEJOHɺ5SBJMJOHͷํ޲͸
 ʮσόΠεͷݴޠઃఆʯͰܾ·Δ wΞϓϦ಺ͰݴޠઃఆΛ࣋ͬͯ͠·ͬͯ
 ͍ΔͷͰɺ͜ΕʹཔΔ͜ͱ͕Ͱ͖ͳ͍ w୺຤ͷݴޠઃఆ͕ӳޠͰɺϢʔβʔ͕
 બ୒ͨ͠ݴޠ͕"SBCJDͱ͍͏͜ͱ͕
 ͋ΓಘΔ

Slide 20

Slide 20 text

7JFXͷ൓స 
 transform = CGAffineTransformMakeScale(-1, 1)


Slide 21

Slide 21 text

3PPUWJFXͷ൓స override func viewDidLoad() { super.viewDidLoad() view.flipIfNeeded() }

Slide 22

Slide 22 text

ํ޲Λ࣋ͬͨཁૉͷ൓స private var titleLabel: Label = { let label = Label.newAutoLayoutView() label.textColor = UIColor.cgu_greenColor() label.flipIfNeeded() return label }()

Slide 23

Slide 23 text

໰୊఺ wख࡞ۀ wϛε͕ൃੜ͠΍͍͢ wଞͷํ๏ʢϝιουஔ׵ͳͲʣ ΋ߟ͕͑ͨɺίϯτϩʔϧ͕
 ೉͘͠ɺ෭࡞༻͕ා͍

Slide 24

Slide 24 text

ϫʔΫϑϩʔ

Slide 25

Slide 25 text

wӳޠͷจݴ͚ͩΛ௥Ճ w຋༁࡞ۀ͕ϒϩοΫʹͳΒͳ͍Α͏ʹ͜ͷ ஈ֊Ͱ͸ଞͷݴޠʹ͸ରԠ͠ͳ͍ w຋༁Λޙճ͠ʹ͢ΔͨΊ(JU)VCqPXͰ͸ ৗʹNBTUFSΛϦϦʔεՄೳʹͰ͖ͳ͍ export upload translate download import develop feature RC

Slide 26

Slide 26 text

export upload translate download import develop feature RC desc "Export xliff file of base locale." task :export do sh "xcodebuild -exportLocalizations -localizationPath . -project Global.xcodeproj" sh "mv #{BASE_LOCALE}#{EXT} #{SOURCE_FILE}" end desc "Upload xliff file of base locale to OneSky platform." task :upload do resp = project.upload_file(file: "#{SOURCE_FILE}", file_format: 'XLIFF', is_keeping_all_strings: false) p resp.code end wYMJGGܗࣜͷϑΝΠϧʹϕʔεݴޠ ӳޠ ͷ
 จݴΛΤΫεϙʔτ w0OF4LZ ޙड़ ʹΞοϓϩʔυ

Slide 27

Slide 27 text

export upload translate download import develop feature RC w0OF4LZΛར༻ w֤ࠃͷϝϯόʔ͕຋༁࡞ۀ w୯ͳΔ௚༁Ͱͳ͘αʔϏεͷ
 ࢥ૝Λ൓өͨ͠ҙ༁

Slide 28

Slide 28 text

0OF4LZ

Slide 29

Slide 29 text

export upload translate download import develop feature RC desc "Download translations from OneSky platform." task :download => TMP_DIR do ACTIVE_LOCALES.each { |locale| file_name = file_name(locale) resp = project.export_translation(source_file_name: SOURCE_FILE, locale: locale, export_file_name: file_name) File.open(file_name, 'w') { |file| file.write(resp) } } end desc "Import translated xliffs." task :import do ACTIVE_LOCALES.each { |locale| sh "xcodebuild -importLocalizations -localizationPath #{file_name(locale)} -project Global.xcodeproj" } end w֤ݴޠຖͷYMJGGܗࣜͷϑΝΠϧΛ0OF4LZ͔Β μ΢ϯϩʔυ wμ΢ϯϩʔυͨ͠ϑΝΠϧΛ9DPEFʹΠϯϙʔτ

Slide 30

Slide 30 text

ະղܾͷ໰୊ wจݴͷίϯςΩετͷڞ༗͕೉͍͠ wಉ͡จݴͰ΋ϓϥοτϑΥʔϜ͝ͱ ʹ຋༁͢Δඞཁ͕͋Δ w຋༁ϛε͕໨ཱͭ

Slide 31

Slide 31 text

ϩʔΧϥΠζͷ5JQT

Slide 32

Slide 32 text

/4-PDBMJ[FE4USJOHͷ Ωʔ஋ wίϯςΩετ͕Θ͔Δ໋໊ wಉ͡จݴͰ΋ෳ਺ͷՕॴͰ
 ࢖͍·Θ͞ͳ͍ "new" = "new"; "home.feed.new" = "new";

Slide 33

Slide 33 text

ม਺ͷॱং ม਺ͷॱং͕ݴޠؒͰಉ͡ͱ͸
 ݶΒͳ͍ "Copy %@’s %@" = "%@ von %@ kopieren"; "Copy %@’s %@" = "%$2@ von %$1@ kopieren"; "Copy %@’s %@" = "Copying %@’s %@";

Slide 34

Slide 34 text

%PVCMF-FOHUI 1TFVEPMBOHVBHF

Slide 35

Slide 35 text

3JHIUUP-FGU 1TFVEPMBOHVBHF

Slide 36

Slide 36 text

/44IPX/PO-PDBMJ[FE4USJOHT

Slide 37

Slide 37 text

ετΞͰͷ"SBCJDରԠ wJ5VOFT$POOFDU͸"SBCJDʹ
 ରԠ͍ͯ͠ͳ͍ wӳޠͷϝλσʔλʹซه͢Δͷ͕
 Ұൠతͳ໛༷

Slide 38

Slide 38 text

͋Γ͕ͱ͏͍͟͝·ͨ͠