2016-06-25 11 views
8

में गतिशील रूप से I18n अनुवाद लोड कर रहा है मैंने एक मणि (अनुवादगैम) बनाया है जिसे मैं एकाधिक परियोजनाओं (एक इंजन और एक रेल ऐप) में उपयोग करता हूं। यह मणि कई हैंश सेट करता है जो I18n बैकएंड में लोड होते हैं।मणि से रेल इंजन इंजन

एक विधि #store_dynamic_translations कई हैंश सेट करता है जो I18n बैकएंड में लोड होते हैं। यह मूल रूप से इस तरह काम करता है:

I18n.backend.store_translations(:en, { test: { property: 'value' } }) 

मेरे परीक्षण विधि और अनुवाद लोडिंग की पुष्टि करते हैं कि सही तरीके से काम करता है। हालांकि मैं इसे होस्ट इंजन और रेल ऐप में काम नहीं कर सकता। मेरे परीक्षण वातावरण में अनुवादों को सही तरीके से लोड किया गया है, यह सुनिश्चित करने के लिए मुझे अपने test_helper में विधि निष्पादित करनी है। परीक्षण पर्यावरण के बाहर मुझे यह सही ढंग से काम नहीं कर रहा है। मैं सत्यापित कर सकता हूं कि विधि निष्पादित की गई है, लेकिन अनुवाद लोड नहीं किए गए हैं।

मैंने Engine initializer में विधि निष्पादित करने और ActiveSupport हुक का उपयोग करने की तरह कई घंटों की कोशिश की है। मेजबान रेल ऐप में मैंने प्रारंभकर्ता में #store_dynamic_translations निष्पादित करने का प्रयास किया लेकिन इसका कोई फायदा नहीं हुआ।

विचित्र रूप से पर्याप्त है, अगर मैं अपने रेल ऐप नियंत्रक में #store_dynamic_translations निष्पादित करता हूं या देखता हूं, तो यह काम करता है। ऐप बूट समय पर इसे सेट करने का कोई तरीका है?


संपादित करें: मैंने example repository which contains the current setup सेट किया है।

  1. एक जेम जो गतिशील रूप से I18n बैकएंड में अनुवाद संग्रहीत करता है।

  2. एक रेल इंजन जो मणि लोड करता है और MyI18n::Translations.store_dynamic_translations निर्देश uncommenting the test in question में इसके अनुवाद उपलब्ध

होना चाहिए परीक्षण पास कर देता है। लेकिन मुझे लगता है कि engine initializer के भीतर से करना संभव है?

+0

मैंने लिखा एक अतः अनुवाद जोड़ने के लिए अलग अलग तरीकों पर जवाब देने के लिए, आप एक विशिष्ट अनुवाद बैकएंड बनाने का प्रयास करें और यह चेनिंग का उपयोग कर जोड़ने के लिए चाहते हो सकता है के रूप में यहाँ का वर्णन करता है: http: // stackoverflow। कॉम/प्रश्न/25386964/कैसे-टू-एड-वैल्यू-गतिशील रूप से -1818/25387302 # 25387302 –

+0

रेल के बाद एक हुक है जिसे आप कॉल कर सकते हैं। या आप इसे अपने अनुप्रयोग नियंत्रक में पहले_क्शन ब्लॉक में कॉल कर सकते हैं। –

+0

@EmilKampp ऐसा लगता है कि 'after_initialize' वास्तव में परीक्षण से काम करता है जो मैं अभी चला गया था! मैंने कोशिश की सभी अन्य हुक के विरोध में। आज इसे सत्यापित करने का प्रयास करेंगे। – richard

उत्तर

0

एमिल कैम्प के सुझाव के अनुसार, सही हुक after_initialize था। मैं engine.rb में इस निर्दिष्ट:

module Blorgh 
    class Engine < ::Rails::Engine 
    isolate_namespace Blorgh 

    config.after_initialize do 
     MyI18n::Translations.store_dynamic_translations 
    end 
    end 
end 
संबंधित मुद्दे