I would advise that you do indeed pre-populate the translations. I have been doing a project where the languages of the content were preliminary known (5 of them), and the customers wanted 5 tabs for populating the translations (when they were editing the objects containing the translations) in the admin backend.
This however cannot happen if you don't have the translations pre-populated. The DB space or speed in this instance is a non-issue, in my opinion; you would need 100,000+ objects with several translations each to introduce even a minor lag on a default MySQL installation.
Assuming you use ActiveAdmin, you would do something like this:
# app/admin/your_models.rb
...
controller do
def create
...
YOUR_LANGUAGE_CODES.each do |lang|
@your_model.translations.build(:locale => lang, :text => YOUR_DEFAULT_I18N_TEXT)
end
end
end
Thus, when you are creating new object with translations in your admin backed, you would also automatically create all the necessary translations for it. Of course, for a proper cleanup, don't forget to have this in your containing model:
has_many :translations, :dependent => :destroy
...so when you destroy the object, the translations go with it.
...Or alternatively, you could get only the loop code and include it in any other controller method you use to create the object that contains translations.
I didn't quite get your somewhat hierarhic-looking translation model, but I believe I have illustrated my point. You should be able to expand on that to cover your specific needs.