1

I'm trying to use the angular-translate to make a multilingual website. I want to show the site in different languages based on the url path as shown below

www.example.com/en
www.example.com/fr
www.example.com/de
www.example.com/pt

I tried to follow the instructions on the below posts, but couldn't make it work:

Localize URL's with ui-router and angular-translate

AngularJS SEO friendly translation URLs with ui-router

This is what I have so far:

var app = angular.module('app', [
    'ui.router',
    'pascalprecht.translate'
]);

app.config(['$stateProvider', '$translateProvider', function ($stateProvider, $translateProvider) {

    $stateProvider.state('app', {
        abstract: true,
        url: '/{lang}'
    });
    $stateProvider.state('app.home', {
        url: '',
        controller: 'mainController as main',
        templateUrl: 'views/home.html'
    });

    $translateProvider.useStaticFilesLoader({
        prefix: 'assets/locale/',
        suffix: '.json'
    });
    $translateProvider.useLocalStorage();
    $translateProvider.registerAvailableLanguageKeys(
        ['en', 'de', 'fr', 'pt'],
        {
            'en*': 'en',
            'de*': 'de',
            'fr*': 'fr',
            'pt*': 'pt',
            '*': 'en'
        }
    );

}]);

app.controller('mainController', ['$scope', '$rootScope', '$stateParams', '$translate', function ($scope, $rootScope, $stateParams, $translate) {

    $scope.$on('$stateChangeSuccess', function rootStateChangeSuccess(event, toState) {
        if($stateParams.lang !== undefined){
            var otherLang;

            if ($stateParams.lang == 'en') {
                otherLang = 'en'
            } else if ($stateParams.lang == 'de') {
                otherLang = 'de'
            } else if ($stateParams.lang == 'fr') {
                otherLang = 'fr'
            } else if ($stateParams.lang == 'pt') {
                otherLang == 'pt'
            } else {
                otherLang == 'en'
            }
            $rootScope.activeLang = $stateParams.lang;
            $rootScope.otherLangURL = $location.absUrl().replace('/' + $stateParams.lang, '/' +otherLang);
            $translate.use($stateParams.lang);
        }
    });

}]);

I've been wrestling with this problem without any progress. Can someone explain what I'm doing wrong and what I need to do? Or point to me to a github repo or a Plunkr demo?

Any help will be appreciated. Thanks

Community
  • 1
  • 1
Grant
  • 218
  • 1
  • 5
  • 15

0 Answers0