Percebi que há um número desproporcional de idiomas de computador com base no inglês. Proponho corrigir isso traduzindo as linguagens de computador existentes para línguas estrangeiras!
- Escolha um idioma de computador que use palavras-chave / funções em inglês
- Escolha qualquer idioma * natural que não seja o inglês
- Escreva um programa que traduza seu próprio código-fonte ou qualquer outro programa escrito usando o mesmo subconjunto de palavras-chave / funções no outro idioma
- Poste o código fonte e a saída (o código traduzido)
Comece sua postagem com algo como:
BASIC, francês
ou
BÁSICO, Francês - FONDAMENTAL
Você não precisa traduzir o nome do idioma, se não quiser, é apenas por diversão!
Você não precisa traduzir todas as palavras-chave / funções no idioma escolhido, apenas as que você realmente usa no seu código-fonte. Por exemplo, o PHP tem milhares, então você definitivamente não precisa traduzir todos eles! Além disso, se você usar algum comentário, faça o possível para traduzi-lo também! Após a conclusão do programa, não haverá palavras em inglês reconhecíveis, a menos que sejam apropriadas para o idioma estrangeiro. Palavras em strings também devem ser traduzidas (o que significa que seu programa traduzido não funcionará mais no código fonte em inglês, mesmo que possa ser executado!). Espero que seu programa faça algum sentido para um programador que fala o outro idioma!
Por exemplo, if () {} elseif () {} else {}
pode ficar si () {} sinonsi () {} sinon {}
em francês! Se você estavam traduzindo Perl de elsif
em francês, talvez você deixar cair o segundo n
a maneira como o segundo e
é descartado em Inglês: sinosi
. Em francês pessoa seria mais provável ser autre mas a alternativa sinon ( ou então , de outra forma ) se sente mais agradável para mim!
Seja criativo! Tente capturar a sensação do computador e das línguas naturais! Idiomas como Brainfuck, CJam etc. que não possuem tokens em inglês não podem ser usados. Idiomas como BASIC ou COBOL são muito mais adequados. Use nomes de variáveis significativos e traduza-os também, a menos que seu idioma não suporte nomes de variáveis que possam ser palavras em inglês.
Você pode postar várias respostas, uma para cada combinação de computador / linguagem natural. Você não pode usar uma biblioteca ou uma ferramenta externa para fazer a tradução! Seu código deve fazer a tradução em si, não chamar outra coisa que faça a tradução! Este não é o Code Golf! Se o seu programa receber alguma entrada, ele deve ser apenas seu próprio código-fonte; se ler do disco, ele poderá ser apenas o arquivo de origem, etc.
* Para os propósitos deste desafio, considerarei o esperanto, o lojban, o volapuque, a interlíngua etc. como línguas naturais. Você não pode inventar seu próprio idioma para este desafio!
Eu adicionei uma regra para evitar quines explícitos. Você pode escolher qualquer subconjunto de palavras-chave / funções - mesmo todas elas - para traduzir. Seu programa deve ser capaz de se traduzir no mínimo, ou seja, se sua fonte original incluir a palavra print
, a adição de print(42)
qualquer lugar ao código de entrada (não o seu próprio programa) ainda deverá produzir os resultados corretos.
Por exemplo:
function translate() {
...
}
print(translate());
pode se tornar
fonction traduire() {
...
}
imprimer(traduire());
Se a entrada for alterada para
print(42);
function translate() {
...
}
print(translate());
print(42);
a saída deve então se tornar
imprimer(42);
fonction traduire() {
...
}
imprimer(traduire());
imprimer(42);
fonte
Respostas:
Python, Koine Grego - Πύθων
Minha linguagem de programação favorita, na minha língua estrangeira favorita - perfeita! E não dói que o nome já seja grego .
O programa tradutor em Python 3 (graças a Deus pelo suporte nativo a Unicode):
Resultados da execução do código em si mesmo (com a grande lista de traduções editada):
O grego koiné tem 2000 anos, por isso foi divertido traduzir termos de programação. Aqui estão alguns dos meus favoritos:
file
)print
)input
)import
)encoding
)code
/replacements
)for ... in
)if ... elif ... else
)re
é ῥλA maioria das palavras também pode ser encontrada pesquisando no Wikcionário .
Algumas outras características importantes:
print
,read
,replace
). Suspeito que os gregos antigos se sentissem um pouco tolos ao falar com o computador dessa maneira, então fiz deles todos imperativos de terceira pessoa : "deve ser impresso", "deve ser lido", "deve ser substituído".·
).utf
transforma em -ουτφ
que soa como "ootf" se você tentar pronunciá-lo.Isso ainda deixa muito a desejar em termos gramaticais. O grego é um idioma muito mais flexionado que o inglês, e meu código não é suficientemente sofisticado para acertar todos os casos e números. Por exemplo, ἕκαστον παλαιόν, νέον ἐκ νεόλογοι deve ler ἐκ νεολόγ ων , com o objeto da preposição no caso genitivo. No entanto, eu não estou prestes a colocar que muito tempo para isso! A aparência é suficientemente grega (pelo menos para os olhos destreinados) e os períodos altos dão um toque agradável. Em suma, estou bastante satisfeito com os resultados.
fonte
νεόλογοι = [...]
. Você pode colocar apenas algumas linhas lá? Não há necessidade de toda a lista!Words in strings should be translated too
.Frango , chinês - 鸡
Frango é muito mais difícil de usar do que eu pensava.
Não há uma nova linha à direita. Mas a final
chicken
é apenas para marcar o final deste programa, que pode ser substituído por uma linha vazia.Estou usando esse intérprete , que imprime uma nova linha extra e não pode ser suprimida. Portanto, a saída tem mais uma linha que a original, e isso pode fazer com que um programa Chicken seja interrompido. Espero que isso não o torne inválido.
Ele usou alguns truques, como obter cadeias vazias do índice -1 da entrada e detectar EOF comparando com cadeias vazias. Também usei o
compare
comando para descartar itens não utilizados na pilha, sem me preocupar com o tipo. Eles podem não funcionar em outros intérpretes. E imprime a sequência como bytes UTF-8, onde outros intérpretes podem suportar a impressão direta de caracteres Unicode.Use este comando para executar este código:
onde, estranhamente, o primeiro
file
é para entrada e o segundo é para o código.A saída (os chineses não usam espaços entre as palavras):
Este programa substitui
h
por鸡
, deixa novas linhas não afetadas e ignora todo o resto.E, como você vê, pode traduzir todos os programas válidos de frango.
fonte
C ++, latino - C Plus Plus
Sim, essa é uma tradução real do nome do idioma. Eles não tinham o sinal de mais, mas nos deram a palavra mais.
Notas:
const
,enum
,int
, eoperator
não mudam. Eles agora representam constante , enumeratum , integrum e operator ._
como um divisor de palavras, então usei interpontos .Resultado:
fonte
JavaScript (NodeJS) - hebraico
Meu método de codificação é bastante semelhante ao programa Python do DLosc : ele lê o código-fonte, tem uma lista de tokens e executa a busca e substituição.
Isso fornece a seguinte saída:
Infelizmente, o SE parece não gostar de texto RTL. Tentei envolver manualmente o bloco de código acima
<pre dir="rtl">
, mas ele foi removido. :( O código deve ficar assim: (captura de tela do gedit)Algumas coisas a serem observadas sobre o texto hebraico:
var
, que traduzi comoמש'
, abreviação de "משתנה" (variável).fs
, um acrônimo de "sistema de arquivos", foi traduzido comoמ"ק
, as primeiras letras de "מערכת קבצים", vistas acima.toString
. Em hebraico, preposições são letras únicas que são anexadas à palavra. Portanto, se "string" for "מחרוזת", "to string" será "למחרוזת". É também por isso que, nofor..in
bloco, oin
token inclui o espaço, para que ele seja anexado à próxima palavra (word in words
torna-seמילה במילים
).regex
instalei, ele me devolveu o ביטוי סדיר, que literalmente significa "expressão ordenada". Uau! Abreviei para ביטס"ד, comoRegExp
é o JS .g
bandeira do regex que eu traduzi como ע ', que significa עול .י, global.new
. Isso ocorre porque, em hebraico, adjetivos (como "novo" - "חדש") vêm após o substantivo (como regex). Então, ao invés denew RegExp()
, seria "RegExp [que é] novo ()`.Esse código certamente não traduz todos os programas JS válidos. De fato, provavelmente traduz apenas este. Mas isso é bom o suficiente para esse desafio. ;)
A propósito, se você está interessado em hebraico, siga a proposta Hebrew.SE (e vote em perguntas com uma pontuação <10)! (fonte: stackexchange.com )
fonte
T_PAAMAYIM_NEKUDOTAYIM
cobertos !Perl, PigLatin - erlPay
Primeiro, o programa atual é muito curto, portanto, para demonstrar como ele se comporta em seções mais longas do texto, incluí alguma Poesia Perl como um exemplo adicional da entrada / saída. Como a poesia é incluída após a linha END , ela não é executada.
O algoritmo real é bastante direto:
Saída da execução do programa em si mesmo:
fonte
__DENAY__
. Não deveriaopenay
eacceptay
serenopay
eceptacay
?Visual Basic .Net, persa
Eu escolhi uma linguagem detalhada para que fosse mais difícil. Acontece que eu não precisei mudar a gramática. A forma persa do código é igualmente detalhada.
O resultado requer um editor de texto da direita para a esquerda.
Não consegui exibir corretamente aqui. Mas se eu tiver que exibi-lo, aqui está.Aqui está uma foto:Nota: Ele lê de um arquivo chamado Persian.txt e gera para code.txt. Eu não conseguia fazer a janela do console escrever ou ler persa sem ela se transformar em pontos de interrogação. (por exemplo, uma palavra de quatro letras se transformaria em ????)
Nota:
Se você conectar palavras em persa, será quase ilegível, porque as letras se conectam e obtêm uma forma diferente. Então eu tive que separá-los com espaços, o que resultou em palavras com espaços. Uma palavra como Importação se transformou em وارد کردن, que é duas palavras.fonte
Java, alemão - Java
Este programa é realmente simples.
Ele apenas lê o arquivo fornecido como o primeiro argumento e substitui todas as ocorrências de uma palavra em inglês pela respectiva tradução em alemão.
Estou usando uma expressão regular com dois groups (
([^a-zA-Z\\d:])*
) para corresponder itens individuais anexados / seguidos por um caractere não alfanumérico. Isso resolveu o problema com traduções sobrepostas (eng.List
-> ger.,Liste
Mas depoisListe
se tornariaListee
). Usando$1
/$2
adiciona esses caracteres de volta e nos deixa com um código-fonte traduzido.Atualização 1:
Use abreviaturas como
ea
,nbea
etc. seguir convenções de nomenclatura de Java em alemão.Atualização 2:
Agora usa um terceiro componente na matriz para quebrar após a primeira substituição. Isso é necessário para minha abordagem barata de declinação / conjugação.
class
/Klasse
é do sexo feminino em alemão evoid
/nichts
é neutro, então pulei a substituição do último e o substituí mais tarde. Outra edição foinew
traduzida para a traduçãoneue
porque eu a uso apenasString
, o que é feminino.Atualização 3:
Lide adequadamente com letras maiúsculas adicionando expressões regulares que diferenciam maiúsculas de minúsculas.
Isso gera o seguinte para
System.out
:Se você tiver alguma melhoria no código ou na tradução, avise-me e vejo se posso implementá-las.
fonte
/
,
E-
provavelmente não são bons em identificadores.Eingabe/Ausgabe
alguma forma - talvezEinaus
?Einaus
também seria possível, mas não parece certo.Rein/Raus
parece possível, mas novamente não parece uma boa tradução.E/A
ou semelhante pode causar problemas, mas eles não são interpretados como uma expressão regular, são apenas correspondentes e, portanto, não afetam a expressão regular. (Eu posso estar errado, mas é isso que eu tenho experimentado com expressões regulares)Julia, Tártaro - Julia
Isso usa o alfabeto Zamanälif não oficial, baseado em latim, para o İdel-Ural Tatar, estabelecido em 2001. No entanto, em 2002, a Federação Russa derrubou moção do Tartaristão para tornar Zamanälif o alfabeto oficial do idioma tártaro, criminalizando o uso oficial de qualquer alfabeto diferente de cirílico.
No século passado, houve 5 alfabetos para o idioma tártaro:
Optei por Zamanälif porque acho que meu avô ficaria desapontado se eu usasse cirílico. Sua primeira língua é tártaro e, tendo nascido na década de 1920, aprendeu a ler e escrever no alfabeto iske imlâ.
Inglês:
Tártaro:
Tomei algumas liberdades para tornar a tradução um pouco mais limpa. Por exemplo,
for
tornou-sesaen
, que se traduz mais literalmente em "cada". Também não abrevieiSüzlek
, o que significa "dicionário".ukırgaböten
, minha tradução parareadall
, éukırga
(ler) +böten
(todos / todos).başägär
, minha tradução paraelseif
, ébaş
(uma abreviação debaşkaça
, que significa "else / else") +ägär
(if).Se alguém no PPCG conhece o Tatar, você provavelmente sabe mais do que eu. Todas as sugestões serão bem-vindas.
fonte
Ferrugem , bielorrusso (Ржа)
Programa:
Resultado:
fonte
DogeScript , Espanhol - El Código del Perro
DogeScript é interpretado como JavaScript, portanto, qualquer JS válido é DogeScript válido. A tradução que eu dei aqui realmente abrange toda a especificação de palavras-chave (mais algumas para cobrir as palavras usadas no programa).
"Inglês":
Espanhol:
Você pode perceber que tomei algumas liberdades na tradução. Isso ocorre parcialmente porque meu espanhol é bastante pobre e parcialmente porque meu conhecimento de memes no idioma espanhol está ausente.
fonte
C #, latim - C Acutus
Lê o arquivo da linha de comando args e grava em output.txt.
Exemplo:
Caramba, acabei de ver a versão latina do C ++ ..
fonte
s/ToLatin/AdLatinam/
... também, não deveriaargs
serargumenta
(plural neutro)?System
Ratio
em latim? Então, qual é a proporção em latim?ratio
->ratione/proportio
Rubi, japonês - AkaDama
Rubi em japonês é rubii (ル ビ ー), que é chato, então o nomeei literalmente de gema vermelha .
Em ruby, variáveis e métodos não estão restritos ao ASCII, portanto, algo como
é um ruby válido. Estou usando isso o máximo possível
para ofuscartodas as suas bases.Espero que esteja tudo bem em usar as gemas para analisar ruby, ainda é necessário alguns remendos de macaco feios.
Você pode expandir
TRANS_TABLE
para adicionar tradução para mais métodos. Tudo o que não está na tabela é "traduzido" para o japonês com base em sua pronúncia (ou mais como ortografia); portanto, comer se torna え あ と ("a-ah-toe").Converte números inteiros em uma notação prática "muito" .
Execute sozinho, omitindo algumas tabelas de tradução etc:
ou
torna-se
fonte
HTML5 / Javascript para francês (HTML5 com o Script no Caoua)
Resultado:
fonte
JavaScript, Francês - CauoaScript
Eu sei que já existe uma resposta JavaScript + francês, mas a minha usa diferentes traduções e métodos de codificação.
O código é bem direto: itera através de todas as palavras no código de entrada e as substitui pela palavra francesa correspondente do
translations
objeto. Se a palavra não estiver listada, ela não será alterada.Francês usa « Guillemets » em vez de aspas, portanto, primeiro, as strings usam essas. (Sim, ele usa regu͘͜l̴͝a͘͜͠r͏͏ ̶̸͢e̵͜x̸͝pr̵͞͞e͘͘s̵ś̸̷i͝o̴ns̴͜ para analisar cadeias de caracteres, para que nem sempre funcione perfeitamente.) Aqui está a saída quando executada sozinha:
Você pode usar o snippet de pilha abaixo para executar facilmente o código.
Mostrar snippet de código
fonte
Commodore 64 BASIC - Bósnio / Croata / Sérvio
Na verdade, isso substitui as palavras-chave BASIC pelas traduzidas, para que você
podedeve usá-los quando você escreve um novo código.Como funciona?
FOR I=40960 TO 49151:POKE I,PEEK(I):NEXT
Embora pareça que essa linha não faça muito, na verdade copia bytes da ROM BASIC para a RAM. Os dados gravados em um local da ROM são armazenados na RAM no mesmo endereço.
A última linha do programa muda para a cópia RAM do BASIC:
POKE 1,PEEK(1) AND 254
Os endereços de memória 41118-41373 contêm uma lista completa das palavras-chave BASIC reservadas. Os caracteres ASCII dessas palavras são armazenados em ordem de número de token. O bit 7 da última letra de cada palavra é definido para indicar o final da palavra (valor ASCII + 128).
As linhas 20 a 100 contêm as palavras-chave traduzidas. As linhas 110-200 leem as palavras-chave na memória, conforme descrito acima.
fonte
PHP - Português (pt-PT / semi-pt-BR)
Isso acabou sendo bastante complexo e gigante!
Lembre-se de que este código foi criado para corresponder a si mesmo! Pode funcionar parcialmente com outros códigos.
Saída, traduzida:
Eu tentei respeitar a gramática o máximo possível.
Um exemplo está na primeira linha:
Eco é uma ação, e ações são verbos. Todos os verbos em português terminam com
r
.Traduzir
echo
sem contexto seriaeco
, enquanto no contexto tem que serecoar
('fazer um eco').Além disso, a função
preg_replace_callback
tem uma coisa única.A ação deve ser a primeira palavra.
Traduzido literalmente, seria
expressão_regular_substitui_executável
, o que é terrivelmente traduzido! (Significareplace the callback using a regular expression
)Portanto, deve-se tomar um cuidado especial e trocar a primeira e a segunda palavras, assim é
substituir_expressão_regular_executável
, o que é um pouco melhor.Outras funções, como
count
, ficam semr
detonar um pedido (como se você estivesse sendo mandão).Algumas palavras ficaram estranhas ...
string
significacorda
, mas se eu traduzisse corretamente, seriacadeia contínua/ininterrupta de caracteres
.Para adicionar em tudo isso, eu também traduzido alguns símbolos e operadores (
$
,=
,=>
).Obrigado @DLosc pela ideia de traduzir
$
para€
.fonte
$
, semelhante ao que esse idioma fez.Fondamentale Visuale .RETE - Visual Basic .NET, traduzido para ITALIANO
O programa é muito simples (destinado a se traduzir).
Alguns pontos:
E / S: este é um módulo com uma função óbvia a ser chamada
a gramática é mais correta (parece quase natural)
a posição das palavras em inglês e italiano é diferente, então eu não poderia (facilmente) escrever alguma função para corrigir isso, e preferir pares de tradução estática
Eu conjuguei verbos imperativos para a 2ª pessoa, pois em uma tradução literal para o italiano eles pareceriam errados (tão errados quanto o Windows 8+ falando na 1ª pessoa)
os pares de tradução são ofuscados para que os ingleses também não sejam traduzidos. portanto, se houvesse um intérprete, o programa traduzido funcionariae só deixei alguns"+"
para evitar a tradução excessiva (muitas palavras em inglês estão contidas em italiano, por isso, acabaria traduzindo italiano para italiano com duplicação de sufixos)Italiano, aqui vamos nós!
O resultado em si mesmo:
fonte
"Mod" + "ule"
. Tente mirar mais no espírito do desafio do que na letra.C, espanhol - C
Entrada / Saída via STDIN / STDOUT (uso
./c-spanish < c-spanish.c
).Se
extra = 0
for alterado paraextra = 1
, então a saída deste programa é essencialmente uma solução mútua. Caso contrário, a saída é um programa C compilável que funciona comocat
.Espaços extras na fonte são necessários (pois são substituídos por caracteres na versão em espanhol).
Palavras traduzidas:
Resultado
Com
extra = 0
:Com
extra = 1
:fonte
define
uma palavra em espanhol? Lembre-se de que seu código não precisa funcionar no idioma original após ser traduzido, apenas em uma versão hipotética traduzida do intérprete / complier.define
é realmente uma palavra em espanhol (segundo comando pessoa pordefinir
)Ruby, catalão - Rubí
É um código bastante curto em ruby, então não é tão representativo, mas eu tenho sido um pouco mais detalhado nos nomes das funções para mostrar um pouco mais. Esse exercício me lembrava demais as aulas da universidade, nas quais usamos pseudocódigo semelhante ao "programa".
Aplicado a si mesmo torna-se:
fonte
Eliminat per simplificar codi
significa!Python 3, Lojban
Onde eu precisava reordenar todos os lugares, coloquei as palavras entre parênteses, por exemplo (te tcidu fe)
Código:
E sua saída:
fonte
read
apenas se torna(te tcidu fe)
. É suposto fazer outra coisa?Javascript ES6, Esperanto, Ĝavoskripto
Tomei algumas liberdades com camelcasing e texto (eu traduzi 'converter para string' em vez de 'para string'). Vou complicar as coisas mais tarde, quando tiver mais tempo.
fonte