PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sprachauswahl funktioniert nicht für selbst angelegte Sprache



Danny94
30.03.2017, 09:46
Seit einer ganzen Weile versuche ich die Sprachauswahl in der top Navigation zum laufen zu bringen.

Bekomme nur "Anhang 1" zu sehen. Obwohl ich "Anhang 2" meine selbst angelegte Sprache eigentlich korrekt installiert haben müsste.

Die init.inc.php Hauptordner müsste auch in Ordnung sein:


@setlocale(LC_TIME, 'it_IT.utf8', 'it_IT.UTF-8', 'it_IT@euro', 'it_IT', 'it-IT', 'it-IT', 'it', 'Italian');

$coo_lang_file_master->init_from_lang_file('language_settings');
$coo_lang_file_master->init_from_lang_file('general');
$coo_lang_file_master->init_from_lang_file('gm_logger');
$coo_lang_file_master->init_from_lang_file('gm_shopping_cart');
$coo_lang_file_master->init_from_lang_file('gm_account_delete');
$coo_lang_file_master->init_from_lang_file('gm_price_offer');
$coo_lang_file_master->init_from_lang_file('gm_tell_a_friend');
$coo_lang_file_master->init_from_lang_file('gm_callback_service');

Adminbereich:

@setlocale(LC_TIME, 'it_IT.utf8', 'it_IT.UTF-8', 'it_IT@euro', 'it_IT', 'it-IT', 'it-IT', 'it', 'Italian');

$coo_lang_file_master->init_from_lang_file('language_settings');
$coo_lang_file_master->init_from_lang_file('admin_general');
$coo_lang_file_master->init_from_lang_file('gm_general');
$coo_lang_file_master->init_from_lang_file('admin/yoochoose/yoo_lang_german.php');

Yoochoose ist nur ein Empfehlungsdienst.

Länder habe ich nur eins zur Auswahl: Italien, habe versucht auch Deutschland anzumachen hat aber nichts gebracht.

Muss ich etwas in der Datenbank einstellen ?
Habe den Shop neu hochgeladen mit den beiden vorinstallierten Sprachen scheint alles zu klappen.

Der Rest funktioniert eigentlich auch problemlos wie z.b. der content manager oder email vorlagen usw. Anhang 3.

Danny94
05.04.2017, 07:34
Hat keiner eine Lösung dafür ? Habe schon alles erdenkliche ausprobiert.
Das wäre sehr wichtig für unseren Shop, vor allem da in Italien hier 2 Sprachen sind und die Browsersprache häufig random ist.

Danny94
26.04.2017, 09:02
Ich habe das jetzt so gemacht:
in der index.html


{if $smarty.session.language == german}
<div id="languageflags">
<a class="germanflag" href="{page_url}"><b>DE</b></a>
<a class="italianflag" href="{momurl}"><b>IT</b></a>
</div>
{else}
<div id="languageflags">
<a class="germanflag" href="{momurl}"><b>DE</b></a>
<a class="italianflag" href="{page_url}"><b>IT</b></a>
</div>
{/if}

