Я заметил, что существует огромное количество компьютерных языков, основанных на английском. Я предлагаю исправить это путем перевода существующих компьютерных языков на иностранные языки!
- Выберите компьютерный язык, который использует английские ключевые слова / функции
- Выберите любой естественный * язык, кроме английского
- Напишите программу, которая переводит свой собственный исходный код или любую другую программу, написанную с использованием того же набора ключевых слов / функций, на другой язык.
- Опубликовать исходный код и вывод (переведенный код)
Начните свой пост с чего-то вроде:
Бейсик, французский
или же
ОСНОВНОЙ, французский - FONDAMENTAL
Вам не нужно переводить название языка, если вы не хотите, это просто для удовольствия!
Вам не нужно переводить все ключевые слова / функции на выбранном вами языке, только те, которые вы фактически используете в своем исходном коде. Например, в PHP тысячи, поэтому вам не нужно переводить их все! Кроме того, если вы используете какие-либо комментарии, пожалуйста, сделайте все возможное, чтобы перевести их тоже! После завершения вашей программы не должно быть узнаваемых английских слов, если они не подходят для иностранного языка. Слова в строках также должны быть переведены (то есть ваша переведенная программа больше не будет работать с исходным кодом на английском языке, даже если она может быть запущена!). Надеюсь, ваша программа будет иметь какой-то смысл для программиста, который говорит на другом языке!
Например, if () {} elseif () {} else {}
может стать si () {} sinonsi () {} sinon {}
по-французски! Если вы переводили в Perl elsif
на французский язык, может быть , вы бы бросить второй n
способ , второй e
будет упал на английском языке: sinosi
. Во французском языке еще бы более вероятно , будет Autre но альтернатива Sinon ( или же , в противном случае ) чувствует себя лучше для меня!
Будь креативным! Попробуйте запечатлеть ощущение как компьютера, так и естественных языков! Такие языки, как Brainfuck, CJam и т. Д., В которых нет английских токенов, не могут быть использованы. Такие языки, как BASIC или COBOL, гораздо более подходящие. Используйте значимые имена переменных и переводите их тоже, если ваш язык не поддерживает имена переменных, которые могут быть английскими словами.
Вы можете опубликовать несколько ответов, по одному на каждую комбинацию компьютера / естественного языка. Вы не можете использовать библиотеку или внешний инструмент для перевода! Ваш код должен делать перевод сам, а не вызывать что-то еще, что делает перевод! Это не Код Гольф! Если ваша программа принимает какие-либо данные, это должен быть только собственный исходный код, если она читает с диска, это может быть только исходный файл и т. Д.
* Для целей этой задачи я буду считать эсперанто, ложбан, волапюк, интерлингва и т. Д. Естественными языками. Вы не можете изобретать свой собственный язык для этого испытания!
Я добавил правило, чтобы предотвратить явные ошибки. Вы можете выбрать любое подмножество ключевых слов / функций - даже все из них - для перевода. Ваша программа должна быть в состоянии перевести себя как минимум, т. Е. Если ваш исходный источник содержит слово, print
то добавление в print(42)
любом месте входного кода (не самой вашей программы) все равно должно давать правильные результаты.
Например:
function translate() {
...
}
print(translate());
может стать
fonction traduire() {
...
}
imprimer(traduire());
Если вход изменен на
print(42);
function translate() {
...
}
print(translate());
print(42);
выход должен затем стать
imprimer(42);
fonction traduire() {
...
}
imprimer(traduire());
imprimer(42);
источник
Ответы:
Python, Koine Греческий - Πύθων
Мой любимый язык программирования, на моем любимом иностранном языке - отлично! И не повредит, что имя уже греческое .
Программа переводчика в Python 3 (слава Богу, за поддержку Unicode):
Результаты запуска кода на себя (с большим списком переводов, отредактированным):
Koine Greek 2000 лет, так что переводить термины программирования было весело. Вот несколько моих любимых:
file
)print
)input
)import
)encoding
)code
/replacements
)for ... in
)if ... elif ... else
)re
является ῥλБольшинство слов также можно найти с помощью поиска в Викисловарь .
Некоторые другие существенные особенности:
print
,read
,replace
). Я подозреваю, что древние греки чувствовали бы себя немного глупо, разговаривая с таким компьютером, поэтому я сделал для них все императивы от третьего лица : «он должен печатать», «он должен читать», «он должен заменять».·
).utf
превращается в -ουτφ
который звучит как «ootf», если вы пытаетесь произнести это.Это все еще оставляет желать лучшего по грамматике. Греческий язык гораздо более выражен, чем английский, и мой код недостаточно сложен, чтобы правильно понять все случаи и цифры. Например, ἕκαστον παλαιόν, νέον ἐκ νεόλογοι следует читать ἐκ νεολόγ ων с объектом предлога в родительном падеже. Однако я не собираюсь тратить на это столько времени! Взгляд достаточно греческий (по крайней мере, для неопытного глаза), и высокие периоды добавляют приятное прикосновение. В целом, я очень доволен результатами.
источник
νεόλογοι = [...]
. Можете ли вы добавить пару строк? Нет необходимости для всего списка!Words in strings should be translated too
.Цыпленок , китайский - 鸡
Цыпленок использовать намного сложнее, чем я думал.
Там нет завершающей новой строки. Но финал
chicken
только для обозначения конца этой программы, который может быть заменен пустой строкой.Я использую этот интерпретатор , который печатает дополнительный символ новой строки и не может быть подавлен. Таким образом, выходные данные содержат на одну строку больше, чем исходные, и это может привести к поломке программы Chicken. Я надеюсь, что это не сделает его недействительным.
Он использовал некоторые приемы, такие как получение пустых строк из индекса -1 ввода и обнаружение EOF путем сравнения с пустыми строками. Я также использовал
compare
команду для удаления неиспользуемых элементов в стеке, не заботясь о типе. Они могут не работать с другими переводчиками. И он печатает строку в байтах UTF-8, где другие интерпретаторы могут напрямую поддерживать печать символов Юникода.Используйте эту команду для запуска этого кода:
где довольно странно, первый
file
для ввода, а второй для кода.Вывод (китайцы не используют пробелы между словами):
Эта программа заменяется
h
на鸡
, оставляет новые строки без изменений и игнорирует все остальное.И, как вы видите, он может перевести любую действительную программу Chicken.
источник
C ++, латынь - C Plus Plus
Да, это фактический перевод названия языка. У них не было знака плюс, но они дали нам слово плюс.
Примечания:
const
,enum
,int
, иoperator
не меняются. Теперь они обозначают константу , перечисление , интеграл и оператор ._
качестве разделителя слов, поэтому я использовал интерпункт .Выход:
источник
JavaScript (NodeJS) - иврит
Мой метод кодирования очень похож на программу Python от DLosc : он читает исходный код, имеет список токенов и выполняет поиск и замену.
Это дает следующий вывод:
К сожалению, SE не нравится текст RTL. Я попытался вручную обернуть вышеуказанный блок кода
<pre dir="rtl">
, но он только что был удален. :( Код должен выглядеть примерно так: (скриншот gedit)Несколько замечаний по поводу еврейского текста:
var
, которое я перевел какמש'
«משתנה» (переменная).fs
, аббревиатура от «файловой системы», переводится какמ"ק
первые буквы «מערכת קבצים», показанные выше.toString
. На иврите предлоги - это отдельные буквы, которые ставятся перед словом. Таким образом, если «строка» - это «מחרוזת», то «строка» - это «למחרוזת». Вот почему вfor..in
блокеin
токен содержит пробел, так что он привязывается к следующему слову (word in words
становитсяמילה במילים
).regex
его, он вернул мне ביטוי סדיר, что буквально означает «упорядоченное выражение». Вау! Я сократил его до ביטס"ד, как и JSRegExp
.g
Флаг регулярное выражение переводится как я ע», которая выступает за עולמי, глобальный.new
. Это потому, что на иврите прилагательные (такие как «новый» - «חדש») идут после существительного (например, регулярное выражение). Поэтому вместоnew RegExp()
«RegExp [то есть] new ()».Этот код, конечно, не переводит каждую действительную программу JS. На самом деле, это, вероятно, только переводит это. Но этого достаточно для этого испытания. ;)
Кстати, если вы заинтересованы в иврите, следуйте предложению Hebrew.SE (и голосуйте по вопросам со счетом <10)! (источник: stackexchange.com )
источник
T_PAAMAYIM_NEKUDOTAYIM
покрыты !Perl, PigLatin - erlPay
Во-первых, реальная программа очень короткая, поэтому, чтобы продемонстрировать, как она работает с более длинными разделами текста, я включил некоторые стихи Perl в качестве дополнительного примера ввода / вывода. Поскольку поэзия включена после строки END, она фактически не исполняется.
Фактический алгоритм довольно прост:
Выход от запуска программы на себя:
источник
__DENAY__
. Не должноopenay
иacceptay
быть ,enopay
иceptacay
?Visual Basic .Net, персидский
Я выбрал многословный язык, чтобы было сложнее. Оказывается, мне не нужно было менять грамматику. Персидская форма кода столь же многословна.
Результат требует текстового редактора справа налево.
Я не мог заставить его отображаться правильно здесь. Но если я должен показать это, вот оно.Вот картинка:Примечание: он читает из файла с именем Persian.txt и выводит в code.txt. Я не мог заставить окно консоли писать или читать по-персидски без превращения его в вопросительные знаки. (например, слово из четырех букв превратится в ????)
Примечание:
если вы соедините слова друг с другом на персидском языке, это будет почти нечитаемо, потому что буквы соединяются друг с другом и получают другую форму. Поэтому я должен был разделить их пробелами, что привело к тому, что слова имели пробелы. Слово типа «Импорт» превратилось в وارد کردن, которое является двумя словами.источник
Ява, Немецкий - Ява
Эта программа действительно проста.
Он просто читает файл, указанный в качестве первого аргумента, и заменяет все вхождения английского слова соответствующим немецким переводом.
Я использую регулярное выражение с двумя groups (
([^a-zA-Z\\d:])*
) для сопоставления отдельных элементов с добавленным / префиксом после буквенно-цифрового символа. Это решило проблему с перекрывающимися переводами (англ.List
-> нем.,Liste
Но тогдаListe
бы сталоListee
). Использование$1
/$2
добавляет эти символы обратно и оставляет нам переведенный исходный код.Обновление 1:
Используйте аббревиатуры, такие как
ea
иnbea
т. Д., Чтобы следовать соглашениям об именах Java на немецком языке.Обновление 2:
Теперь использует третий компонент в массиве, чтобы сломаться после их первой замены. Это необходимо для моего хитрого подхода склонения / спряжения.
class
/Klasse
является женщиной на немецком языке иvoid
/nichts
является нейтральной, поэтому я просто пропустил замену последней и заменил позже. Другое редактирование -new
это перевод на русский,neue
потому что я использую его только дляString
женщин.Обновление 3:
Правильно справляться с заглавными буквами, добавляя регистрозависимые регулярные выражения
Это выводит следующее
System.out
:Если у вас есть какие-либо улучшения в коде или переводе, дайте мне знать, и я посмотрю, смогу ли я их реализовать.
источник
/
,
И-
, вероятно , не очень хорошо в идентификаторах.Eingabe/Ausgabe
- может бытьEinaus
?Einaus
было бы возможно, я тоже думаю, но это не правильно.Rein/Raus
Казалось бы, возможно, но опять же просто не хочется хорошего перевода.E/A
или подобное может вызвать проблемы, но они не интерпретируются как регулярное выражение, они только сопоставляются и, таким образом, оставляют регулярное выражение неизменным. (Я могу ошибаться, но это то, что я испытал с регулярными выражениями)Юлия, татарин - Юлия
При этом используется неофициальный латинский алфавит заманалиф для идель-уральского татарского языка, созданный в 2001 году. Однако в 2002 году Российская Федерация отклонила предложение Татарстана сделать заманалиф официальным алфавитом для татарского языка, криминализируя официальное использование любого алфавита. алфавит кроме кириллицы.
В прошлом веке было 5 алфавитов для татарского языка:
Я выбрал Zamanälif, потому что я думаю, что мой дедушка был бы разочарован, если бы я использовал кириллицу. Его первым языком является татарский, и, родившись в 1920-х годах, он научился читать и писать на алфавите иске-имля.
Английский:
татарская:
Я взял пару свобод, чтобы сделать перевод немного чище. Например,
for
сталsaen
, что переводится более буквально на «каждый». Я также не сокращалSüzlek
, что означает «словарь».ukırgaböten
мой перевод дляreadall
,ukırga
(читать) +böten
(все / каждый).başägär
, мой перевод дляelseif
, являетсяbaş
(сокращениеbaşkaça
, означающее «иначе / иначе») +ägär
(если).Если кто-то из PPCG знает татарский язык, вы, вероятно, знаете больше, чем я. Любые предложения будут приветствоваться.
источник
Руст , Белорусский (Ржа)
Программа:
Выход:
источник
DogeScript , испанский - El Código del Perro
DogeScript интерпретируется как JavaScript, поэтому любой допустимый JS является допустимым DogeScript. Перевод, который я здесь привел, на самом деле охватывает всю спецификацию ключевых слов (плюс еще несколько, чтобы охватить слова, используемые в программе).
"Английский":
Испанский:
Вы можете заметить, что я взял несколько свобод в переводе. Это отчасти потому, что мой испанский довольно беден, а отчасти потому, что мне не хватает знаний по испанским мемам.
источник
C #, латинский - C Acutus
Читает файл из аргументов командной строки, записывает в output.txt.
Пример:
Черт, только что видел C ++ латинскую версию ..
источник
s/ToLatin/AdLatinam/
... также, не должноargs
бытьargumenta
(среднее множественное число)?System
Ratio
на латыни? Тогда какое соотношение по латыни?ratio
->ratione/proportio
Рубин, Японский - AkaDama
Ruby по-японски - это rubii (ル ビ ー), что скучно, поэтому я назвал его буквально красным драгоценным камнем .
В ruby переменные и методы не ограничиваются ASCII, поэтому что-то вроде
действительно рубин. Я использую это в максимально возможной степени
для запутываниядля всех ваших баз.Надеюсь, что для разбора рубина можно использовать драгоценные камни, но все же потребовалось несколько уродливых исправлений обезьян.
Вы можете расширить,
TRANS_TABLE
чтобы добавить перевод для большего количества методов. Все, чего нет в таблице, «переводится» на японский язык в зависимости от его произношения (или, скорее, от орфографии), поэтому еда становится becomes あ と («а-а-нолик»).Преобразует целые числа в «очень» практическую запись .
Запустите сам, пропустив некоторые таблицы перевода и т. Д.
или же
становится
источник
HTML5 / Javascript для французского (HTML5 avec le Script au Caoua)
Выход:
источник
JavaScript, французский - CauoaScript
Я знаю, что уже есть ответ на языке JavaScript + французский, но мой использует разные переводы и методы кодирования.
Код довольно прост: он перебирает все слова во входном коде и заменяет их соответствующими французскими словами из
translations
объекта. Если слово отсутствует в списке, оно не изменяется.Французский язык использует « Guillemets » вместо кавычек, поэтому сначала он использует строки. (Да, он использует regu͘͜l̴͝a͘͜͠r͏͏ ̶̸͢e̵͜x̸͝pr̵͞͞e͘͘s̵ś̸̷i͝o̴ns̴͜ для синтаксического анализа строк, поэтому он не всегда работает идеально.) Вот результат при запуске сам по себе:
Вы можете использовать приведенный ниже фрагмент стека, чтобы легко запустить код.
Показать фрагмент кода
источник
Commodore 64 BASIC - боснийский / хорватский / сербский
Это на самом деле заменяет базовые ключевые слова переведенными, так что вы
Можнодолжны использовать их при написании нового кода.Как это устроено?
FOR I=40960 TO 49151:POKE I,PEEK(I):NEXT
Хотя кажется, что эта строка мало что делает, на самом деле она копирует байты из БАЗОВОГО ПЗУ в ОЗУ. Данные, записанные в ПЗУ, хранятся в ОЗУ по тому же адресу.
Последняя строка в программе переключается на RAM копию BASIC:
POKE 1,PEEK(1) AND 254
Адреса памяти 41118-41373 содержат полный список зарезервированных ключевых слов BASIC. Символы ASCII этих слов хранятся в порядке номеров токенов. Бит № 7 последней буквы каждого слова устанавливается для указания конца слова (значение ASCII + 128).
Строки 20-100 содержат переведенные ключевые слова. Строки 110-200 читают ключевые слова в памяти, как описано выше.
источник
PHP - португальский (pt-PT / полу pt-BR)
Это оказалось довольно сложным и гигантским!
Помните, что этот код был создан, чтобы соответствовать самому себе! Может работать частично с другими кодами.
Вывод, переведено:
Я старался максимально уважать грамматику.
Пример прямо в первой строке:
Эхо - это действие, а действия - это глаголы. Все глаголы на португальском заканчиваются на
r
.Перевод
echo
без контекста был быeco
, тогда как в контексте это должно бытьecoar
(«создание эха»).Также у функции
preg_replace_callback
есть уникальная вещь.Действие должно быть первым словом.
В буквальном переводе это было бы
expressão_regular_substitui_executável
, что ужасно переводится! (Это значитreplace the callback using a regular expression
).Поэтому нужно быть особенно внимательным и поменять местами первое и второе слова, что так
substituir_expressão_regular_executável
, что немного лучше.Другие функции, например
count
, остаются безr
детонации порядка (например, если вы были властными).Некоторые слова оказались странными ...
string
значитcorda
, но если бы я перевел это правильно, это было быcadeia contínua/ininterrupta de caracteres
.Чтобы добавить на все это, я также перевел некоторые символы и операторы (
$
,=
,=>
).Спасибо @DLosc за идею перевода
$
на€
.источник
$
, что делал этот язык .Fondamentale Visuale .RETE - Visual Basic .NET, переведенный на итальянский
Программа очень проста (нацелена на сам перевод).
Некоторые моменты:
I / O: это модуль с очевидной функцией, которая должна быть вызвана
грамматика в основном правильная (кажется почти естественной)
положение английского и итальянского слов отличается, поэтому я не мог (легко) написать какую-то функцию, чтобы исправить это, и предпочел статические пары перевода
я соединил императивные глаголы со 2-м человеком, так как в буквальном итальянском переводе они звучат и чувствуют себя не так (как в Windows 8+, говорящей от 1-го человека)
пары перевода запутаны, поэтому английские не переводятся. таким образом, если бы был переводчик, переведенная программа работала бы,я оставил только несколько,"+"
чтобы избежать чрезмерного перевода (многие английские слова содержатся в итальянских, так что в конечном итоге это переводит итальянский на итальянский с дублированием суффиксов)Итальянец, поехали!
Результат на себя:
источник
"Mod" + "ule"
. Попробуйте больше ориентироваться на дух вызова, а не на букву.C, испанский - C
Ввод / вывод через STDIN / STDOUT (использовать
./c-spanish < c-spanish.c
).Если
extra = 0
изменено наextra = 1
, то вывод этой программы по сути является взаимным квин. В противном случае на выходе получается скомпилированная программа на Си, которая работает следующим образомcat
.Необходимы дополнительные пробелы в источнике (так как они заменяются символами в испанской версии).
Слова переведены:
Выход
С
extra = 0
:С
extra = 1
:источник
define
испанское слово? Помните, что ваш код не должен работать на языке оригинала после перевода, только в гипотетически переведенной версии интерпретатора / компилятора.define
- действительно слово по-испански (команда от второго лицаdefinir
)Рубин, Каталонский - Руби
Это довольно короткий код в ruby, так что он не такой представительный, но я был более многословен в именах функций, чтобы показать немного больше. Это упражнение запомнило меня слишком много в университетских классах, где мы использовали подобный псевдокод для «программирования».
Применительно к себе становится:
источник
Eliminat per simplificar codi
значит!Python 3, ложбан
Там, где мне нужно было переставить sumti места, я заключил слова в скобки, например (te tcidu fe)
Код:
И его вывод:
источник
read
просто становится(te tcidu fe)
. Это должно сделать что-то еще?Javascript ES6, эсперанто, osavoskripto
Я взял некоторые свободы с верблюдом и формулировками (я перевел «преобразовать в строку» вместо «в строку»). Я усложню вещи позже, когда у меня будет больше времени.
источник