He notado que hay una cantidad desproporcionada de idiomas de computadora basados en inglés. ¡Propongo arreglar esto traduciendo los lenguajes informáticos existentes a idiomas extranjeros!
- Elija un idioma de computadora que use palabras clave / funciones en inglés
- Elija cualquier idioma natural * que no sea inglés
- Escriba un programa que traduzca su propio código fuente o cualquier otro programa escrito usando el mismo subconjunto de palabras clave / funciones al otro idioma
- Publique el código fuente y la salida (el código traducido)
Comienza tu publicación con algo como:
Francés básico
o
BÁSICO, francés - FONDAMENTAL
No tiene que traducir el nombre del idioma si no lo desea, ¡es solo por diversión!
No tiene que traducir todas las palabras clave / funciones en el idioma elegido, solo las que realmente usa en su código fuente. Por ejemplo, PHP tiene miles, por lo que definitivamente no necesita traducirlos a todos. Además, si usa algún comentario, ¡haga lo posible por traducirlo también! Una vez que su programa haya finalizado, no debería haber palabras en inglés reconocibles, a menos que sean apropiadas para el idioma extranjero. Las palabras en cadenas también deben traducirse (lo que significa que su programa traducido ya no funcionará en el código fuente en inglés, ¡incluso si pudiera ejecutarse!). ¡Esperemos que su programa tenga algún tipo de sentido para un programador que hable el otro idioma!
Por ejemplo, if () {} elseif () {} else {}
podría convertirse si () {} sinonsi () {} sinon {}
en francés! Si estaba traduciendo Perl elsif
al francés, tal vez te cae el segundo n
la forma en que el segundo e
se deja caer en Inglés: sinosi
. En francés lo demás sería más probable es que sea autre pero la alternativa sinon ( o de lo contrario , de lo contrario ) se siente más agradable para mí!
¡Ser creativo! ¡Intenta capturar la sensación de la computadora y los lenguajes naturales! No se pueden usar idiomas como Brainfuck, CJam, etc. que no tienen tokens en inglés. Idiomas como BASIC o COBOL son mucho más adecuados. Utilice nombres de variables significativos y también los traduzca a menos que su idioma no admita nombres de variables que puedan ser palabras en inglés.
Puede publicar múltiples respuestas, una para cada combinación de computadora / lenguaje natural. ¡No puede usar una biblioteca o una herramienta externa para hacer la traducción! ¡Su código debe hacer la traducción en sí, no llamar a otra cosa que haga la traducción! ¡Esto no es Code Golf! Si su programa toma alguna entrada, solo debe ser su propio código fuente, si lee del disco, solo puede ser el archivo fuente, etc.
* A los fines de este desafío, consideraré el esperanto, el lojban, el volapük, el interlingua, etc., como idiomas naturales. ¡No puedes inventar tu propio idioma para este desafío!
He agregado una regla para evitar quines explícitos. Puede elegir cualquier subconjunto de palabras clave / funciones, incluso todas, para traducir. Su programa debe ser capaz de traducirse como mínimo, es decir, si su fuente original incluye la palabra, print
entonces agregar print(42)
cualquier parte al código de entrada (no su propio programa) aún debería producir los resultados correctos.
Por ejemplo:
function translate() {
...
}
print(translate());
podría convertirse
fonction traduire() {
...
}
imprimer(traduire());
Si la entrada se cambia a
print(42);
function translate() {
...
}
print(translate());
print(42);
la salida debería convertirse
imprimer(42);
fonction traduire() {
...
}
imprimer(traduire());
imprimer(42);
fuente
Respuestas:
Python, griego de Koine - Πύθων
Mi lenguaje de programación favorito, en mi idioma extranjero favorito, ¡perfecto! Y no hace daño que el nombre ya sea griego .
El programa de traducción en Python 3 (gracias a Dios por el soporte nativo de Unicode):
Resultados de ejecutar el código en sí mismo (con la gran lista de traducción redactada):
Koine Greek tiene 2000 años, por lo que fue divertido traducir los términos de programación. Aquí hay algunos de mis favoritos:
file
)print
)input
)import
)encoding
)code
/replacements
)for ... in
)if ... elif ... else
)re
es ῥλLa mayoría de las palabras también se pueden encontrar buscando en Wiktionary .
Algunas otras características destacadas:
print
,read
,replace
). Sospecho que los antiguos griegos se sentirían un poco tontos hablando con la computadora de esta manera, así que los convertí en imperativos en tercera persona : "debe imprimir", "debe leer", "debe reemplazar".·
).utf
convierte enουτφ
--que suena como "ootf" si intenta pronunciarlo.Esto todavía deja mucho que desear gramaticalmente. El griego es un idioma mucho más inflexionado que el inglés, y mi código no es lo suficientemente sofisticado como para tener todos los casos y números correctos. Por ejemplo, ἕκαστον παλαιόν, νέον ἐκ νεόλογοι deben leer ἐκ νεολόγ ων , con el objeto de la preposición en el caso genitivo. Sin embargo, no estoy a punto de poner que mucho tiempo en esto! El aspecto es suficientemente griego (al menos para el ojo inexperto) y los períodos altos agregan un toque agradable. En general, estoy bastante satisfecho con los resultados.
fuente
νεόλογοι = [...]
. ¿Puedes poner solo un par de líneas allí? ¡No hay necesidad de toda la lista!Words in strings should be translated too
.Pollo , chino - 鸡
El pollo es mucho más difícil de usar de lo que pensaba.
No hay una nueva línea final. Pero la final
chicken
es solo para marcar el final de este programa, que se puede reemplazar con una línea vacía.Estoy usando este intérprete , que imprime una nueva línea adicional y no se puede suprimir. Entonces, la salida tiene una línea más que la original, y eso puede hacer que un programa Chicken se rompa. Espero que esto no lo haga inválido.
Utilizó algunos trucos como obtener cadenas vacías del índice -1 de la entrada y detectar EOF comparándolas con cadenas vacías. También usé el
compare
comando para descartar elementos no utilizados en la pila, sin importarme el tipo. Es posible que no funcionen en otros intérpretes. E imprime la cadena como bytes UTF-8, donde otros intérpretes pueden admitir la impresión de caracteres Unicode directamente.Use este comando para ejecutar este código:
donde curiosamente, el primero
file
es para entrada, y el segundo es para el código.La salida (los chinos no usan espacios entre palabras):
Este programa reemplaza
h
con鸡
, deja nuevas líneas no afectadas e ignora todo lo demás.Y como puede ver, puede traducir todos los programas válidos de Chicken.
fuente
C ++, latín - C Plus Plus
Sí, esa es una traducción real del nombre del idioma. No tenían el signo más, pero nos dieron la palabra más.
Notas:
const
,enum
,int
, yoperator
no cambian. Ahora representan constante , enumeratum , integrum y operator ._
dividir las palabras, así que usé interpuntas .Salida:
fuente
JavaScript (NodeJS): hebreo
Mi método para codificar es bastante similar al programa Python de DLosc : lee el código fuente, tiene una lista de tokens y ejecuta buscar y reemplazar.
Esto da el siguiente resultado:
Desafortunadamente, a SE no parece gustarle el texto RTL. Traté de ajustar manualmente el bloque de código anterior
<pre dir="rtl">
, pero simplemente se despojó. :( Se supone que el código se verá así: (captura de pantalla de gedit)Algunas cosas a tener en cuenta sobre el texto hebreo:
var
, queמש'
traduje como , abreviatura de "משתנה" (variable).fs
, un acrónimo de "sistema de archivos", se tradujo comoמ"ק
, las primeras letras de "מערכת קבצים", vistas arriba.toString
. En hebreo, las preposiciones son letras simples que se anteponen a la palabra. Entonces, si "string" es "מחרוזת", "to string" es "למחרוזת". Por eso también en elfor..in
bloque, elin
token incluye el espacio, para que se adjunte a la siguiente palabra (seword in words
convierteמילה במילים
).regex
, me devolvió ביטוי סדיר, que literalmente significa "expresión ordenada". ¡Guauu! Lo abrevié a ביטס"ד, como lo es JSRegExp
.g
bandera de expresiones regulares que traduje como ע ', que significa עולמי, global.new
. Esto se debe a que en hebreo, los adjetivos (como "nuevo" - "חדש") vienen después del sustantivo (como la expresión regular). Entonces, en lugar denew RegExp()
, sería "RegExp [eso es] nuevo ()`.Este código ciertamente no traduce todos los programas JS válidos. De hecho, probablemente solo traduzca este. Pero eso es lo suficientemente bueno para este desafío. ;)
Por cierto, si te interesa el hebreo, ¡sigue la propuesta de Hebrew.SE (y vota las preguntas con una puntuación de <10)! (fuente: stackexchange.com )
fuente
T_PAAMAYIM_NEKUDOTAYIM
cubiertos !Perl, PigLatin - erlPay
Primero, el programa real es muy corto, así que para demostrar cómo se comporta para secciones más largas de texto, incluí algo de Perl Poetry como otro ejemplo de la entrada / salida. Como la poesía se incluye después de la línea FINAL , en realidad no se ejecuta.
El algoritmo real es bastante sencillo:
Salida de ejecutar el programa en sí mismo:
fuente
__DENAY__
. ¿No deberíaopenay
yacceptay
serenopay
yceptacay
?Visual Basic .Net, Persa
Elegí un lenguaje detallado para que fuera más difícil. Resulta que no tuve que cambiar la gramática. La forma persa del código es igual de detallada.
El resultado requiere un editor de texto de derecha a izquierda.
No pude hacer que se muestre correctamente aquí. Pero si tengo que mostrarlo, aquí está.Aquí hay una foto:Nota: Se lee desde un archivo llamado Persian.txt y sale a code.txt. No pude hacer que la ventana de la consola escribiera o leyera persa sin que se convirtiera en signos de interrogación. (por ejemplo, una palabra de cuatro letras se convertiría en ????)
Nota:
Si conecta palabras entre sí en persa, será casi ilegible, porque las letras se conectan entre sí y obtienen una forma diferente. Entonces tuve que separarlos con espacios que resultaron en palabras que tenían espacios. Una palabra como Importaciones se convirtió en وارد کردن, que son dos palabras.fuente
Java, alemán - Java
Este programa es realmente sencillo.
Simplemente lee el archivo dado como primer argumento y reemplaza todas las apariciones de una palabra en inglés con la respectiva traducción al alemán.
Estoy usando una expresión regular con dos grupos (
([^a-zA-Z\\d:])*
) para hacer coincidir elementos individuales antepuestos / seguidos por un carácter no alfanumérico. Esto resolvió el problema con traducciones superpuestas (ing.List
-> ger.Liste
Pero luegoListe
se convertiríaListee
). El uso$1
/$2
agrega esos caracteres y nos deja con un código fuente traducido.Actualización 1:
Use abreviaturas como
ea
,nbea
etc. para seguir las convenciones de nomenclatura de Java en alemán.Actualización 2:
Ahora usa un tercer componente en la matriz para romper después de su primer reemplazo. Esto es necesario para mi enfoque descarado de declinación / conjugación.
class
/Klasse
es femenino en alemán yvoid
/nichts
es neutral, así que me salteé el reemplazo de este último y lo reemplacé más tarde. Otra edición esnew
la traducción a la que recurríneue
porque solo la usoString
, que es femenino.Actualización 3:
Trate adecuadamente la capitalización agregando expresiones regulares que distingan entre mayúsculas y minúsculas.
Esto genera lo siguiente para
System.out
:Si tiene alguna mejora en el código o la traducción, avíseme y veré si puedo implementarla.
fuente
/
,
y-
probablemente no sean buenos en identificadores.Eingabe/Ausgabe
alguna manera,Einaus
¿ tal vez ?Einaus
También sería posible, pero no me parece bien.Rein/Raus
parecería posible también, pero nuevamente no parece una buena traducción.E/A
o algo similar puede causar problemas, pero no se interpretan como una expresión regular, solo se combinan y, por lo tanto , no afectan la expresión regular. (Podría estar equivocado, pero esto es lo que he experimentado con las expresiones regulares)Julia, tártaro - Julia
Esto utiliza el alfabeto no oficial de Zamanälif en latín para İdel-Ural Tatar, establecido en 2001. Sin embargo, en 2002, la Federación de Rusia rechazó la moción de Tatarstán para hacer de Zamanälif el alfabeto oficial para el idioma tártaro, criminalizando el uso oficial de cualquier alfabeto distinto del cirílico.
En el siglo pasado, ha habido 5 alfabetos para el idioma tártaro:
Opté por Zamanälif porque creo que mi abuelo estaría decepcionado si usara cirílico. Su primer idioma es el tártaro y, como nació en la década de 1920, aprendió a leer y escribir en el alfabeto iske imlâ.
Inglés:
Tártaro:
Me tomé un par de libertades para hacer la traducción un poco más limpia. Por ejemplo, se
for
convirtiósaen
, lo que se traduce más literalmente en "cada uno". Tampoco abreviéSüzlek
, lo que significa "diccionario".ukırgaböten
, mi traducción parareadall
, esukırga
(leer) +böten
(todos / todos).başägär
, mi traducción paraelseif
, esbaş
(una abreviatura debaşkaça
, que significa "else / else") +ägär
(if).Si alguien en PPCG conoce a Tártaro, es probable que sepa más que yo. Cualquier sugerencia será bienvenida.
fuente
Óxido , bielorruso (Ржа)
Programa:
Salida:
fuente
DogeScript , español - El Código del Perro
DogeScript se interpreta en JavaScript, por lo que cualquier JS válido es DogeScript válido. La traducción que he dado aquí en realidad abarca toda la especificación de palabras clave (además de algunas más para cubrir las palabras utilizadas en el programa).
"Inglés":
Español:
Puede notar que me he tomado algunas libertades en la traducción. Esto se debe en parte a que mi español es bastante pobre y en parte a mi falta de conocimiento de los memes en español.
fuente
C #, latín - C Acutus
Lee el archivo de la línea de comandos args, escribe en output.txt.
Ejemplo:
Maldición, acabo de ver la versión latina de C ++.
fuente
s/ToLatin/AdLatinam/
... también, ¿no deberíaargs
serargumenta
(neutro plural)?System
Ratio
en latín? Entonces, ¿qué proporción en latín?ratio
->ratione/proportio
Ruby, japonés - AkaDama
Ruby en japonés es rubii (ル ビ ー), lo cual es aburrido, así que lo llamé literalmente gema roja .
En ruby, las variables y los métodos no están restringidos a ASCII, entonces algo como
es valido ruby. Estoy usando esto tanto como sea posible
para ofuscarmeen todas sus bases.Espero que esté bien usar las gemas para analizar el rubí, todavía requiere un parche de mono feo.
Puede ampliar el
TRANS_TABLE
para agregar traducción para más métodos. Todo lo que no está en la tabla se "traduce" al japonés libremente según su pronunciación (o más como ortografía), así que coma convierte en え あ と ("a-ah-toe").Convierte enteros a notación práctica "muy" .
Ejecutar sobre sí mismo, omitiendo algunas tablas de traducción, etc.
o
se convierte
fuente
HTML5 / Javascript al francés (HTML5 con el script au Caoua)
Salida:
fuente
JavaScript, francés - CauoaScript
Sé que ya hay una respuesta de JavaScript + francés, pero la mía usa diferentes traducciones y métodos de codificación.
El código es bastante sencillo: itera a través de todas las palabras en el código de entrada y las reemplaza con su correspondiente palabra francesa del
translations
objeto. Si la palabra no está en la lista, no se cambia.El francés usa « Guillemets » en lugar de comillas, por lo que primero hace que las cadenas usen esos. (Sí, usa regu͘͜l̴͝a͘͜͠r͏͏ ̶̸͢e̵͜x̸͝pr̵͞͞e͘͘s̵ś̸̷i͝o̴ns̴͜ para analizar cadenas, por lo que no siempre funciona perfectamente.) Aquí está la salida cuando se ejecuta sobre sí misma:
Puede usar el Fragmento de pila a continuación para ejecutar fácilmente el código.
Mostrar fragmento de código
fuente
Commodore 64 BASIC - Bosnio / Croata / Serbio
En realidad, esto reemplaza las palabras clave BÁSICAS con las traducidas, por lo que
puededebe usarlos cuando escriba un nuevo código.¿Cómo funciona?
FOR I=40960 TO 49151:POKE I,PEEK(I):NEXT
Aunque parece que esta línea no hace mucho, de hecho copia bytes de la ROM BÁSICA a la RAM. Los datos escritos en una ubicación ROM se almacenan en la RAM en la misma dirección.
La última línea del programa cambia a la copia RAM de BASIC:
POKE 1,PEEK(1) AND 254
Las direcciones de memoria 41118-41373 contienen una lista completa de las palabras clave BASIC reservadas. Los caracteres ASCII de estas palabras se almacenan en orden de número de token. El bit # 7 de la última letra de cada palabra se establece para indicar el final de la palabra (valor ASCII + 128).
Las líneas 20-100 contienen las palabras clave traducidas. Las líneas 110-200 leen las palabras clave en la memoria como se describe anteriormente.
fuente
PHP - Portugués (pt-PT / semi pt-BR)
¡Esto resultó bastante complejo y gigante!
¡Recuerde que este código fue hecho para que coincida consigo mismo! Puede funcionar parcialmente con otros códigos.
Salida traducida:
He tratado de respetar la gramática tanto como sea posible.
Un ejemplo está justo en la primera línea:
El eco es una acción, y las acciones son verbos. Todos los verbos en portugués terminan con
r
.La traducción
echo
sin contexto seríaeco
, mientras que en el contexto tiene que serecoar
('haciendo un eco').Además, la función
preg_replace_callback
tiene una cosa única.La acción debe ser la primera palabra.
¡Traducido literalmente, sería
expressão_regular_substitui_executável
, lo que está terriblemente traducido! (Significareplace the callback using a regular expression
)Por lo tanto, se debe tener especial cuidado e intercambiar la primera y la segunda palabra, por lo que es
substituir_expressão_regular_executável
, lo cual es un poco mejor.Otras funciones, como
count
, se dejan sinr
detonar una orden (como si fuera mandón).Algunas palabras resultaron extrañas ...
string
significacorda
, pero si lo traduje correctamente, lo seríacadeia contínua/ininterrupta de caracteres
.Para añadir todo eso, también he traducido algunos símbolos y operadores (
$
,=
,=>
).Gracias @DLosc para la idea de traducir
$
en€
.fuente
$
, similar a lo que este idioma .Fondamentale Visuale .RETE - Visual Basic .NET, traducido al ITALIANO
El programa es muy simple (destinado a traducirse).
Algunos puntos:
E / S: este es un módulo con una función obvia que se llamará
la gramática es mayormente correcta (se siente casi natural)
la posición de las palabras en inglés e italiano es diferente, por lo que no pude (fácilmente) escribir alguna función para arreglar eso, y preferí los pares de traducción estática
He conjugado verbos imperativos a la 2da persona, ya que en una traducción literal al italiano sonarían y se sentirían mal (tan mal como Windows 8+ hablando en 1d persona)
los pares de traducción están ofuscados para que los ingleses no se traduzcan también. por lo tanto, si hubiera un intérprete, el programa traducido funcionaría,solo dejaría algunos"+"
para evitar la sobretraducción (muchas palabras en inglés están contenidas en las italianas, por lo que terminaría traduciendo italiano al italiano con duplicación de sufijos)Italiano, aquí vamos!
El resultado en sí mismo:
fuente
"Mod" + "ule"
. Intenta apuntar más al espíritu del desafío que a la carta.C, español - C
Entrada / salida a través de STDIN / STDOUT (uso
./c-spanish < c-spanish.c
).Si
extra = 0
se cambia aextra = 1
, entonces la salida de este programa es esencialmente una quine mutua. De lo contrario, la salida es un programa C compilable que funciona comocat
.Se necesitan espacios adicionales en la fuente (ya que se reemplazan con caracteres en la versión en español).
Palabras traducidas:
Salida
Con
extra = 0
:Con
extra = 1
:fuente
define
una palabra española? Recuerde que su código no tiene que funcionar en su idioma original después de ser traducido, solo en una versión hipotética traducida del intérprete / compilador.define
es una palabra en español (comando en segunda persona paradefinir
)Rubí, catalán - Rubí
Es un código bastante corto en ruby, por lo que no es tan representativo, pero he sido un poco más detallado en los nombres de funciones para mostrar un poco más. Este ejercicio me recordó demasiado de las clases universitarias donde utilizamos un seudocódigo similar para "programar".
Aplicado a sí mismo se convierte en:
fuente
Eliminat per simplificar codi
significa!Python 3, Lojban
Cuando necesitaba reordenar lugares de suma, encerraba las palabras entre paréntesis, por ejemplo (te tcidu fe)
Código:
Y su salida:
fuente
read
simplemente se convierte(te tcidu fe)
. ¿Se supone que debe hacer otra cosa?Javascript ES6, esperanto, Ĝavoskripto
Me tomé algunas libertades con el camello y la redacción (traduje 'convertir a cadena' en lugar de 'a cadena'). Lo complicaré más tarde cuando tenga más tiempo.
fuente