2013-04-26 4 views
6

मैं जानता हूँ कि सीएसएस सामग्री के लिए माना जाता है, लेकिन यह (नीचे) यह अच्छा बॉक्स की तरह, करता extracted ट्विटर बूटस्ट्रैप प्रलेखन सीएसएस से:सीएसएस के अंदर अंतर्राष्ट्रीयकरण के लिए रेल (संपत्ति पाइपलाइन के साथ) में सम्मेलन क्या है?

box screen shot

/* Echo out a label for the example */ 
.bs-docs-example:after { 
    content: "Example"; 
} 

मैं परवाह नहीं करते "उदाहरण", मैं ऐसा ही कुछ एक mixin के रूप में उपयोग:

.box (@legend) { 
    /* Echo out a label for the example */ 
    &:after { 
    content: @legend; 
    } 
} 

तब मैं वास्तव में गतिशील सीएसएस की जरूरत नहीं है, मैं आसानी से एक कक्षा में mixin शामिल कर सकते हैं, लेकिन इसके बजाय का गुजर "Observation" मैं t 'box.observation' पारित करने के लिए की जरूरत है:

.observation { 
    .box("<%= t 'box.observation' =>"); 
} 

रेल विन्यास से अधिक परंपराओं का पालन करने के लिए माना जाता है, यह सिर्फ एक स्थिर सीएसएस/कम/एससीएसएस जोड़ने के लिए बहुत आसान है और यह पहले से ही एक भी minified सीएसएस में सभी पृष्ठों में शामिल है । अंतर्राष्ट्रीयकृत सीएसएस के लिए सम्मेलन क्या है? उदाहरण के लिए, जहां मुझे .observation की घोषणाएं कहां रखी जाएंगी?

+0

मैं ख विश्वास करें कि आपकी परेशानी इस तथ्य से आ जाएगी कि संपत्तियों को एक application.css पर प्रीकंपल किया गया है। अंतर्राष्ट्रीयकरण, हालांकि, रन टाइम पर होता है। तो आपको शायद इसके लिए सभी कामों के लिए गतिशील रूप से अपना सीएसएस बनाना होगा। –

+0

सीएसएस का जितना स्थान स्थानीय लोगों के रूप में बदलता है, मुझे लगता है कि रन टाइम पर इसे बनाना अधिक होगा, क्या आपको नहीं लगता? – michelpm

+0

मुझे यहां जवाब पसंद है: http://stackoverflow.com/questions/9310044/rails-i18n-of-css-file। आप सीएसएस को निकालते हैं जो उनके फाइलनामों में भाषा संक्षेप के साथ सीएसएस फाइलों के लिए विशिष्ट लोकेल है। – mccannf

उत्तर

2

आप की जरूरत नहीं है प्रत्येक लोकेल के लिए एक नई सीएसएस फ़ाइल उत्पन्न करें - जो पागलपन पर सीमाएं हैं। आपकी सीएसएस आपकी वेबसाइट की टेक्स्ट सामग्री के बारे में क्यों ख्याल रखती है?

मुझे लगता है कि आपकी सर्वोत्तम शर्त मूल्य को पकड़ने के लिए डेटा-विशेषता का उपयोग करना होगा ...

<div class='bs-docs-example' data-before-content='<%= t.css_example %>'> 
    <!-- html here --> 
</div> 

और फिर अपने सीएसएस में:

.bs-docs-example:after { 
    content: attr(data-before-content); 
} 

आप शायद एक आंशिक (या सहायक) में इस निकालने के लिए एक रास्ता मिल सकता है, ताकि आपके ERB फ़ाइल को इस तरह समाप्त होता है:

<%= docs_example do %> 
    <!-- html here --> 
<% end %> 

और एक सहायक विधि:

def docs_example 
    content_tag(:div, class: "bs-docs-example", "data-before-content" => t.css_example) do 
    yield 
    end 
end 
+0

यह आश्चर्यजनक है। क्या आप जानते हैं कि 'attr' विशेषता कितनी अच्छी तरह से समर्थित है? – michelpm

+1

मेरा मानना ​​है कि इसका एक ही समर्थन है कि 'सामग्री' सीएसएस विशेषता में स्वयं है: http://caniuse.com/#feat=css-gencontent - तो आईई 8+, फ़ायरफ़ॉक्स, क्रोम, सफारी। – nzifnab

+0

मुझे लगता है कि मुझे अनुवादक गलत 't.css_example' का वाक्यविन्यास मिला है, लेकिन आप जानते हैं कि पहले से ही यह हिस्सा कैसे करें: पी – nzifnab

2

मैं लोकेल प्रति एक सीएसएस के रूप में this answer में सुझाव उत्पन्न कर सकता है, लेकिन जब से सीएसएस I18n बिट्स के अलावा एक ही है, मैं दोनों में से किसी के लिए होता है: स्थिर सीएसएस की एक भीड़ के साथ

  1. एक फ़ोल्डर/स्थानीय inlined, जैसे के साथ कम:

    /* en */ 
    .observation { 
        .box("Observation"); 
    } 
    
  2. बिल्कुल समान गतिशील सीएसएस के बहुत सारे है, जैसे

    /* en */ 
    html[lang=en] { 
        .observation { 
        .box("Observation") 
        } 
    } 
    

इसके बजाय मैं एक सीएसएस और ERB दृश्य बना सकते हैं और URL में स्थान कोड के साथ पृष्ठ कैशिंग का उपयोग कर का उपयोग कर वितरित करने के लिए चुनते हैं, तो इस तरह से कोई दोहराव है। नीचे कोड देखें।

config/routes.rb

X::Application.routes.draw do 
    get 'index.:locale.:format' => 'css#index', 
    constraints: { locale: /[a-z]{2}(-[A-Z]{2})?/, 
        format: 'css' } 
end 

एप्लिकेशन/नियंत्रक/css_controller.rb

class CssController < ActionController::Base 
    caches_page :index 
    def index 
    @locale = params[:locale] 
    end 
end 

एप्लिकेशन/विचारों/सीएसएस/index.css.less.erb

@import "mixins"; 
.observation { 
    .box("<%= t 'box.observation', locale: @locale %>"); 
} 

ऐप/संपत्ति/स्टाइलशीट/mixins.less

.box (@legend) { 
    /* Echo out a label for the example */ 
    &:after { 
    content: @legend; 
    } 
} 

अगर यह एक simple ERB view था है के रूप में इस उदाहरण काम करेगा, लेकिन चूंकि यह कम उपयोग कर रहा है, मैं रेल 4 के रूप में मैन्युअल ERB और पार्स करने के लिए कम है:

class CssController < ActionController::Base 
    caches_page :index 

    def index 
    @locale = params[:locale] 
    erb_source = find_template.source 
    less_source = Tilt::ERBTemplate.new { erb_source }.render(self) 
    css_source = Less::Parser.new(paths: Rails.application.config.less.paths).parse(less_source).to_css 
    render text: css_source 
    end 

    private 

    def find_template(_action_name = action_name) 
    lookup_context.disable_cache { lookup_context.find_template(_action_name, lookup_context.prefixes) } 
    end 
end 
संबंधित मुद्दे