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
RAILS + REACTの実際のサービスでの国際化の話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hiroyuki Shirakawa
June 08, 2017
Programming
720
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RAILS + REACTの実際のサービスでの国際化の話
Hiroyuki Shirakawa
June 08, 2017
Other Decks in Programming
See All in Programming
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
9.3k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
370
FreeBSDでZabbixを動かす
kenkino
0
340
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
330
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
19
20k
AWS CDKのカスタムリソースでContinuum(旧Security Agent)を実装した話 | Implementing Continuum (formerly Security Agent) via AWS CDK Custom Resource
akihisaikeda
2
110
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
7
13k
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
420
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
570
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
110
Heart of Swift Concurrency
koher
0
1.1k
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
580
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
510
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
Navigating Team Friction
lara
192
16k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
440
How to train your dragon (web standard)
notwaldorf
97
6.8k
Product Roadmaps are Hard
iamctodd
55
13k
Between Models and Reality
mayunak
4
480
Transcript
RAILS + REACT shrkw Meguro.rb#3 2017/05/24(Wed)
Viibar Java, Scala, Python Viibar Ruby/Rails
4K
Viibar 35 4K
None
I18N
Rails i18n Rails (I18n) API | Rails svenfuchs/rails-i18n
JS (ES2015, React) I18n.locale
JS (ES2015, REACT)
React React yahoo/react-intl i18next/react-i18next i18next
JS fnando/i18n-js
I18N-JS Rails JSON React
export_i18n_js: false fallbacks: true translations: - file: "app/assets/javascripts/locales/%{locale}.js" only: -
'*.js.*'
locales ja: js: foo: bar: baz
REACT i18n-js translations layout //= require i18n = javascript_include_tag "locales/#{I18n.default_locale}"
- unless I18n.locale == I18n.default_locale = javascript_include_tag "locales/#{I18n.locale}"
React ES2015 I18n.js global.I18n export default global.I18n;
ES2015 i18n
render() { return <div>{I18n.t('js.submit.close')}</div>; }
JSON PRECOMPILE locale json config.middleware.use I18n::JS::Middleware if Rails.env.development?
production assets:precompile sprockets task 'assets:precompile': 'i18n:js:export'
None
None
ja en MissingTranslationData
glebm/i18n-tasks
unused, add-missing, find, remove-unused, normalize, mv missing unused JS
unused #i18n-tasks-use t('activerecord.models.user') # let i18n-tasks know the User.model_name.human
spec CI
it '各locale.yml translation 欠落 ' do count = i18n.missing_keys.count unless
count.zero? missing_list = "以下 locale 未設定 \n" i18n.missing_keys.each do |locale| locale.keys.each do |key| missing_list << "#{locale.key} | #{key}\n" end end fail missing_list end end
None
None
locales YAML JS YAML
YAML ja: # 両方 利用 設定 isomorphic: attributes: car: &isomorphic_attributes_car
tire: # activerecord: attributes: car: <<: *isomorphic_attributes_car loof: 天井 # js: attributes: car:
JSON
I18N.LOCALE
HTTP Accept-Language
before_action :set_locale def set_locale I18n.locale = extract_locale_from_accept_language_header end def extract_locale_from_accept_language_header
request.env['HTTP_ACCEPT_LANGUAGE'].scan(/^[a-z]\{2\}/).first end
application_controller
: DEVISE Devise::SessionsController flash application_controller class Devise::SessionsController < DeviseController prepend_before_action
:require_no_authentication, only: [:new, prepend_before_action :allow_params_authentication!, only: :create prepend_before_action :verify_signed_out_user, only: :destroy if authenticated && resource = warden.user(resource_name) flash[:alert] = I18n.t("devise.failure.already_authenticated") redirect_to after_sign_in_path_for(resource) end
rails_admin application_controller#set_locale
Rack rack-contrib/locale.rb at master · rack/rack-contrib · GitHub
DB
DB
None