У нас на одном из проектов используется ЧПУ с применением символьного кода раздела в построении пути(что в принципе не странно). Информация в этот инфоблок периодически импортируется (нестандартный импорт), соответственно появляются новые разделы без символьных кодов. Т.к. гуглоперевод умер (я так понимаю стал платным), а тот же гугл подсказал о существовании bing перевода.
[spoiler]
У меня целью было проставить символьные коды на пол сотни разделов инфоблока при этом с "премодерацией" (просто просматривал корректность).
Собственно сам запрос выглядит так
В ответ получим xml вида:
Собственно в SearchResponse -> Translation -> Results -> TranslationResult -> TranslatedTerm имеем перевод.
Ну и собственно, то что получилось на коленке
Собственно в результате у меня отображается форма с исходным словом и переводом и кнопка ок, в случае чего перевод я могу в поле поправить.
ps еще у bing есть json, soap интерфейсы для работы с api
[spoiler]
У меня целью было проставить символьные коды на пол сотни разделов инфоблока при этом с "премодерацией" (просто просматривал корректность).
Собственно сам запрос выглядит так
$request = "http://api.bing.net/xml.aspx?" . "AppId=" . $bingApiKey //ключ api, как я понял действует на всех сервисах майкрософта . "&Query=" . urlencode($arSection['NAME']) //что переводим . "&Sources=Translation&Version=2.2" //указываем сервис и версию апи . "&Translation.SourceLanguage=ru" //исходный язык . "&Translation.TargetLanguage=en"; //язык на который переводим |
В ответ получим xml вида:
<?xml version="1.0" encoding="utf-8"?> <?pageview_candidate?> <SearchResponse xmlns="http://schemas.microsoft.com/LiveSearch/2008/04/XML/element" Version="2.2"> <Query> <SearchTerms> яблоко </SearchTerms> </Query> <tra:Translation xmlns:tra="http://schemas.microsoft.com/LiveSearch/2008/04/XML/translation"> <tra:Results> <tra:TranslationResult> <tra:TranslatedTerm> Apple </tra:TranslatedTerm> </tra:TranslationResult> </tra:Results> </tra:Translation> </SearchResponse> |
Собственно в SearchResponse -> Translation -> Results -> TranslationResult -> TranslatedTerm имеем перевод.
Ну и собственно, то что получилось на коленке
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); $bingApiKey = 'blablabla'; $IB = 18; if (!CModule::IncludeModule("iblock")) die(); $sec = new CIBlockSection; if ($_REQUEST['translate'] && intval($_REQUEST['ID']) > 0 && strlen($_REQUEST['CODE']) > 0) { $arFilter = array( "IBLOCK_ID" => $IB, "ID" => intval($_REQUEST['ID']), "ACTIVE" => "Y" ); $rsSection = CIBlockSection::GetList(array("SORT" => "ASC"), $arFilter); if ($arSection = $rsSection -> GetNext()) { $arFields = array( "CODE" => strval($_REQUEST['CODE']) ); if (!$sec -> Update($arSection['ID'], $arFields)) echo $sec -> LAST_ERROR; else LocalRedirect('blablabla'); } } $arFilter = array( "IBLOCK_ID" => $IB, "ACTIVE" => "Y" ); $rsSection = CIBlockSection::GetList(array("SORT" => "ASC"), $arFilter); while ($arSection = $rsSection -> GetNext()) { if (strlen($arSection['CODE']) <= 0) { $request = "http://api.bing.net/xml.aspx?" . "AppId=" . $bingApiKey . "&Query=" . urlencode($arSection['NAME']) . "&Sources=Translation&Version=2.2" . "&Translation.SourceLanguage=ru" . "&Translation.TargetLanguage=en"; $content = file_get_contents($request); $content = strtr($content, array('tra:' => '')); $xmlObj = simplexml_load_string($content); //print "<pre>" . print_r($xmlObj, true) . "</pre>"; $code = ToLower(trim(strval($xmlObj -> Translation -> Results -> TranslationResult -> TranslatedTerm))); $code = strtr($code, array(' ' => '-')); ?> <form method="post"> <table> <tr> <td>Город:</td> <td><?=$arSection['NAME'];?><input type="hidden" name="ID" value="<?=$arSection['ID'];?>" /></td> </tr> <tr> <td>Код:</td> <td><input type="text" name="CODE" value="<?=(strlen($arSection['CODE']) ? $arSection['CODE'] : $code);?>" /></td> </tr> </table> <input type="submit" name="translate" value="OK" /> </form> <? } } require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php"); ?> |
Собственно в результате у меня отображается форма с исходным словом и переводом и кнопка ок, в случае чего перевод я могу в поле поправить.
ps еще у bing есть json, soap интерфейсы для работы с api