Content-language: cs
Content-type: text/html; charset=UTF-8
Body:----------cs--
<!--#set var="CONTENT_LANGUAGE" value="cs"
--><!--#set var="TITLE" value="Nelze zpracovat požadavek!"
--><!--#include virtual="include/top.html" -->

    Server nepodporuje akci požadovanou prohlížečem.
   
<!--#include virtual="include/bottom.html" -->
----------cs--

Content-language: de
Content-type: text/html; charset=UTF-8
Body:----------de--
<!--#set var="CONTENT_LANGUAGE" value="de"
--><!--#set var="TITLE" value="Anfrage nicht ausf&uuml;hrbar!"
--><!--#include virtual="include/top.html" -->

    Die vom Browser angeforderte Aktion wird vom Server
    nicht unterst&uuml;tzt.

<!--#include virtual="include/bottom.html" -->
----------de--

Content-language: en
Content-type: text/html; charset=UTF-8
Body:----------en--
<!--#set var="TITLE" value="Cannot process request!"
--><!--#include virtual="include/top.html" -->

    The server does not support the action requested by the browser.
   
<!--#include virtual="include/bottom.html" -->
----------en--

Content-language: es
Content-type: text/html
Body:----------es--
<!--#set var="TITLE" value="&iexcl;No se puede procesar la petici&oacute;n!" -->
<!--#include virtual="include/top.html" -->

    El servidor no soporta la acci&oacute;n
    solicitada por el navegador.

<!--#include virtual="include/bottom.html" -->
----------es--

Content-language: fr
Content-type: text/html; charset=UTF-8
Body:----------fr--
<!--#set var="CONTENT_LANGUAGE" value="fr"
--><!--#set var="TITLE" value="La requ&ecirc;te ne peut &ecirc;tre effectu&eacute;e!"
--><!--#include virtual="include/top.html" -->

    Le serveur n'est pas en mesure d'effectuer l'action
    demand&eacute;e par le navigateur. 

<!--#include virtual="include/bottom.html" -->
----------fr--

Content-language: ga
Content-type: text/html; charset=UTF-8
Body:----------ga--
<!--#set var="TITLE" value="Iarratais dophr&oacute;ise&aacute;ilte!"
--><!--#include virtual="include/top.html" -->

    N&iacute;l taca&iacute;ocht ag an fhreastala&iacute; don gn&iacute;omh
    at&aacute; &aacute; iarraidh ag an mbrabhs&aacute;la&iacute;.

<!--#include virtual="include/bottom.html" -->
----------ga--

Content-language: it
Content-type: text/html; charset=UTF-8
Body:----------it--
<!--#set var="CONTENT_LANGUAGE" value="it"
--><!--#set var="TITLE" value="La richiesta non pu&ograve; essere soddisfatta!"
--><!--#include virtual="include/top.html" -->

    Il server non supporta il tipo di azione richiesta dal browser.

<!--#include virtual="include/bottom.html" -->
----------it--

Content-language: ja
Content-type: text/html; charset=UTF-8
Body:----------ja--
<!--#set var="CONTENT_LANGUAGE" value="ja"
--><!--#set var="TITLE" value="Cannot process request!"
--><!--#include virtual="include/top.html" -->

    ブラウザの要求したアクションは、サポートしていません。
   
<!--#include virtual="include/bottom.html" -->
----------ja--

Content-language: ko
Content-type: text/html; charset=UTF-8
Body:----------ko--
<!--#set var="CONTENT_LANGUAGE" value="ko"
--><!--#set var="TITLE" value="요청 처리 실패!"
--><!--#include virtual="include/top.html" -->

    브라우저가 보낸 요청을 이 서버가 지원하지 않습니다.

<!--#include virtual="include/bottom.html" -->
----------ko--

Content-language: nl
Content-type: text/html; charset=UTF-8
Body:----------nl--
<!--#set var="CONTENT_LANGUAGE" value="nl"
--><!--#set var="TITLE" value="Kan vraag niet verwerken!"
--><!--#include virtual="include/top.html" -->

   De server ondersteunt de actie, gevraagd door de browser, niet.

<!--#include virtual="include/bottom.html" -->
----------nl--

Content-language: nb
Content-type: text/html; charset=UTF-8
Body:----------nb--
<!--#set var="CONTENT_LANGUAGE" value="nb"
--><!--#set var="TITLE" value="Kan ikke behandle forspørsel!"
--><!--#include virtual="include/top.html" -->

    Serveren støtter ikke den handlingen som ønskes utført av
    nettleseren.

