Question

I'm trying to make it so my facebook app is available in English and Japanese.

I tried using tags but could not get them to work: http://developers.facebook.com/docs/internationalization/

I then thought I'd just make two versions of the app, one in English, the other in Japanese. When I open my app, the oauth permission dialog is shown. I approve the app and then it takes me to a page which keeps looping, producing a new $_GET['code'] each time. I then click on "facebook" at the top left hand corner of the screen. I then click on my app again and this time I can access it ok in English or Japanese. How can I stop the app looping the first time around? How can I go directly to the version of the app based on the users locale? Thanks

<?php

function parse_signed_request($signed_request, $secret) {
  list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

  // decode the data
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);

  if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
    error_log('Unknown algorithm. Expected HMAC-SHA256');
    return null;
  }

  // check sig
  $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
  if ($sig !== $expected_sig) {
    error_log('Bad Signed JSON signature!');
    return null;
  }

  return $data;
}

function base64_url_decode($input) {
  return base64_decode(strtr($input, '-_', '+/'));
}

$result = parse_signed_request($_REQUEST['signed_request'],"app_secret");
$locale = $result['user']['locale'];
$token = $result['oauth_token'];

if ($token != ""){
    if ($locale == "ja_JP"){
        if ($_SERVER['HTTPS']){
            header("Location: https://secure.example.com/facebook/ja/index.php");
            exit;
        }
        else {
            header("Location: http://example.com/facebook/ja/index.php");
            exit;   
        }
    }
    else{
        if ($_SERVER['HTTPS']){
            header("Location: https://secure.example.com/facebook/en/index.php");
            exit;
        }
        else {
            header("Location: http://example.com/facebook/en/index.php");
            exit;   
        }
    }
}
else {

    if($_SERVER['HTTPS']){
        $canvas_page = "https://secure.example.com/facebook/";
    }
    else {
        $canvas_page = "http://example.com/facebook/";
    }
    $app_id = "my_app_id";
    $auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
            . $app_id . "&redirect_uri=" . urlencode($canvas_page) . "&scope=email";
    $signed_request = $_REQUEST["signed_request"];
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 
    $data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);
    echo("<script> top.location.href='" . $auth_url . "'</script>");
    exit;

}

?>
Was it helpful?

Solution

You could put all your texts in a simple locale-based array. You first need to get the user's locale, then use it as a key

$loc["ja_JP"]["MyText"] = "My JP text";
$loc["en_US"]["MyText"] = "My US text";

$result = parse_signed_request($_REQUEST['signed_request'],"app_secret");
$locale = $result['user']['locale'];

echo $loc[$locale]["MyText"];

For resources (specific localized pictures for example), you could get the files in a locale-based directory.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top