Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.27 veröffentlicht (22.06.21)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
IF-Bedingung für Boardsprache
#21
Die IF Bedingung trifft nie zu, weil in der global.php die Variable $mybb->settings['bblanguage'] durch die vom User eingestellte Sprache überschrieben wird und sie dadurch immer mit $mybb->user['language'] übereinstimmt.

Du könntest für den Vergleich die Boardsprache direkt aus der DB holen, ungefähr so:
PHP-Code:
function myFunction() 
{
    global $mybb$db;

    $query $db->simple_select("settings""value""name='bblanguage'");
    $bblanguage $db->fetch_field($query"value");
    
    
if (!empty($mybb->user['language']) && $mybb->user['language'] != $bblanguage) {  
        $subject 
'Englisch';
        $body 'Hello english user';
    } else {
        $subject 'Deutsch';
        $body 'Hallo deutscher Benutzer';
    }

Zitieren
#22
jo, so gehts auch.. Bedeutet aber, dass im else-Zweig immer die "Standard-Forensprache" steht. 

Angenommen der Benutzer hat Spanisch eingestellt aber die Standard-Sprache ist Englisch, würde der Benutzer in der o.g Variante trotzdem einen deutschen Text bekommen. Oder sehe ich das falsch?

@doylecc: ggf. könnte man es auch komplett ohne DB-Abfrage machen und zeitgleich nicht nur 2, sondern mehrere Sprachen abdecken, z. B. hiermit (runtergetippt, nicht getestet!) - oder habe ich etwas vergessen und bedenke etwas nicht?

PHP-Code:
function myFunction() 
{
    global $mybb;
    
    
// Array um verschiedene Sprachen abzudecken
    
    
$emailText = [
    
        
"default" => [
            
"title" => "Standard-Title",
            
"text" => "Standard-Text..."
            
],
        
"deutsch" => [
            
"title" => "Deutscher Titel",
            
"text" => "Deutscher Text..."
            
]
        ];

    if (
array_key_exists($mybb->settings['bblanguage'], $emailText)) {
        $subject $emailText[$mybb->settings['bblanguage']]['title'];
        $body =  $emailText[$mybb->settings['bblanguage']]['text']    
    } else {
    
    $subject $emailText['default']['title'];
        $body =  $emailText['default']['text'];
    }
    


Somit müsste einfach immer nur das array oben mit allen vorhandenen Forensprachen gepflegt werden und wenn es eine mal nicht gibt, wird der default-Wert genommen. Man spart sich natürlich zusätzlich DB Abfrage und somit verschlechtert man nicht die Perfomance. 

Wie gesagt, ob ich etwas nicht bedacht habe, weiß ich gerade noch nicht..  Big Grin
Zitieren
#23
Bin ich froh dass gar die Programmierprofis unterschiedliche Lösungsvarianten darlegen. Ich kann da nur staunen und bewundert/verwundert zu Euch hoch blicken.

@istmeJAY
Würdest Du, für einen Laien, dein Beispiel mal mit "Deutsch_Du"; Deutsch_Sie"; "Englisch"; "Spanisch" und eventuell "Französisch" (also vier oder fünf Sprachen) aufzeigen damit auch ein Laie es versteht?

Wie müsste das array dazu im Detail lauten?
Jammer nicht rum ...Du musst (k/m)eine Hilfe (nicht) annehmen!
MyBB: 1.8.27 | PHP: 7.4.19 | SQL: 5.7.34
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [301] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner]
Zitieren
#24
Du musst nur das array erweitern.
Die if-Anweisung ändert sich ja nicht.

PHP-Code:
$emailText = [
    
        
"default" => [
            "title" => "Standard-Title",
            "text" => "Standard-Text..."
            ],
        "deutsch" => [
            "title" => "Deutscher Titel",
            "text" => "Deutscher Text..."
            ],
        
"chinesisch" => [
            "title" => "德国头衔",
            "text" => "德语文字..."
            ]  
        ]; 
Wink
Getestet habe ich JAY`s Code allerdings noch nicht.
Zitieren
#25
Aaah , jetzt habe ich verstanden "$emailText" ist das array.

Habe ich das jetzt richtig verstanden, dass das Array sich auf die vom User eingestellte Sprache bezieht, anderfalls wird default angenommen.
Ich kann nämlich nirgends $user->['language'] bzw. $mybb_user->['language'] entnehmen.
Danke für die Erläuterung

Zusatzfrage:
Sind "deutsch_du" und "deutsch_sie" zwei verschiedene Fragen oder kann dies mit "deutsch" pausschal abgefangen werden?
Jammer nicht rum ...Du musst (k/m)eine Hilfe (nicht) annehmen!
MyBB: 1.8.27 | PHP: 7.4.19 | SQL: 5.7.34
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [301] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner]
Zitieren
#26
Beide verschiedene.
Zitieren
#27
(23.10.2020, 14:17)Gerti schrieb: Habe ich das jetzt richtig verstanden, dass das Array sich auf die vom User eingestellte Sprache bezieht, anderfalls wird default angenommen.
Ich kann nämlich nirgends $user->['language'] bzw. $mybb_user->['language'] entnehmen.

Wie doylecc das so prima erklärt hat, wird 'bblanguage' mit dem Setting des Users überschrieben.
Somit dürftest Du mit 'bblanguage' in JAY`s Code immer die richtige Sprache haben.
Ich hoffe, ich hab das richtig verstanden, denn ich kann momentan leider nicht testen.

@doylecc & @itsmeJAY
Danke für Eure Code-Beispiele und Beiträge!
Es ist immer wieder lehrreich Euch zu lesen. Exclamation
Zitieren
#28
(23.10.2020, 14:17)Gerti schrieb: Ich kann nämlich nirgends $user->['language'] bzw. $mybb_user->['language'] entnehmen.

Richtig. Brauchst du auch nicht, denn
PHP-Code:
$mybb->settings['bblanguage'
wird mit der Sprache von dem Benutzer immer überschrieben (siehe Funktion: https://github.com/mybb/mybb/blob/featur...al.php#L60).

Das bedeutet das du in der o.g Variable (Eigenschaft) immer die Sprache hast, die der Benutzer gerade verwendet oder ausgewählt hat. Weshalb das MyBB so überschreibt, weiß ich gerade auch nicht auswendig.

Bedeutet aber das nach meiner Lösung einfach folgendes getan wird:

Wir überprüfen ob die Sprache, welche in $mybb->settings['bblanguage'] drin steht mit einem Index im Array übereinstimmt. Wenn ja nehmen wir den title und den text aus diesem Index. Sollten wir dies nicht finden, nehmen wir einfach den "default" Index aus dem Array. Das setzt natürlich vorraus, dass jeder Index im Array genau so heißt wie eine Sprache die Benutzer verwenden könnte (bspw: english, deutsch_sie, deutsch_du, usw)

Ich hoffe ich habe alles beachtet.

Grüße
Zitieren
#29
Wenn ich das richtig sehe, gibt es nur einen Haken dabei: Mit $mybb->settings['bblanguage'] wird die PN immer in der Sprache des Absenders verfasst, nicht in der Sprache des Empfängers.
Zitieren
#30
(23.10.2020, 15:38)doylecc schrieb: Wenn ich das richtig sehe, gibt es nur einen Haken dabei: Mit $mybb->settings['bblanguage']  wird die PN immer in der Sprache des Absenders verfasst, nicht in der Sprache des Empfängers.
Yep,

nach dem ganzen Trubel einer virtuell einfachen Idee mit doch erheblichen Umsetzungsproblemen favoriserte ich den derzeitigen funktionierenden Zustand:
PHP-Code:
$userlanguage htmlspecialchars_uni($user['language']);
if (
$userlanguage == "english") {
PN in Englisch senden
} else {
PN in Boardsprache senden senden

Das funktioniert perfekt, und wenn man möchte kann man das auch so gestalten:
PHP-Code:
$userlanguage htmlspecialchars_uni($user['language']);
if (
$userlanguage == "english") {
PN in Englisch senden
}
if (
$userlanguage == "spanish") {
PN in Spanisch senden
}
if (
$userlanguage == "france") {
PN in Französich senden
}
if (
$userlanguage == "sweden") {
PN in Schwedisch senden


wobei noch die die IF-Bedingung fehlt, wenn "$userlanguage" keinen Eintrag hat, denn
PHP-Code:
if ($userlanguage == "") {
PN in Standardsprache senden

funktioniert nicht. *grummel
Jammer nicht rum ...Du musst (k/m)eine Hilfe (nicht) annehmen!
MyBB: 1.8.27 | PHP: 7.4.19 | SQL: 5.7.34
Tools [Unixzeit ⇔ Realzeit] ♦ [BOM-Finder] ♦ [301] ♦ [SQL-Prefix-Changer] ♦ [USV-Rechner]
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  IF-Bedingung in "message" möglich!? Gerti 11 926 25.10.2020, 13:51
Letzter Beitrag: Gerti