Mehrsprachige Applikation mit DB-Anbindung

Hi,

na ja, Flash liest ja keine Einträge aus der dB, sondern nur die Ausgabe des PHP-Scripts. Mit deinen dB-Daten und einem serverseitigen utf8_encode vor der Ausgabe bekomme ich in Flash den Text korrekt angezeigt.

Poste doch mal Dein komplettes PHP-Script und Deine .fla - dann kann ich die Sache mal direkt testen.

Gruß
.
 
Mann, so komisch! Vielen Dank dass du dir Zeit nimmst!

Die FLA poste lohnt sich nicht, hat nur die List-Komponente drauf mit dem Instanznamen: "list".
Hier ist der Code in AS3:
Code:
package {
	
	import flash.display.MovieClip;
	import flash.text.TextField;
	import flash.system.System;
	import fl.controls.List;
	import fl.data.DataProvider;
	
	import com.myOwnClasses.remoting.AmfphpCall;
	
	public class ListTest extends MovieClip {
		
		private var _dp:DataProvider;		
		
		public function ListTest()
		{			
			System.useCodePage = false;
			addEventListeners();
			connect();
		}
		
		private function connect() : void
		{
			var ap:AmfphpCall = new AmfphpCall(onAMFPHPResult, onAMFPHPFault);
			ap.gateway.call("Translations.getDictionaries", ap.responder, null);		
		}		
		
		private function updateList(data:Object) :void
		{
			// override old DataProvider by creating a new one
			_dp = new DataProvider();	
			
			// Loop through array and add an item to DataProvider for each record
			
			for (var i:Number = 0; i < data.length; i++)
			{
				var n:String =  data[i]["lang1"] + " / " + data[i]["lang2"];
				_dp.addItem( {label: n} );				
			}
								
			// Update list by assiging new DataProvider
			list.dataProvider = _dp;						
		}

				
		private function addEventListeners() :void 
		{
			
		}
				
			
		public function onAMFPHPResult(data:Object) :void
		{
			updateList(data);
		}
		
		
		public function onAMFPHPFault(data:Object) :void
		{
			trace("unable to get result from AMFPHP");
		}
		
	}
}

Hier das PHP Script:
Code:
class Translations
{
	var $db = null;

	function Translations()
	{
		$this->methodTable = array
		(
		"getDictionaries" => array
		(
		"access" => "remote",
		"description" => "no desc"
		)
		);
	}
	
	function getDictionaries()
	{
		// Connect to database
		$this->db = $this->connect();
   
			$sql = "SELECT 	 	`tbl_dictionaries`.`id` AS id,
							 	`lang1`.`language` AS lang1,
								`lang2`.`language` AS lang2
				   FROM 	 	`tbl_dictionaries` 
				   LEFT JOIN 	`tbl_languages` AS lang1
				   ON 			(`lang_id1` = `lang1`.`id`) 
				   LEFT JOIN 	`tbl_languages` AS lang2 
				   ON 			(`lang2`.`id` = `lang_id2`)";

		
		
		// Send SQL syntax and get result
		$result = mysql_query($sql, $this->db) OR die(mysql_error());
		
		// Put all entries into the $dictionaries array
		$dictionaries = array();
		$i = 0;
		while ($current_entry = mysql_fetch_array($result)) {
			$current_entry[2] = utf8_encode($current_entry[2]);			
			$dictionaries[] = $current_entry;			
			$i++;		
		}
		// Return Array comprising all dictionaries
		return $dictionaries;
	}

	function connect()
	{
		// Include DB Conection data
		include("http://localhost/test/php/dbconnection.inc");

		// Establish connection or throw an error
		if(!$connection = mysql_connect($_config['host'], $_config['user'], $_config['password'])) {
			die('Vocabolo is currtently unable to conact to the server.');
		}

		// Select database or die in order to not show any code hints
		else if(!mysql_select_db( $_config["database"], $connection)) {
			die('The database '.  $_config["database"] .' could not be found.<br>MySQL-Error: <br>'. mysql_error());
		}
		// Return connection
		return $connection;
	}
}
 
Hi,

