We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 13730
    • 149 Posts
    Modx 2.3.3 (French installation)
    PHP : 5.4.38
    MySql : 5.5.42
    Babel 3.0.0.0 beta 3

    Web Context : French
    English Context : English

    Hi,

    This is not my first Babel installation. The installation process has always been easy and without problem. I follow the «http://designfromwithin.com/blog/modx-multilingual» tutorial for setting up the .htaccess, the context and the gateway.

    But this time, I am stuck with a problem for hours.

    The problem is when I view a english page it is always display the 404 page of the French Context.

    Does anyone can point me to the solution of this problem?

    Thank you for your help
      • 50093
      • 6 Posts
      Hi

      I think I have the same issue and maybe you can help me with babel and Modx. I have started to use Modx 2 weeks ago and I think it is great. I need to create a web site for a client adn use multilanguage capabilities. SO before digging into the web site implementation I wanted to test the Modx and the multilanguage babel extra. I use this configuration:

      - Modx 2.3.3 with bitnami installation
      - Babel 3.0.0-beta2

      I have two installtions:

      1) bitnami modx in the Azure machine
      2) bitnami modx in local machine

      I have followed the instructions on the

      http://designfromwithin.com/blog/modx-multilingual

      blog and i have only two languages (it for the it contects, and en for the web context)

      but both of the installation are not working

      when I test the multilanguage e.g. mysite/en/ I get 404 PAge not found

      Here the gateway plugin:

      <?php
      if($modx->context->get('key') != "mgr"){
      /* grab the current langauge from the cultureKey request var */
      switch ($_REQUEST['cultureKey']) {
      case 'it':
      /* switch the context */
      $modx->switchContext('web');
      break;
      case 'en':
      /* switch the context */
      $modx->switchContext('en');
      break;
      default:
      /* Set the default context here */
      $modx->switchContext('web');
      break;
      }
      /* unset GET var to avoid
      * appending cultureKey=xy to URLs by other components */
      unset($_GET['cultureKey']);
      }

      ?>

      here the .htaccess setup:

      RewriteEngine On
      #RewriteBase /



      # Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
      #RewriteCond %{HTTP_HOST} .
      #RewriteCond %{HTTP_HOST} !^http://localhost:8888/modx/ [NC]
      #RewriteRule (.*) http://localhost:8888/modx/$1 [R=301,L]
      #
      # or for the opposite domain.com -> www.domain.com use the following
      # DO NOT USE BOTH
      #
      #RewriteCond %{HTTP_HOST} .
      #RewriteCond %{HTTP_HOST} !^www\.example-domain-please-change\.com [NC]
      #RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]



      # Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent
      # https://www.domain.com when your cert only allows https://secure.domain.com
      #RewriteCond %{SERVER_PORT} !^443
      #RewriteRule (.*) https://example-domain-please-change.com/$1 [R=301,L]



      # The Friendly URLs part
      #RewriteCond %{REQUEST_FILENAME} !-f
      #RewriteCond %{REQUEST_FILENAME} !-d
      #RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

      # detect language when requesting the root (/)
      RewriteCond %{HTTP:Accept-Language} !^(it|en) [NC]
      RewriteRule ^$ it/ [R=301,L]
      RewriteRule ^$ en/ [R=301,L]


      # redirect all requests to /de/favicon.ico and /nl/favicon.ico
      # to /favicon.ico
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(it|en)/favicon.ico$ favicon.ico [L,QSA]

      # redirect all requests to /de/assets* and /nl/assets* to /assets*
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteRule ^(it|en)/assets(.*)$ assets$2 [L,QSA]

      # redirect all other requests to /de/* and /nl/*
      # to index.php and set the cultureKey parameter
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^(it|en)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]


      Attached there are the two contexts setup and the resources tree.

      I have spent 4 days until now and read all the posts on the web a tried many things but I cannot have the babel and modx working


      Pleaseeeee helppp!!!!


      Thanks so much

      Alberto
        • 50093
        • 6 Posts
        Hi Again

        I have this link

        http://bitnami-modx-5332.cloudapp.net/modx/

        where you can see the behaviour of the site

        if you try http://bitnami-modx-5332.cloudapp.net/modx/it/ the page not found is displayed even if the page is in the Contecxt tree

        I can provide access to the web site if you want

        I hope someone can help

        Thanks

        Alberto
          • 50093
          • 6 Posts
          Hi Again

          More info ergarding the links I have posted before

          gateway

          <?php
          if($modx->context->get('key') != "mgr"){
          			/* grab the current langauge from the cultureKey request var */
          			switch ($_REQUEST['cultureKey']) {
          				case 'it':
          					/* switch the context */
          					$modx->switchContext('it');
          					break;
          				default:
          					/* Set the default context here */
          					$modx->switchContext('web');
          					break;
          			}
          			/* unset GET var to avoid
          			 * appending cultureKey=xy to URLs by other components */
          			unset($_GET['cultureKey']);
          		}
          ?>


          .htaccess

          # Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent 
          # https://www.domain.com when your cert only allows https://secure.domain.com
          #RewriteCond %{SERVER_PORT} !^443
          #RewriteRule (.*) https://example-domain-please-change.com/$1 [R=301,L]
          
          
          
          # The Friendly URLs part
          #RewriteCond %{REQUEST_FILENAME} !-f
          #RewriteCond %{REQUEST_FILENAME} !-d
          #RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
          
          # redirect all requests to /de/favicon.ico and /nl/favicon.ico
          # to /favicon.ico
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteRule ^(it|en)/favicon.ico$ favicon.ico [L,QSA]
          						  
          # redirect all requests to /de/assets* and /nl/assets* to /assets*
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteRule ^(it|en)/assets(.*)$ assets$2 [L,QSA]
          						 
          # redirect all other requests to /de/* and /nl/*
          # to index.php and set the cultureKey parameter
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule ^(it|en)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
          
          
          # Make sure .htc files are served with the proper MIME type, which is critical
          # for XP SP2. Un-comment if your host allows htaccess MIME type overrides.
          
          #AddType text/x-component .htc
          
          
          
          # If your server is not already configured as such, the following directive
          # should be uncommented in order to set PHP's register_globals option to OFF.
          # This closes a major security hole that is abused by most XSS (cross-site
          # scripting) attacks. For more information: http://php.net/register_globals
          #
          # To verify that this option has been set to OFF, open the Manager and choose
          # Reports -> System Info and then click the phpinfo() link. Do a Find on Page
          # for "register_globals". The Local Value should be OFF. If the Master Value
          # is OFF then you do not need this directive here.
          #
          # IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
          #
          # Your server does not allow PHP directives to be set via .htaccess. In that
          # case you must make this change in your php.ini file instead. If you are
          # using a commercial web host, contact the administrators for assistance in
          # doing this. Not all servers allow local php.ini files, and they should
          # include all PHP configurations (not just this one), or you will effectively
          # reset everything to PHP defaults. Consult www.php.net for more detailed
          # information about setting PHP directives.
          
          #php_flag register_globals Off
          
          
          
          # For servers that support output compression, you should pick up a bit of
          # speed by un-commenting the following lines.
          
          #php_flag zlib.output_compression On
          #php_value zlib.output_compression_level 5
          
          
          
          # The following directives stop screen flicker in IE on CSS rollovers. If
          # needed, un-comment the following rules. When they're in place, you may have
          # to do a force-refresh in order to see changes in your designs.
          
          #ExpiresActive On
          #ExpiresByType image/gif A2592000
          #ExpiresByType image/jpeg A2592000
          #ExpiresByType image/png A2592000
          #BrowserMatch "MSIE" brokenvary=1
          #BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
          #BrowserMatch "Opera" !brokenvary
          #SetEnvIf brokenvary 1 force-no-vary
          


          Please help us for that

          Thanks

          Alberto
            • 13730
            • 149 Posts
            Hi,

            First, Babel works for me now.

            Thank Alberto, for your feedback. Your comments have helped me to look at the problem from a different angle.

            I look at your setting and the only difference I found from my setting was your .htaccess file.

            So I copy you .htaccess file on my server and modify the «# Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin» with my domain name and try it.

            After that, I was able to see the home page in english only. When I try other english pages, it always gave me the english home page. It was a start, the problem could be in the .htaccess file, at least for me.

            So, I take the .htaccess file from another installation (Modx 2.2.14 + Babel 2.2.5) and copy it to my Modx 2.3.3 + Babel 3.0.0. Beta 3 installation. Bingo, it is working.

            Here my .htaccess file. I change « fr » to « it » in the .htaccess file for you. You only have to modify the «Rewrite domain» rule.


            # MODX supports Friendly URLs via this .htaccess file. You must serve web
            # pages via Apache with mod_rewrite to use this functionality, and you must
            # change the file name from ht.access to .htaccess.
            #
            # Make sure RewriteBase points to the directory where you installed MODX.
            # E.g., "/modx" if your installation is in a "modx" subdirectory.
            #
            # You may choose to make your URLs non-case-sensitive by adding a NC directive
            # to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]
            
            RewriteEngine On
            RewriteBase /
            
            # Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
            # => For me ,I use this rule <=
            RewriteCond %{HTTP_HOST} .
            RewriteCond %{HTTP_HOST} !^your-domain\.com [NC]
            RewriteRule (.*) http://your-domain.com/$1 [R=301,L]
            #
            # or for the opposite domain.com -> www.domain.com use the following
            # DO NOT USE BOTH
            #
            #RewriteCond %{HTTP_HOST} .
            #RewriteCond %{HTTP_HOST} !^www\.example-domain-please-change\.com [NC]
            #RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]
            
            
            # Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent 
            # https://www.domain.com when your cert only allows https://secure.domain.com
            #RewriteCond %{SERVER_PORT} !^443
            #RewriteRule (.*) https://example-domain-please-change.com/$1 [R=301,L]
            
            # redirect all requests to /de/favicon.ico and /nl/favicon.ico
            # to /favicon.ico
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(it|en)/favicon.ico$ favicon.ico [L,QSA]
               
            # redirect all requests to /de/assets* and /nl/assets* to /assets*
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(it|en)/assets(.*)$ assets$2 [L,QSA]
              
            # redirect all other requests to /de/* and /nl/*
            # to index.php and set the cultureKey parameter
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule ^(it|en)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
            
            
            # Make sure .htc files are served with the proper MIME type, which is critical
            # for XP SP2. Un-comment if your host allows htaccess MIME type overrides.
            
            #AddType text/x-component .htc
            
            
            
            # If your server is not already configured as such, the following directive
            # should be uncommented in order to set PHP's register_globals option to OFF.
            # This closes a major security hole that is abused by most XSS (cross-site
            # scripting) attacks. For more information: http://php.net/register_globals
            #
            # To verify that this option has been set to OFF, open the Manager and choose
            # Reports -> System Info and then click the phpinfo() link. Do a Find on Page
            # for "register_globals". The Local Value should be OFF. If the Master Value
            # is OFF then you do not need this directive here.
            #
            # IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
            #
            # Your server does not allow PHP directives to be set via .htaccess. In that
            # case you must make this change in your php.ini file instead. If you are
            # using a commercial web host, contact the administrators for assistance in
            # doing this. Not all servers allow local php.ini files, and they should
            # include all PHP configurations (not just this one), or you will effectively
            # reset everything to PHP defaults. Consult www.php.net for more detailed
            # information about setting PHP directives.
            
            #php_flag register_globals Off
            
            
            
            # For servers that support output compression, you should pick up a bit of
            # speed by un-commenting the following lines.
            
            #php_flag zlib.output_compression On
            #php_value zlib.output_compression_level 5
            
            
            
            # The following directives stop screen flicker in IE on CSS rollovers. If
            # needed, un-comment the following rules. When they're in place, you may have
            # to do a force-refresh in order to see changes in your designs.
            
            #ExpiresActive On
            #ExpiresByType image/gif A2592000
            #ExpiresByType image/jpeg A2592000
            #ExpiresByType image/png A2592000
            #BrowserMatch "MSIE" brokenvary=1
            #BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
            #BrowserMatch "Opera" !brokenvary
            #SetEnvIf brokenvary 1 force-no-vary
            
            


            I hope, it can help you.

            Have a good day


              • 50093
              • 6 Posts
              Hi Again

              Thanks for you post.

              I have tried to modify the .htaccess file but still I got 404 Page not found when trying to switch to the Italian page

              http://bitnami-modx-5332.cloudapp.net/modx/it/

              The installation is brand new and nothing is done on it apart for the Babel multilingual settings

              The installation is in a sub folder /modx is that maybe the issue? Do you also have the installation in a sub folder?

              here is the .htaccess file. As you can see the RewriteBAse is set to a/modx because the installation is under /modx folder

              I assumed this from the http://bitnami-modx-5332.cloudapp.net/modx/ url. Maybe I am wrong??????

              # This configuration has been moved to the application config file for performance and security reasons
              # MODX supports Friendly URLs via this .htaccess file. You must serve web
              # pages via Apache with mod_rewrite to use this functionality, and you must
              # change the file name from ht.access to .htaccess.
              #
              # Make sure RewriteBase points to the directory where you installed MODX.
              # E.g., "/modx" if your installation is in a "modx" subdirectory.
              #
              # You may choose to make your URLs non-case-sensitive by adding a NC directive
              # to your rule: RewriteRule ^(.*)$ index.php?q=$1 [L,QSA,NC]
              
              RewriteEngine On
              RewriteBase /modx
              
              
              
              # Rewrite www.domain.com -> domain.com -- used with SEO Strict URLs plugin
              RewriteCond %{HTTP_HOST} .
              RewriteCond %{HTTP_HOST} !^bitnami-modx-5332.cloudapp/modx\.net [NC]
              RewriteRule (.*) http://bitnami-modx-5332.cloudapp.net/modx/$1 [R=301,L]
              #
              # or for the opposite domain.com -> www.domain.com use the following
              # DO NOT USE BOTH
              #
              #RewriteCond %{HTTP_HOST} .
              #RewriteCond %{HTTP_HOST} !^www\.example-domain-please-change\.com [NC]
              #RewriteRule (.*) http://www.example-domain-please-change.com/$1 [R=301,L]
              
              
              
              # Rewrite secure requests properly to prevent SSL cert warnings, e.g. prevent 
              # https://www.domain.com when your cert only allows https://secure.domain.com
              #RewriteCond %{SERVER_PORT} !^443
              #RewriteRule (.*) https://example-domain-please-change.com/$1 [R=301,L]
              
              
              
              # The Friendly URLs part
              #RewriteCond %{REQUEST_FILENAME} !-f
              #RewriteCond %{REQUEST_FILENAME} !-d
              #RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
              
              # redirect all requests to /de/favicon.ico and /nl/favicon.ico
              # to /favicon.ico
              RewriteCond %{REQUEST_FILENAME} !-d
              RewriteCond %{REQUEST_FILENAME} !-f
              RewriteRule ^(it|en)/favicon.ico$ favicon.ico [L,QSA]
              						  
              # redirect all requests to /de/assets* and /nl/assets* to /assets*
              RewriteCond %{REQUEST_FILENAME} !-d
              RewriteCond %{REQUEST_FILENAME} !-f
              RewriteRule ^(it|en)/assets(.*)$ assets$2 [L,QSA]
              						 
              # redirect all other requests to /de/* and /nl/*
              # to index.php and set the cultureKey parameter
              RewriteCond %{REQUEST_FILENAME} !-f
              RewriteCond %{REQUEST_FILENAME} !-d
              RewriteRule ^(it|en)?/?(.*)$ index.php?cultureKey=$1&q=$2 [L,QSA]
              
              
              # Make sure .htc files are served with the proper MIME type, which is critical
              # for XP SP2. Un-comment if your host allows htaccess MIME type overrides.
              
              #AddType text/x-component .htc
              
              
              
              # If your server is not already configured as such, the following directive
              # should be uncommented in order to set PHP's register_globals option to OFF.
              # This closes a major security hole that is abused by most XSS (cross-site
              # scripting) attacks. For more information: http://php.net/register_globals
              #
              # To verify that this option has been set to OFF, open the Manager and choose
              # Reports -> System Info and then click the phpinfo() link. Do a Find on Page
              # for "register_globals". The Local Value should be OFF. If the Master Value
              # is OFF then you do not need this directive here.
              #
              # IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
              #
              # Your server does not allow PHP directives to be set via .htaccess. In that
              # case you must make this change in your php.ini file instead. If you are
              # using a commercial web host, contact the administrators for assistance in
              # doing this. Not all servers allow local php.ini files, and they should
              # include all PHP configurations (not just this one), or you will effectively
              # reset everything to PHP defaults. Consult www.php.net for more detailed
              # information about setting PHP directives.
              
              #php_flag register_globals Off
              
              
              
              # For servers that support output compression, you should pick up a bit of
              # speed by un-commenting the following lines.
              
              #php_flag zlib.output_compression On
              #php_value zlib.output_compression_level 5
              
              
              
              # The following directives stop screen flicker in IE on CSS rollovers. If
              # needed, un-comment the following rules. When they're in place, you may have
              # to do a force-refresh in order to see changes in your designs.
              
              #ExpiresActive On
              #ExpiresByType image/gif A2592000
              #ExpiresByType image/jpeg A2592000
              #ExpiresByType image/png A2592000
              #BrowserMatch "MSIE" brokenvary=1
              #BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
              #BrowserMatch "Opera" !brokenvary
              #SetEnvIf brokenvary 1 force-no-vary
              
              


              And this is the gateway

              
              <?php
              if($modx->context->get('key') != "mgr"){
              			/* grab the current langauge from the cultureKey request var */
              			switch ($_REQUEST['cultureKey']) {
              				case 'it':
              					/* switch the context */
              					$modx->switchContext('it');
              					break;
              				default:
              					/* Set the default context here */
              					$modx->switchContext('web');
              					break;
              			}
              			/* unset GET var to avoid
              			 * appending cultureKey=xy to URLs by other components */
              			unset($_GET['cultureKey']);
              		}
              
              


              As you can see from the gateway code the Modx backend is always removing the ?> Php tag . Is this maybe the reason it is not working?

              Please could you help me on that?

              If you want I can give you the user name and password for the the Azure cloud machine and you can see the all setup

              Please let me know

              Many Thanks

              Alberto