I’m trying to find the best way of structuring a multi-language site navigation,.
I’m aware of the language class in CI but it seems to be more for defining random words and lines of text that are used commonly throughout the site. It appears that creating lang files for each language and then defining translations of all the links seems like the standard approach?
In past on non-codeigniter projects I’ve setup one class like this
class Link{
var $name = array();
var $url;
var $links = array();
function add_link($links){
$this->links[] = $links;
}
}
$all_sections = array();
$section = new Link();
$section->name['en'] = "Home";
$section->name['fr']] = "Uberdurky";
$section->url = "/";
$sub_section = new Link();
$sub_section->name['en'] = "About Acme Ltd";
$sub_section->name['fr'] = "Fabuka Acme Ltd";
$sub_section->url = "/about/";
$section->add_link($sub_section);
Then I have a function to loop through and output the nav, which just looks at the current name[Lang] as defined by session or URL
This to me seems simpler and less overhead – with the benefit that both the nav structure and translations are defined in one place. But I’m new to CI so I might be misunderstanding the standard approach… ? I’ve googled quite a bit and haven’t seen a solution here in detail.
The important thing is that it works for you. There are a lot of benefits to using separate language files:
I don’t see anything wrong with the way you’re doing it, but if you want to optimize – don’t bother defining all the different language lines. You don’t need the French version defined if the language is English. Use only the ones you need, you shouldn’t have to pass the whole array to
add_link(), theLinkclass should be detecting the language and loading the appropriate array only……it’s starting to sound like a language file might be a good idea actually.
For now you just have French and English. I’m assuming you
know both languages and(Uberdurky?) are the only one working on this aspect, so it’s easier for you to define them “inline”. What happens when you want to support 3, 4, or 10 languages? Things will quickly become disorganized and cluttered.However, you don’t have to use the Codeigniter Language class, you might be better off using your own system for something like navigation, which tends to be littered with 1 or two word translations, and changes somewhat frequently (either per site or between sites).
Once again, it’s your call. Do what works best for you now and optimize later.