den Code kann ich leider nicht direkt testen (es fehlen ja einige Klassen, der Ausgabeteil im PHP-Script ist nicht enthalten; zudem arbeite ich nicht mit CS3), aber Fehler sind soweit ich das sehen kann nicht enthalten.

Scheint so, als ob PHP die Daten nicht utf8-kodiert ausgibt. Kannst Du das Script bitte mal direkt im Browser aufrufen, die Ausgabe speichern und hier posten?

Gruß
.
 
Danke für durchschauen!
Das Script braucht keinen Ausgabeteil, da ich ja die Variablen direkt mit AMFPHP in Flash erhalten kann.

Wenn ich das Script im Browser öffne, spuckt php folgendes raus:
Code:
DeutschEnglishFrançaisFrançaisEnglish
 
[..] da ich ja die Variablen direkt mit AMFPHP in Flash erhalten kann
Wenn es sich dabei um ein Framewort mit Wrappern für Ein- und Ausgabe-Methoden handelt, würde ich dort mal nach der Fehlerquelle suchen. Bei Deiner Ausgabe liegt der Fehler auf jeden Fall auf Serverseite.

Ein simples PHP-Script, welches Deine Tabelle abfragt, und die Sprachen als Variablen-Wert-Paare ausgibt, erzeugt bei mir folgende Ausgabe:
Code:
&var1=English&var2=Deutsch&var3=Français

Gruß
.
 
du bist genial! Vielen Dank!

Aber alle AMFPHP Files durchzuwühlen wird wahrscheinlich Wochen dauern.. Naja, vielleicht muss ichs halt doch mit XML machen. Ist zwar eine bittere Pille, AMFPHP würde alles so einfach machen wenns nur sauber funktionieren würde..

Danke nochmals!
 
hey tobias, ich habs!

Bei AMFPHP kann man im Gateway folgende Methoden aufrufen:

Code:
* English:
		
			$gateway->setCharsetHandler( "none", "ISO-8859-1", "ISO-8859-1" );
			
		* Western european languages (French, Spanish, German, etc.):
		
			$gateway->setCharsetHandler( "iconv", "ISO-8859-1", "ISO-8859-1" );
			$gateway->setCharsetHandler( "utf8_decode", "ISO-8859-1", "ISO-8859-1" );
			
		* Eastern european languages (Russian and other slavic languages):
		
			$gateway->setCharsetHandler( "none", "ISO-8859-1", "ISO-8859-1" );
			$gateway->setCharsetHandler( "iconv", "your codepage", "your codepage" );
			
		* Oriental languages (Chinese, japanese, korean):
		
			$gateway->setCharsetHandler( "none", "ISO-8859-1", "ISO-8859-1" );
			$gateway->setCharsetHandler( "iconv", "big5", "big5" );
			$gateway->setCharsetHandler( "iconv", "CP950", "CP950" );
			$gateway->setCharsetHandler( "iconv", "Shift_JIS", "Shift_JIS" );
			$gateway->setCharsetHandler( "iconv", "CP932", "CP932" );
			$gateway->setCharsetHandler( "iconv", "CP949", "CP949" );
			
		* Other languages:
		
			$gateway->setCharsetHandler( "none", "ISO-8859-1", "ISO-8859-1" );

Mann, wieso hab ich das erst jetzt gecheckt? Naja, wenigstens weiss ichs jetzt:)

Nur noch eine letzte Frage: Gibts keinen Schriftensatz der alle Zeichen die es gibt unterstützt? Weil nur so könnte man doch sicher sein, dass alle User die gewünschten Zeichen eingeben können!

Gruss
 
Hi,

mit UNICODE bzw. UTF8 dürftest Du dabei auf der sicheren Seite sein.

EDIT: ... äh, Du meintest einen Font (keinen Zeichensatz)? Ich bezweifle, dass Du einen findest, der wirklich _alle_ erdenklichen Zeichen enthält (zudem treibst Du damit die Dateigröße Deiner SWF in unkontrollierte Höhen), aber die "großen" Windows-Fonts (z.B. Arial) unterstützen die meisten Sonderzeichen anderer Sprachen.

Gruß
.
 

Neue Beiträge

Zurück