<!--#include virtual="include/bottom.html" -->
----------nb--

Content-language: pl
Content-type: text/html; charset=UTF-8
Body:----------pl--
<!--#set var="CONTENT_LANGUAGE" value="pl"
--><!--#set var="TITLE" value="&#379;&#261;danie nieobs&#322;ugiwane!"
--><!--#include virtual="include/top.html" -->

    Ten serwer nie obs&#322;uguje &#380;&#261;dania przes&#322;anego przez przegl&#261;dark&#281;.

<!--#include virtual="include/bottom.html" -->
----------pl--

Content-language: pt-br
Content-type: text/html; charset=UTF-8
Body:-------pt-br--
<!--#set var="CONTENT_LANGUAGE" value="pt-br"
--><!--#set var="TITLE" value="A requisi&ccedil;&atilde;o n&atilde;o pode ser processada!"
--><!--#include virtual="include/top.html" -->

   O servidor n&atilde;o suporta a a&ccedil;&atilde;o requisitada pelo
   seu "browser".

<!--#include virtual="include/bottom.html" -->
-------pt-br--

Content-language: pt
Content-type: text/html; charset=ISO-8859-1
Body:----------pt--
<!--#set var="TITLE" value="N&atilde;o posso processar o pedido!"
--><!--#include virtual="include/top.html" -->

	O servidor n&atilde;o suporta a ac&ccedil;&atilde;o pedida pelo
	<i>browser</i>.

<!--#include virtual="include/bottom.html" -->
----------pt--

Content-language: ro
Content-type: text/html; charset=UTF-8
Body:----------ro--
<!--#set var="CONTENT_LANGUAGE" value="ro"
--><!--#set var="TITLE" value="Cererea nu poate fi procesata!"
--><!--#include virtual="include/top.html" -->

    Serverul nu suporta actiunea ceruta de browser.

<!--#include virtual="include/bottom.html" -->
----------ro--

Content-language: ru
Content-type: text/html; charset=UTF-8
Body:----------ru--
<!--#set var="TITLE" value="Запрос не может быть обработан!"
--><!--#include virtual="include/top.html" -->

    Сервер не поддерживает возможностей, необходимых для обработки запроса.

<!--#include virtual="include/bottom.html" -->
----------ru--

Content-language: sr
Content-type: text/html; charset=UTF-8
Body:----------sr--
<!--#set var="CONTENT_LANGUAGE" value="sr"
--><!--#set var="TITLE" value="Не могу да обрадим захтев!"
--><!--#include virtual="include/top.html" -->

    Сервер не подржава акцију коју је читач захтевао.

<!--#include virtual="include/bottom.html" -->
----------sr--

Content-language: sv
Content-type: text/html; charset=UTF-8
Body:----------sv--
<!--#set var="CONTENT_LANGUAGE" value="sv"
--><!--#set var="TITLE" value="Kan ikke utf!"
--><!--#include virtual="include/top.html" -->

    Servern st&ouml;djer inte den handling som &ouml;nskades
    av webbl&auml;saren.

<!--#include virtual="include/bottom.html" -->
----------sv--

Content-language: tr
Content-type: text/html; charset=UTF-8
Body:----------tr--
<!--#set var="CONTENT_LANGUAGE" value="tr"
--><!--#set var="TITLE" value="İstek yerine getirilemiyor!"
--><!--#include virtual="include/top.html" -->

    Sunucu, tarayıcı tarafından istenen eylemi desteklemiyor.
   
<!--#include virtual="include/bottom.html" -->
----------tr--

Content-language: zh-cn
Content-type: text/html; charset=UTF-8
Body:----------zh-cn--
<!--#set var="CONTENT_LANGUAGE" value="zh-cn"
--><!--#set var="TITLE" value="无法执行请求！"
--><!--#include virtual="include/top.html" -->

    服务器不支持浏览器请求的动作。
   
<!--#include virtual="include/bottom.html" -->
----------zh-cn--

Content-language: zh-tw
Content-type: text/html; charset=UTF-8
Body:----------zh-tw--
<!--#set var="CONTENT_LANGUAGE" value="zh-tw"
--><!--#set var="TITLE" value="無法執行請求！"
--><!--#include virtual="include/top.html" -->

    伺服器不支援瀏覽器請求的動作。
   
<!--#include virtual="include/bottom.html" -->
----------zh-tw--
