Results 1 to 4 of 4

Thread: Multilingual site - Directory based language selection

  1. #1
    Join Date
    Mar 2011

    Multilingual site - Directory based language selection


    I'm building a multilingual site, and for the user to select the language I want to use the directory (or url-prefix) based approach (e.g., "/en/content.php" for english and "/nl/content.php" for the dutch page).

    My content.php page is the same php page in both cases, so I don't want to have it duplicated, for example having one copy in the "/en" directory and the other in the "/nl" directory. The content itself is loaded using a dictionary file (or database).

    So, for example, whenever a user clicks on "www.example.com/en/content.php" the php will identify the language by parsing the url, load the single content.php page and display the content in english (by using a dictionary, for example using gettext() or using Smarty configuration files).

    I've searched everywhere for a way to do this, but to no avail (except for using queries, like "www.example.com/content.php?lang=en", which I prefer not to for SEO reasons and readability of the URL.

    Your help will be greatly appreciated!

  2. #2
    Join Date
    Jul 2006
    I'm not sure I understand your question. Is the content.php normally a static page in one language?
    For example, do you have a set page in nl, and if you need to convert it to english you instead grab the content from the database?
    If so, it might be best to just create two separate files.

    But regarding using www.example.com/en/content.php or nl VS using www.example.com/content.php?lang=en:
    In the second url, the one you don't like, there is only one file. In the first example, AFAIK there MUST be two folders, one (en) and one (nl) each having a different content.php file in it.
    Based on that, the easiest thing would be to code each content.php page differently.

    However, if I've completely misunderstood your problem, the way a php script knows its location:
    $cur_host = $_SERVER['HTTP_HOST'];
    $cur_uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');

    You can play around with those to get the current location

  3. #3
    Join Date
    Oct 2010
    I don't know if you can do domain.com/en/content but you could definitely do it the other way domain.com/content/en , this is done with .htaccess -> http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
    www.rdennispallas.com <-- Personal Site, changing regularly cuz its ugly.

  4. #4
    Join Date
    Mar 2011
    Thank you very much Derokorian, it was a great tip. I actually managed to do domain.com/en/content.php using .htaccess. I found a good article that guided me through:


    I'll give the basics to the solution for future users, more information and possibilities can be found in the above link.

    Let's say that that I have a page content.php in my website which I want to have in english and in french, and I would like to refer to the two versions of the page using the urls:

    I only want to hold one PHP document called content.php on my server and use some translation tool to determine the actual text in the page. You can use smarty, gettext() or many other tools.

    I place the single copy of content.php in my base directory (www.example.com/content.php), and then I create in that base directory an ".htaccess" file with the following code:

    RewriteEngine on
    RewriteRule ^/?en/(.*)$ $1?lang=en
    RewriteRule ^/?fr/(.*)$ $1?lang=fr [L]

    What this code will do is translate www.example.com/en/content.php to www.example.com/content.php?lang=en, and similarly for "fr". Thus in both cases, the single content.php file is called but with a $_GET['lang'] variable which I can use to display the proper language. The viewer of the page, on the other hand, just sees the original url called, which was www.example.com/en/content.php.

    You can also have subdirectories and it still works with the single .htaccess file you've created in your base. For example, www.example.com/en/dir/content2.php will call the file www.example.com/dir/content2.php?lang=en without any further changes.

    Note - you must make sure that your server supports mod_rewrite. My server, for example, supports it but I had to add the following extra line to my .htaccess file:
    RewriteBase /
    You should find this information on your host's website.


Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
HTML5 Development Center



X vBulletin 4.2.2 Debug Information

  • Page Generation 0.16866 seconds
  • Memory Usage 2,877KB
  • Queries Executed 15 (?)
More Information
Template Usage (32):
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_global_above_footer
  • (1)ad_global_below_navbar
  • (1)ad_global_header1
  • (1)ad_global_header2
  • (1)ad_navbar_below
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)ad_thread_first_post_content
  • (1)ad_thread_last_post_content
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)headinclude_bottom
  • (4)memberaction_dropdown
  • (1)navbar
  • (4)navbar_link
  • (1)navbar_moderation
  • (1)navbar_noticebit
  • (1)navbar_tabs
  • (2)option
  • (4)postbit
  • (4)postbit_onlinestatus
  • (4)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available (6):
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files (26):
  • ./showthread.php
  • ./global.php
  • ./includes/class_bootstrap.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/functions_navigation.php
  • ./includes/class_friendly_url.php
  • ./includes/class_hook.php
  • ./includes/class_bootstrap_framework.php
  • ./vb/vb.php
  • ./vb/phrase.php
  • ./includes/functions_facebook.php
  • ./includes/functions_calendar.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_notice.php
  • ./packages/vbattach/attach.php
  • ./vb/types.php
  • ./vb/cache.php
  • ./vb/cache/db.php
  • ./vb/cache/observer/db.php
  • ./vb/cache/observer.php 

Hooks Called (73):
  • init_startup
  • friendlyurl_resolve_class
  • init_startup_session_setup_start
  • database_pre_fetch_array
  • database_post_fetch_array
  • init_startup_session_setup_complete
  • global_bootstrap_init_start
  • global_bootstrap_init_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • load_show_variables
  • load_forum_show_variables
  • global_state_check
  • global_bootstrap_complete
  • global_start
  • style_fetch
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • strip_bbcode
  • friendlyurl_clean_fragment
  • friendlyurl_geturl
  • forumjump
  • cache_templates
  • cache_templates_process
  • template_register_var
  • template_render_output
  • fetch_template_start
  • fetch_template_complete
  • parse_templates
  • fetch_musername
  • notices_check_start
  • notices_noticebit
  • process_templates_complete
  • friendlyurl_redirect_canonical
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • memberaction_dropdown
  • tag_fetchbit
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • build_navigation_data
  • build_navigation_array
  • check_navigation_permission
  • process_navigation_links_start
  • process_navigation_links_complete
  • set_navigation_menu_element
  • build_navigation_menudata
  • build_navigation_listdata
  • build_navigation_list
  • set_navigation_tab_main
  • set_navigation_tab_fallback
  • navigation_tab_complete
  • fb_like_button
  • showthread_complete
  • page_templates