How-to: adapt 1.4m2 to a multilanguage environment

In this board you can talk about general questions about phpMyFAQ

Moderator: Thorsten

Post Reply
ronan
Posts: 8
Joined: Mon Dec 01, 2003 4:10 pm

How-to: adapt 1.4m2 to a multilanguage environment

Post by ronan »

Hi,

I relly needed to show the user only articles in his language. 1.4m2 is a good starting point for this behaviour, even though it requires a few changes.

This post is quite long, but there are really few changes needed:
  1. restrict allowed languages
    • Remove unneeded languages by deleting language files in the lang subdirectory
    • Delete unneeded languages entry in the $LANGINI array in inc/languages.php line 22
  2. Edit inc/functions.php and change several functions (most changes consist in adding $LANG as a global variable, and adding a condition to the SQL query: faqdata.lang='$LANG')
    • function generateNumberOfArticles
      function generateNumberOfArticles()
      {
      global $db, $LANG;
      $num = $db->num_rows($db->query("SELECT id FROM ".SQLPREFIX."faqdata WHERE active = 'yes' AND lang='$LANG'"));

      ENF OF FUNCTION UNCHANGED
    • function printCategoriesPlusNumber
      function printCategoriesPlusNumber()
      {
      global $db, $sids, $msgEntries, $err_noHeaders, $LANG;

      $result = $db->query("SELECT ".SQLPREFIX."faqrubrik.rubrik, ".SQLPREFIX."faqrubrik.titel, count(".SQLPREFIX."faqdata.rubrik) AS number FROM ".SQLPREFIX."faqrubrik LEFT JOIN ".SQLPREFIX."faqdata ON ".SQLPREFIX."faqdata.rubrik = ".SQLPREFIX."faqrubrik.rubrik AND ".SQLPREFIX."faqdata.active = 'yes' AND ".SQLPREFIX."faqdata.lang='$LANG' GROUP BY ".SQLPREFIX."faqrubrik.rubrik ORDER BY ".SQLPREFIX."faqrubrik.rubrik");

      ENF OF FUNCTION UNCHANGED
    • function printThemes
      function printThemes($category)
      {
      global $db, $sids, $msgEntries, $msgPage, $msgVoteFrom, $msgPages, $msgViews, $msgPrevious, $msgNext, $err_noArticles, $PMF_CONF, $LANG;
      $seite = 1;
      $output = "";

      if (isset($_REQUEST["seite"])) {
      $seite = $_REQUEST["seite"];
      }

      $numResult = $db->query("SELECT id FROM ".SQLPREFIX."faqdata WHERE active = 'yes' AND lang='$LANG' AND rubrik = '".$category."'");
      $num = $db->num_rows($numResult);
      $seiten = ceil($num / $PMF_CONF["numRecordsPage"]);

      if ($seite == 1) {
      $first = 0;
      }
      else {
      $first = ($seite * $PMF_CONF["numRecordsPage"]) - $PMF_CONF["numRecordsPage"];
      }

      $result = $db->query("SELECT ".SQLPREFIX."faqdata.id, ".SQLPREFIX."faqdata.lang, ".SQLPREFIX."faqdata.thema, ".SQLPREFIX."faqdata.rubrik, ".SQLPREFIX."faqvisits.visits
      FROM ".SQLPREFIX."faqdata LEFT JOIN ".SQLPREFIX."faqvisits ON ".SQLPREFIX."faqdata.id = ".SQLPREFIX."faqvisits.id AND ".SQLPREFIX."faqvisits.lang = ".SQLPREFIX."faqdata.lang
      WHERE ".SQLPREFIX."faqdata.active = 'yes'
      AND ".SQLPREFIX."faqdata.rubrik = '".$category."'
      AND ".SQLPREFIX."faqdata.lang='$LANG'
      ORDER BY ".SQLPREFIX."faqdata.id LIMIT ".$first.", ".$PMF_CONF["numRecordsPage"]);

      ENF OF FUNCTION UNCHANGED
    • function generateTopTen
      function generateTopTen()
      {
      global $db, $sids, $err_noTopTen, $msgViews, $LANG;

      $result = $db->query("SELECT DISTINCT ".SQLPREFIX."faqdata.id, ".SQLPREFIX."faqdata.lang, ".SQLPREFIX."faqdata.thema, ".SQLPREFIX."faqdata.rubrik, ".SQLPREFIX."faqvisits.visits
      FROM ".SQLPREFIX."faqvisits, ".SQLPREFIX."faqdata
      WHERE ".SQLPREFIX."faqdata.id = ".SQLPREFIX."faqvisits.id
      AND ".SQLPREFIX."faqdata.lang = ".SQLPREFIX."faqvisits.lang
      AND ".SQLPREFIX."faqdata.active = 'yes'
      AND ".SQLPREFIX."faqdata.lang = '$LANG' ORDER BY ".SQLPREFIX."faqvisits.visits DESC
      LIMIT 0,10");

      ENF OF FUNCTION UNCHANGED

      }
    • function generateFiveNewest
      function generateFiveNewest()
      {
      global $db, $sids, $err_noTopTen, $msgViews, $LANG;

      $result = $db->query("SELECT DISTINCT ".SQLPREFIX."faqdata.id, ".SQLPREFIX."faqdata.lang, ".SQLPREFIX."faqdata.rubrik, ".SQLPREFIX."faqdata.thema, ".SQLPREFIX."faqdata.datum, ".SQLPREFIX."faqvisits.visits
      FROM ".SQLPREFIX."faqdata, ".SQLPREFIX."faqvisits
      WHERE ".SQLPREFIX."faqdata.id = ".SQLPREFIX."faqvisits.id
      AND ".SQLPREFIX."faqdata.lang = ".SQLPREFIX."faqvisits.lang
      AND ".SQLPREFIX."faqdata.active = 'yes'
      AND ".SQLPREFIX."faqdata.lang = '$LANG' ORDER BY ".SQLPREFIX."faqdata.datum desc LIMIT 0,5");

      ENF OF FUNCTION UNCHANGED
    • function searchEngine
      function searchEngine($begriff)
      {
      global $db, $sids, $msgEntries, $msgPage, $msgPages, $msgPrevious, $msgNext, $err_noArticles, $msgSearchAmount, $msgSearchAmounts, $msgVoteFrom, $msgSearchContent, $PMF_CONF, $LANG;

      $categories = getCategories();
      $seite = "";
      $output = "";

      if (isset($_REQUEST["seite"])) {
      $seite = $_REQUEST["seite"];
      }
      if (isset($_REQUEST["search"])) {
      $begriff = $_REQUEST["search"];
      }
      $begriff = trim($begriff);

      if (mysql_check("4.0.1") == FALSE) {
      // Search with MySQL 3.23.23+
      $query = "SELECT id, lang, rubrik, thema, content FROM ".SQLPREFIX."faqdata WHERE MATCH (thema,content,keywords) AGAINST ('".$begriff."') AND active = 'yes' AND lang='$LANG'";
      }
      else {
      // Search with MySQL 4.0.1+
      $query = "SELECT id, lang, rubrik, thema, content FROM ".SQLPREFIX."faqdata WHERE MATCH (thema,content,keywords) AGAINST ('".str_replace(" ", "* ", trim($begriff))."*' IN BOOLEAN MODE) AND active = 'yes' AND lang='$LANG'";
      }

      ENF OF FUNCTION UNCHANGED
These changes seem to provide a basic FAQ per language. There might be a few issues:
  • categories exist one language (i.e. category names are not translated).
  • Open questions seem not to be related to one language
  • Comments seem not to be related to one language
  • I did not test the search feature yet
I might have oerviewed a lot of problems. If you have any comment on this let me know.

Ronan
Thorsten
Posts: 15741
Joined: Tue Sep 25, 2001 11:14 am
Location: #phpmyfaq
Contact:

Post by Thorsten »

Hi Ronan,

thanks for this post. phpMyFAQ 1.4 M3 will support a "one language" function if the admin wants only one language.

bye
Thorsten
phpMyFAQ Maintainer and Lead Developer
amazon.de Wishlist
Post Reply