localize blog posts

This commit is contained in:
Emi Matchu 2013-02-06 10:59:25 -06:00
parent e71530a958
commit 923335b8da
2 changed files with 36 additions and 2 deletions

View file

@ -105,7 +105,10 @@ module ApplicationHelper
current_locale_is_public = false current_locale_is_public = false
options = I18n.public_locales.map do |available_locale| options = I18n.public_locales.map do |available_locale|
current_locale_is_public = true if I18n.locale == available_locale current_locale_is_public = true if I18n.locale == available_locale
[translate('locale_name', :locale => available_locale), available_locale] # Include fallbacks data on the tag. Right now it's used in blog
# localization, but may conceivably be used for something else later.
[translate('locale_name', :locale => available_locale), available_locale,
{'data-fallbacks' => I18n.fallbacks[available_locale].join(',')}]
end end
unless current_locale_is_public unless current_locale_is_public

View file

@ -169,11 +169,42 @@ $(function () {
body += '…'; body += '…';
}*/ }*/
el.find('h2').text(header).wrapInner($('<a/>', {href: url})); el.find('h2').text(header).wrapInner($('<a/>', {href: url}));
el.find('div').html(body); var contentEl = el.find('div');
contentEl.html(body);
$('<a/>', {'id': 'blog-preview-comments', href: url + '#disqus_thread'}).appendTo(el); $('<a/>', {'id': 'blog-preview-comments', href: url + '#disqus_thread'}).appendTo(el);
if(image) { if(image) {
el.find('img').attr('src', image).parent().attr('href', url); el.find('img').attr('src', image).parent().attr('href', url);
} }
// Localize
var localizedBodies = {};
contentEl.find('.locale').each(function () {
var localizedBody = $(this);
var locale = localizedBody.attr('class').match(/locale-(\S+)/)[1];
localizedBodies[locale] = localizedBody;
});
var fallbacks = $('#locale option:selected').attr('data-fallbacks').split(',');
var bestLocale = null;
for(var i = 0; i < fallbacks.length; i++) {
if(localizedBodies.hasOwnProperty(fallbacks[i])) {
bestLocale = fallbacks[i];
break;
}
}
if(bestLocale) {
// I feel bad doing all this in JS rather than CSS, but sometimes you
// gotta do what you gotta do if you wanna support any number of locales.
for(var locale in localizedBodies) {
localizedBodies[locale].hide();
}
localizedBodies[bestLocale].show();
contentEl.find('.no-locale').hide();
}
el.fadeIn('medium'); el.fadeIn('medium');
addDisqusCount(); addDisqusCount();
}); });