und meine Funktion von hier (https://ecomservice.interfile.de/threads/1675-Wie-komme-ich-an-die-aktuelle-URL-f%C3%BCr-share-static-buttons?p=9505&viewfull=1#post9505) nochmal etwas abgeändert:



function smarty_function_momurl($params, &$smarty)
{
$seoBoost = MainFactory::create_object('GMSEOBoost', [], true);
$languageCode = new LanguageCode(new StringType(strtoupper($_SESSION['language_code'])));
$url = '';
$html = '';
$robots = 'index,follow';

$requestUri = gm_get_env_info('REQUEST_URI');
$getParams = parse_url($requestUri, PHP_URL_QUERY);
parse_str($getParams, $getArray);
$getArray = array_keys($getArray);

$languageProvider = MainFactory::create('LanguageProvider', StaticGXCoreLoader::getDatabaseQueryBuilder());
$activeCodes = $languageProvider->getActiveCodes();


if(isset($GLOBALS['actual_products_id']) && !empty($GLOBALS['actual_products_id']))
{
/** @var ProductReadService $productReadService */
$productReadService = StaticGXCoreLoader::getService('ProductRead');
$product = $productReadService->getProductById(new IdType((int)$GLOBALS['actual_products_id']));

if($seoBoost->boost_products)
{
$url = xtc_href_link($seoBoost->get_boosted_product_url($GLOBALS['actual_products_id']));
}
else
{
try
{
$productLinkParams = xtc_product_link($GLOBALS['actual_products_id'], $product->getName($languageCode),
$product->getUrlKeywords($languageCode),
$_SESSION['languages_id']);
}
catch(InvalidArgumentException $e)
{
$productLinkParams = xtc_product_link($GLOBALS['actual_products_id'], '', '',
$_SESSION['languages_id']);
}

$url = xtc_href_link(FILENAME_DEFAULT, $productLinkParams);
}

if($robots === 'index,follow' && $activeCodes->count() > 1)
{
foreach($activeCodes as $code)
{
$langCode = new LanguageCode(new StringType($code->asString()));
$languageId = $languageProvider->getIdByCode($langCode);

if($languageId != $_SESSION['languages_id'])
{
if($seoBoost->boost_products)
{
$altUrl = xtc_href_link($seoBoost->get_boosted_product_url($GLOBALS['actual_products_id'], '',
$languageId));
}
else
{
try
{
$productLinkParams = xtc_product_link($GLOBALS['actual_products_id'],
$product->getName($langCode),
$product->getUrlKeywords($langCode), $languageId);
}
catch(InvalidArgumentException $e)
{
continue;
}

$altUrl = xtc_href_link(FILENAME_DEFAULT, $productLinkParams);
}

if($altUrl !== $url)
{

$html .= htmlspecialchars($altUrl);
}
}
}
}
}
elseif(isset($_GET['cat']) && isset($GLOBALS['current_category_id']) && !empty($GLOBALS['current_category_id']))
{
/** @var CategoryReadService $categoryReadService */
$categoryReadService = StaticGXCoreLoader::getService('CategoryRead');
$category = $categoryReadService->getCategoryById(new IdType((int)$GLOBALS['current_category_id']));

if($seoBoost->boost_categories)
{
$url = xtc_href_link($seoBoost->get_boosted_category_url($GLOBALS['current_category_id']));
}
else
{
try
{
$categoryLinkParams = xtc_category_link($GLOBALS['current_category_id'],
$category->getName($languageCode),
$category->getUrlKeywords($languageCode),
$_SESSION['languages_id']);
}
catch(InvalidArgumentException $e)
{
$categoryLinkParams = xtc_category_link($GLOBALS['current_category_id'], '', '',
$_SESSION['languages_id']);
}

$url = xtc_href_link(FILENAME_DEFAULT, $categoryLinkParams);
}

if($robots === 'index,follow' && $activeCodes->count() > 1)
{
foreach($activeCodes as $code)
{
$langCode = new LanguageCode(new StringType($code->asString()));
$languageId = $languageProvider->getIdByCode($langCode);

if($languageId != $_SESSION['languages_id'])
{
if($seoBoost->boost_categories)
{
$altUrl = xtc_href_link($seoBoost->get_boosted_category_url($GLOBALS['current_category_id'],
$languageId));
}
else
{
try
{
$categoryLinkParams = xtc_category_link($GLOBALS['actual_products_id'],
$category->getName($langCode),
$category->getUrlKeywords($langCode), $languageId);
}
catch(InvalidArgumentException $e)
{
continue;
}

$altUrl = xtc_href_link(FILENAME_DEFAULT, $categoryLinkParams);
}


if($altUrl !== $url)
{
$html .= htmlspecialchars($altUrl);

}
}
}
}

}
elseif(isset($_GET['coID']) && $activeCodes->count() > 1)
{
$coID = (int)$_GET['coID'];

if($seoBoost->boost_content)
{
$contentId = $seoBoost->get_content_id_by_content_group($coID);
$url = xtc_href_link($seoBoost->get_boosted_content_url($contentId));
}
else
{
$url = xtc_href_link(FILENAME_CONTENT, 'coID=' . $coID);
}

if($robots === 'index,follow' && $activeCodes->count() > 1)
{
foreach($activeCodes as $code)
{
$langCode = new LanguageCode(new StringType($code->asString()));
$languageId = $languageProvider->getIdByCode($langCode);

if($languageId != $_SESSION['languages_id'])
{
if($seoBoost->boost_content)
{
$contentId = $seoBoost->get_content_id_by_content_group($coID, $languageId);
$altUrl = xtc_href_link($seoBoost->get_boosted_content_url($contentId, $languageId));
}
else
{
$altUrl = xtc_href_link(FILENAME_CONTENT, 'coID=' . $coID);
}


if($altUrl !== $url)
{
$html .= htmlspecialchars($altUrl);

}
}
}
}
}
if (empty($html)){
$html = 'MAINURL';

}
return $html;
}

Allerdings habe ich das Problem, dass z.b. auf der Startseite, privater Bereich, Warenkorb usw. diese Funktion nicht funktioniert, weil sich die url nicht verändert... Wie könnte ich stattdessen die Sprache ändern eventuell über Session ?

Danny94
26.04.2017, 11:26
<form action="{page_url}" method="get" class="form-horizontal">
{if $content_data.LANGUAGE_ICON}
<div class="form-group">
<label for="language-select">{$txt.title_language}</label>

<!-- ###LANGUAGES_DROPDOWN### = $LANGUAGES_DROPDOWN müsste sein: -->
<select name="language" class="form-control" id="language-select">
{foreach name=language item=language_data from=$content_data.languages_data}
<option value="{$language_data.CODE}"{if $language_data.ID == $content_data.CURRENT_LANGUAGES_ID} selected="selected"{/if}>{$language_data.NAME}</option>
{/foreach}
</select>
<!-- ###LANGUAGES_DROPDOWN### ende -->

</div>
{/if}
</form>

So macht es Gambio (mit dem Dropdownmenu oben), versteh aber nicht wie das funktioniert. Wenn ich das umschreiben könnte auf mein Beispiel.

Danny94
26.04.2017, 13:30
Ok tut mir Leid für die ganzen Posts aber ich habe jetzt die Lösung dafür:


{if {momurl}}
{if $smarty.session.language == german}
<div id="languageflags">
<a class="germanflag" href="{page_url}"><b>DE</b></a>
<a class="italianflag" href="{momurl}"><b>IT</b></a>
</div>
{else}
<div id="languageflags">
<a class="germanflag" href="{momurl}"><b>DE</b></a>
<a class="italianflag" href="{page_url}"><b>IT</b></a>
</div>
{/if}
{else}
<div id="languageflags">
<a class="germanflag" href="{cururl}?language=de"><b>DE</b></a>
<a class="italianflag" href="{cururl}?language=it"><b>IT</b></a>
</div>

{/if}

momurl von oben, cururl das selbe wie beim anderen Thread von mir. Hier nochmal:


function smarty_function_cururl($params, &$smarty)
{


$seoBoost = MainFactory::create_object('GMSEOBoost', [], true);
$languageCode = new LanguageCode(new StringType(strtoupper($_SESSION['language_code'])));
$url = '';
$html = '';
$robots = 'index,follow';

$requestUri = gm_get_env_info('REQUEST_URI');
$getParams = parse_url($requestUri, PHP_URL_QUERY);
parse_str($getParams, $getArray);
$getArray = array_keys($getArray);

$languageProvider = MainFactory::create('LanguageProvider', StaticGXCoreLoader::getDatabaseQueryBuilder());
$activeCodes = $languageProvider->getActiveCodes();


if(isset($GLOBALS['actual_products_id']) && !empty($GLOBALS['actual_products_id']))
{
/** @var ProductReadService $productReadService */
$productReadService = StaticGXCoreLoader::getService('ProductRead');
$product = $productReadService->getProductById(new IdType((int)$GLOBALS['actual_products_id']));

if($seoBoost->boost_products)
{
$url = xtc_href_link($seoBoost->get_boosted_product_url($GLOBALS['actual_products_id']));
}
else
{
try
{
$productLinkParams = xtc_product_link($GLOBALS['actual_products_id'], $product->getName($languageCode),
$product->getUrlKeywords($languageCode),
$_SESSION['languages_id']);
}
catch(InvalidArgumentException $e)
{
$productLinkParams = xtc_product_link($GLOBALS['actual_products_id'], '', '',
$_SESSION['languages_id']);
}

$url = xtc_href_link(FILENAME_DEFAULT, $productLinkParams);
}

if($robots === 'index,follow' && $activeCodes->count() > 1)
{
foreach($activeCodes as $code)
{
$langCode = new LanguageCode(new StringType($code->asString()));
$languageId = $languageProvider->getIdByCode($langCode);

if($languageId != $_SESSION['languages_id'])
{
if($seoBoost->boost_products)
{
$altUrl = xtc_href_link($seoBoost->get_boosted_product_url($GLOBALS['actual_products_id'], '',
$languageId));
}
else
{
try
{
$productLinkParams = xtc_product_link($GLOBALS['actual_products_id'],
$product->getName($langCode),
$product->getUrlKeywords($langCode), $languageId);
}
catch(InvalidArgumentException $e)
{
continue;
}

$altUrl = xtc_href_link(FILENAME_DEFAULT, $productLinkParams);
}

if($altUrl !== $url)
{

if($html === '')
{
$html .= htmlspecialchars($url);
}
}
}
}
}
}
elseif(isset($_GET['cat']) && isset($GLOBALS['current_category_id']) && !empty($GLOBALS['current_category_id']))
{
/** @var CategoryReadService $categoryReadService */
$categoryReadService = StaticGXCoreLoader::getService('CategoryRead');
$category = $categoryReadService->getCategoryById(new IdType((int)$GLOBALS['current_category_id']));

if($seoBoost->boost_categories)
{
$url = xtc_href_link($seoBoost->get_boosted_category_url($GLOBALS['current_category_id']));
}
else
{
try
{
$categoryLinkParams = xtc_category_link($GLOBALS['current_category_id'],
$category->getName($languageCode),
$category->getUrlKeywords($languageCode),
$_SESSION['languages_id']);
}
catch(InvalidArgumentException $e)
{
$categoryLinkParams = xtc_category_link($GLOBALS['current_category_id'], '', '',
$_SESSION['languages_id']);
}

$url = xtc_href_link(FILENAME_DEFAULT, $categoryLinkParams);
}

if($robots === 'index,follow' && $activeCodes->count() > 1)
{
foreach($activeCodes as $code)
{
$langCode = new LanguageCode(new StringType($code->asString()));
$languageId = $languageProvider->getIdByCode($langCode);

if($languageId != $_SESSION['languages_id'])
{
if($seoBoost->boost_categories)
{
$altUrl = xtc_href_link($seoBoost->get_boosted_category_url($GLOBALS['current_category_id'],
$languageId));
}
else
{
try
{
$categoryLinkParams = xtc_category_link($GLOBALS['actual_products_id'],
$category->getName($langCode),
$category->getUrlKeywords($langCode), $languageId);
}
catch(InvalidArgumentException $e)
{
continue;
}

$altUrl = xtc_href_link(FILENAME_DEFAULT, $categoryLinkParams);
}


if($altUrl !== $url)
{
if($html === '')
{
$html .= htmlspecialchars($url);
}

}
}
}
}

}
elseif(isset($_GET['coID']) && $activeCodes->count() > 1)
{
$coID = (int)$_GET['coID'];

if($seoBoost->boost_content)
{
$contentId = $seoBoost->get_content_id_by_content_group($coID);
$url = xtc_href_link($seoBoost->get_boosted_content_url($contentId));
}
else
{
$url = xtc_href_link(FILENAME_CONTENT, 'coID=' . $coID);
}

if($robots === 'index,follow' && $activeCodes->count() > 1)
{
foreach($activeCodes as $code)
{
$langCode = new LanguageCode(new StringType($code->asString()));
$languageId = $languageProvider->getIdByCode($langCode);

if($languageId != $_SESSION['languages_id'])
{
if($seoBoost->boost_content)
{
$contentId = $seoBoost->get_content_id_by_content_group($coID, $languageId);
$altUrl = xtc_href_link($seoBoost->get_boosted_content_url($contentId, $languageId));
}
else
{
$altUrl = xtc_href_link(FILENAME_CONTENT, 'coID=' . $coID);
}


if($altUrl !== $url)
{
if($html === '')
{
$html .= htmlspecialchars($url);
}

}
}
}
}
}


//$this->html_output_array['alternateurlcheck'] = $html;

return $html;


}

Edit:
Das einzige Problem hierbei noch ist, SEO. Denn dynamische Parameter hat google nicht gerne.
Aber jene betroffenen Seiten bis auf der Startseite sind für Google sowieso nicht relevant. Somit sollte man am besten die Startseite mit .htaccess umschreiben.