Rails 5 I18n default_locale and fallback locale
How do I set a fallback locale in Rails 5.2?
Right now it prints ''(blank) for attribute names if not found in locale. I would like it to fallback to :en when that happens.
Rails 5 specific?
# config/application.rb
config.load_defaults 5.0
config.i18n.default_locale = :nb
run specs and get:
#<ActiveRecord::RecordInvalid: Det oppstod en feil: er allerede i bruk>
see the missing part here:
#<ActiveRecord::RecordInvalid: Det oppstod en feil: [MISSING RECORD NAME] er allerede i bruk>
# switch to
# config.i18n.default_locale = :en
#<ActiveRecord::RecordInvalid: Validation failed: Report date has already been taken>
UPDATE:
@Nate got the fallback config correct in his answer below (https://stackoverflow.com/a/53453211/252799)
That wasn't the issue though. The problem, I learned, was in my nb.yml
.
Experiment 1.
Deleting the entire content of nb.yml, leaving just hello world. Works: It prints the attribute (associated record) name.
Experiment 2.
Replacing our nb.yml with the official Rails nb.yml: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml : Works. I get the helpful norwegian-english messageDet oppstod feil: Company må eksistere
. Not pretty, but helpful and what I wanted!
Experiment 3. Proof. The nb.yml reproduces the problem.
Two approaches
# A: SHOW attribute name
nb:
errors:
format: "%{attribute} %{message}"
# B: HIDE attribute name
nb:
errors:
format: "%{message}"
Which leads to another problem.
Approach B: HIDE makes you blind serverside. the specs, logs and console will show Validation Failed: can't be blank
but it looks good in UI.
I posted another Q: Simpleform errors without attribute name, but using attribute name in logs, console, specs
ruby-on-rails-5 rails-i18n
add a comment |
How do I set a fallback locale in Rails 5.2?
Right now it prints ''(blank) for attribute names if not found in locale. I would like it to fallback to :en when that happens.
Rails 5 specific?
# config/application.rb
config.load_defaults 5.0
config.i18n.default_locale = :nb
run specs and get:
#<ActiveRecord::RecordInvalid: Det oppstod en feil: er allerede i bruk>
see the missing part here:
#<ActiveRecord::RecordInvalid: Det oppstod en feil: [MISSING RECORD NAME] er allerede i bruk>
# switch to
# config.i18n.default_locale = :en
#<ActiveRecord::RecordInvalid: Validation failed: Report date has already been taken>
UPDATE:
@Nate got the fallback config correct in his answer below (https://stackoverflow.com/a/53453211/252799)
That wasn't the issue though. The problem, I learned, was in my nb.yml
.
Experiment 1.
Deleting the entire content of nb.yml, leaving just hello world. Works: It prints the attribute (associated record) name.
Experiment 2.
Replacing our nb.yml with the official Rails nb.yml: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml : Works. I get the helpful norwegian-english messageDet oppstod feil: Company må eksistere
. Not pretty, but helpful and what I wanted!
Experiment 3. Proof. The nb.yml reproduces the problem.
Two approaches
# A: SHOW attribute name
nb:
errors:
format: "%{attribute} %{message}"
# B: HIDE attribute name
nb:
errors:
format: "%{message}"
Which leads to another problem.
Approach B: HIDE makes you blind serverside. the specs, logs and console will show Validation Failed: can't be blank
but it looks good in UI.
I posted another Q: Simpleform errors without attribute name, but using attribute name in logs, console, specs
ruby-on-rails-5 rails-i18n
add a comment |
How do I set a fallback locale in Rails 5.2?
Right now it prints ''(blank) for attribute names if not found in locale. I would like it to fallback to :en when that happens.
Rails 5 specific?
# config/application.rb
config.load_defaults 5.0
config.i18n.default_locale = :nb
run specs and get:
#<ActiveRecord::RecordInvalid: Det oppstod en feil: er allerede i bruk>
see the missing part here:
#<ActiveRecord::RecordInvalid: Det oppstod en feil: [MISSING RECORD NAME] er allerede i bruk>
# switch to
# config.i18n.default_locale = :en
#<ActiveRecord::RecordInvalid: Validation failed: Report date has already been taken>
UPDATE:
@Nate got the fallback config correct in his answer below (https://stackoverflow.com/a/53453211/252799)
That wasn't the issue though. The problem, I learned, was in my nb.yml
.
Experiment 1.
Deleting the entire content of nb.yml, leaving just hello world. Works: It prints the attribute (associated record) name.
Experiment 2.
Replacing our nb.yml with the official Rails nb.yml: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml : Works. I get the helpful norwegian-english messageDet oppstod feil: Company må eksistere
. Not pretty, but helpful and what I wanted!
Experiment 3. Proof. The nb.yml reproduces the problem.
Two approaches
# A: SHOW attribute name
nb:
errors:
format: "%{attribute} %{message}"
# B: HIDE attribute name
nb:
errors:
format: "%{message}"
Which leads to another problem.
Approach B: HIDE makes you blind serverside. the specs, logs and console will show Validation Failed: can't be blank
but it looks good in UI.
I posted another Q: Simpleform errors without attribute name, but using attribute name in logs, console, specs
ruby-on-rails-5 rails-i18n
How do I set a fallback locale in Rails 5.2?
Right now it prints ''(blank) for attribute names if not found in locale. I would like it to fallback to :en when that happens.
Rails 5 specific?
# config/application.rb
config.load_defaults 5.0
config.i18n.default_locale = :nb
run specs and get:
#<ActiveRecord::RecordInvalid: Det oppstod en feil: er allerede i bruk>
see the missing part here:
#<ActiveRecord::RecordInvalid: Det oppstod en feil: [MISSING RECORD NAME] er allerede i bruk>
# switch to
# config.i18n.default_locale = :en
#<ActiveRecord::RecordInvalid: Validation failed: Report date has already been taken>
UPDATE:
@Nate got the fallback config correct in his answer below (https://stackoverflow.com/a/53453211/252799)
That wasn't the issue though. The problem, I learned, was in my nb.yml
.
Experiment 1.
Deleting the entire content of nb.yml, leaving just hello world. Works: It prints the attribute (associated record) name.
Experiment 2.
Replacing our nb.yml with the official Rails nb.yml: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml : Works. I get the helpful norwegian-english messageDet oppstod feil: Company må eksistere
. Not pretty, but helpful and what I wanted!
Experiment 3. Proof. The nb.yml reproduces the problem.
Two approaches
# A: SHOW attribute name
nb:
errors:
format: "%{attribute} %{message}"
# B: HIDE attribute name
nb:
errors:
format: "%{message}"
Which leads to another problem.
Approach B: HIDE makes you blind serverside. the specs, logs and console will show Validation Failed: can't be blank
but it looks good in UI.
I posted another Q: Simpleform errors without attribute name, but using attribute name in logs, console, specs
ruby-on-rails-5 rails-i18n
ruby-on-rails-5 rails-i18n
edited Nov 27 at 13:26
asked Nov 20 at 17:21
oma
12.9k105583
12.9k105583
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Rails 5.2 allows you to set config.i18n.fallbacks
to control which fallback locale(s) are able to be used. Set it to an array of symbols to control which locales should be used when a translation is not found. When multiple are set, it goes through the array one by one until a transliterate works (or doesn't).
In your case, you'll want the following in your config/application.rb
:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en]
This way, if a locale is not specified, it uses the :nb
locale (your default locale). Then, any time a translate fails in any locale, it will try the :en
locale as a fallback.
Note: if none of your fallback locales have a translation for the key you're trying to translate, you'll still get the translation missing error.
For a more complete answer, here's an example with multiple fallbacks. They will be checked in the order specified:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en, :es, :de]
bounty instructions "No guessing, show me it works.". You present it like guesswork, please provide authoritive answer. Thanks!
– oma
Nov 24 at 13:13
@oma not sure if you saw, but I updated my response. I tried it out on Rails 5.2.0 as well.
– Nate
Nov 24 at 18:54
Nate, it does in fact fallback to:en
as you say. It didn't solve my problem though, I guess I am asking the wrong question, I made a mistake assuming what the problem was. I think I know what the problem is, it's us/me (as 99% of the time). Our nb.yml is the issue. A fresh Rails 5.2 app with the official nb.yml github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml doesn't have the same problem. If I replace it with our nb.yml, the problem re-surface. I'll update my question, add info about what I learned and point to your answer for the fallback.
– oma
Nov 27 at 7:41
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53398275%2frails-5-i18n-default-locale-and-fallback-locale%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Rails 5.2 allows you to set config.i18n.fallbacks
to control which fallback locale(s) are able to be used. Set it to an array of symbols to control which locales should be used when a translation is not found. When multiple are set, it goes through the array one by one until a transliterate works (or doesn't).
In your case, you'll want the following in your config/application.rb
:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en]
This way, if a locale is not specified, it uses the :nb
locale (your default locale). Then, any time a translate fails in any locale, it will try the :en
locale as a fallback.
Note: if none of your fallback locales have a translation for the key you're trying to translate, you'll still get the translation missing error.
For a more complete answer, here's an example with multiple fallbacks. They will be checked in the order specified:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en, :es, :de]
bounty instructions "No guessing, show me it works.". You present it like guesswork, please provide authoritive answer. Thanks!
– oma
Nov 24 at 13:13
@oma not sure if you saw, but I updated my response. I tried it out on Rails 5.2.0 as well.
– Nate
Nov 24 at 18:54
Nate, it does in fact fallback to:en
as you say. It didn't solve my problem though, I guess I am asking the wrong question, I made a mistake assuming what the problem was. I think I know what the problem is, it's us/me (as 99% of the time). Our nb.yml is the issue. A fresh Rails 5.2 app with the official nb.yml github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml doesn't have the same problem. If I replace it with our nb.yml, the problem re-surface. I'll update my question, add info about what I learned and point to your answer for the fallback.
– oma
Nov 27 at 7:41
add a comment |
Rails 5.2 allows you to set config.i18n.fallbacks
to control which fallback locale(s) are able to be used. Set it to an array of symbols to control which locales should be used when a translation is not found. When multiple are set, it goes through the array one by one until a transliterate works (or doesn't).
In your case, you'll want the following in your config/application.rb
:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en]
This way, if a locale is not specified, it uses the :nb
locale (your default locale). Then, any time a translate fails in any locale, it will try the :en
locale as a fallback.
Note: if none of your fallback locales have a translation for the key you're trying to translate, you'll still get the translation missing error.
For a more complete answer, here's an example with multiple fallbacks. They will be checked in the order specified:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en, :es, :de]
bounty instructions "No guessing, show me it works.". You present it like guesswork, please provide authoritive answer. Thanks!
– oma
Nov 24 at 13:13
@oma not sure if you saw, but I updated my response. I tried it out on Rails 5.2.0 as well.
– Nate
Nov 24 at 18:54
Nate, it does in fact fallback to:en
as you say. It didn't solve my problem though, I guess I am asking the wrong question, I made a mistake assuming what the problem was. I think I know what the problem is, it's us/me (as 99% of the time). Our nb.yml is the issue. A fresh Rails 5.2 app with the official nb.yml github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml doesn't have the same problem. If I replace it with our nb.yml, the problem re-surface. I'll update my question, add info about what I learned and point to your answer for the fallback.
– oma
Nov 27 at 7:41
add a comment |
Rails 5.2 allows you to set config.i18n.fallbacks
to control which fallback locale(s) are able to be used. Set it to an array of symbols to control which locales should be used when a translation is not found. When multiple are set, it goes through the array one by one until a transliterate works (or doesn't).
In your case, you'll want the following in your config/application.rb
:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en]
This way, if a locale is not specified, it uses the :nb
locale (your default locale). Then, any time a translate fails in any locale, it will try the :en
locale as a fallback.
Note: if none of your fallback locales have a translation for the key you're trying to translate, you'll still get the translation missing error.
For a more complete answer, here's an example with multiple fallbacks. They will be checked in the order specified:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en, :es, :de]
Rails 5.2 allows you to set config.i18n.fallbacks
to control which fallback locale(s) are able to be used. Set it to an array of symbols to control which locales should be used when a translation is not found. When multiple are set, it goes through the array one by one until a transliterate works (or doesn't).
In your case, you'll want the following in your config/application.rb
:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en]
This way, if a locale is not specified, it uses the :nb
locale (your default locale). Then, any time a translate fails in any locale, it will try the :en
locale as a fallback.
Note: if none of your fallback locales have a translation for the key you're trying to translate, you'll still get the translation missing error.
For a more complete answer, here's an example with multiple fallbacks. They will be checked in the order specified:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en, :es, :de]
edited Nov 24 at 17:09
answered Nov 23 at 21:39
Nate
1,153211
1,153211
bounty instructions "No guessing, show me it works.". You present it like guesswork, please provide authoritive answer. Thanks!
– oma
Nov 24 at 13:13
@oma not sure if you saw, but I updated my response. I tried it out on Rails 5.2.0 as well.
– Nate
Nov 24 at 18:54
Nate, it does in fact fallback to:en
as you say. It didn't solve my problem though, I guess I am asking the wrong question, I made a mistake assuming what the problem was. I think I know what the problem is, it's us/me (as 99% of the time). Our nb.yml is the issue. A fresh Rails 5.2 app with the official nb.yml github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml doesn't have the same problem. If I replace it with our nb.yml, the problem re-surface. I'll update my question, add info about what I learned and point to your answer for the fallback.
– oma
Nov 27 at 7:41
add a comment |
bounty instructions "No guessing, show me it works.". You present it like guesswork, please provide authoritive answer. Thanks!
– oma
Nov 24 at 13:13
@oma not sure if you saw, but I updated my response. I tried it out on Rails 5.2.0 as well.
– Nate
Nov 24 at 18:54
Nate, it does in fact fallback to:en
as you say. It didn't solve my problem though, I guess I am asking the wrong question, I made a mistake assuming what the problem was. I think I know what the problem is, it's us/me (as 99% of the time). Our nb.yml is the issue. A fresh Rails 5.2 app with the official nb.yml github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml doesn't have the same problem. If I replace it with our nb.yml, the problem re-surface. I'll update my question, add info about what I learned and point to your answer for the fallback.
– oma
Nov 27 at 7:41
bounty instructions "No guessing, show me it works.". You present it like guesswork, please provide authoritive answer. Thanks!
– oma
Nov 24 at 13:13
bounty instructions "No guessing, show me it works.". You present it like guesswork, please provide authoritive answer. Thanks!
– oma
Nov 24 at 13:13
@oma not sure if you saw, but I updated my response. I tried it out on Rails 5.2.0 as well.
– Nate
Nov 24 at 18:54
@oma not sure if you saw, but I updated my response. I tried it out on Rails 5.2.0 as well.
– Nate
Nov 24 at 18:54
Nate, it does in fact fallback to
:en
as you say. It didn't solve my problem though, I guess I am asking the wrong question, I made a mistake assuming what the problem was. I think I know what the problem is, it's us/me (as 99% of the time). Our nb.yml is the issue. A fresh Rails 5.2 app with the official nb.yml github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml doesn't have the same problem. If I replace it with our nb.yml, the problem re-surface. I'll update my question, add info about what I learned and point to your answer for the fallback.– oma
Nov 27 at 7:41
Nate, it does in fact fallback to
:en
as you say. It didn't solve my problem though, I guess I am asking the wrong question, I made a mistake assuming what the problem was. I think I know what the problem is, it's us/me (as 99% of the time). Our nb.yml is the issue. A fresh Rails 5.2 app with the official nb.yml github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml doesn't have the same problem. If I replace it with our nb.yml, the problem re-surface. I'll update my question, add info about what I learned and point to your answer for the fallback.– oma
Nov 27 at 7:41
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53398275%2frails-5-i18n-default-locale-and-fallback-locale%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown