@dlangru

Страница 37 из 719
Макс
14.07.2016
09:45:54
походу, я уже этим и занимаюсь. к сожалению(

Mike
14.07.2016
09:46:46
напиши под себя, как тебе надо и ок

Макс
14.07.2016
09:47:16
насчёт того что логика деления на «1/2/5 юзеров» у разных языков своя и не факт что очень декларативная — это понятно, видимо, придётся всё равно встраивать в языковой конфиг какую-то Lua ради этого.

ну, либо плюнуть и запихать оба файла перевода в исходники, чтобы компилировались. чай, не такой уж у меня и нужный другим проект

Google
Oleg
14.07.2016
09:49:39
а можно поиздеваться над русским немного

вместо 1 пользователь 2 пользователя писать количество пользователей: 1,2, N

зато не будет проблемы со сколнениями

Макс
14.07.2016
09:51:11
пусть будут, например, функции вроде таких: assert(_!"X users"(1) == "1 юзер"); assert(_!"X users"(2) == "2 юзера"); assert(_!"X users"(5) == "5 юзеров"); assert(_!"hello world" == "Привет мир, я фраза без аргументов");

а можно поиздеваться над русским немного
Не, ну это уход от проблемы, а не решение)

Кто что скажет на счёт такого API? Дишненько?

Oleg
14.07.2016
09:55:11
мне нравится

Макс
14.07.2016
09:56:07
попробую. если что получится — отпишусь)

Хорошо, другой вопрос. Nested classes каким-то образом наследуются? А то я хотел бы наделать типа-неймспейсов в классе: abstract class Language { class errors { string http_500 = "Internal Server Error"; } // ... } class RussianLanguage: Language { // ? }

#!/usr/bin/rdmd import std.stdio; abstract class Language { class errors { static string http_500 = "Internal Server Error"; } } /// Хороший перевод, все строки на месте class GoodRussian: Language { class errors { static string http_500 = "Внутренняя ошибка сервера"; } } /// Плохой перевод, нет целого раздела errors class BadRussian: Language { } /// Средненький перевод, раздел есть, но в нём нет нужной строки class MiddleRussian: Language { class errors { } } void main() { auto ru = new GoodRussian(); assert(ru.errors.http_500 == "Внутренняя ошибка сервера"); auto ru2 = new BadRussian(); assert(ru2.errors.http_500 == "Internal Server Error"); auto ru3 = new MiddleRussian(); auto s = ru3.errors.http_500; // ошибка компиляции :( } Я думаю, можно замутить что-то с помощью opDispatch() и ручного обхода вверх по своей иерархии.

я сошёл с ума?

Pavel
14.07.2016
10:21:15
выглядит странно

Макс
14.07.2016
10:21:44
но без nested classes будет месиво из слишком многих строк, переводить неудобно :(

Google
Макс
14.07.2016
10:21:56
прям хочется разбить по темам

есть ещё варианты? чтобы менее странные

ну, кроме class Language { static string errors__http_500 = "Internal Server Error"; }

Oleg
14.07.2016
10:35:09
Ребят

тут такая идея появилась

сделать либу, которая будет морфологически правильно формировать русский текст

начать с чисел пока

есть маленький набросок архитектуры

кому интересно?

это можно интегрировать в интернационализацию

просто мы её точно будем делать по работе

Eto
14.07.2016
10:36:33
Интересно. Что и как делать будет?

Oleg
14.07.2016
10:36:43
если тут будут заинтересованные люди, которые захотят помочь делом, то это будет opensource

Макс
14.07.2016
10:36:53
а что такое «морфологически правильно» в широком смысле? склонять научите?

Oleg
14.07.2016
10:36:59
да

например правильно выстраивать фразы типа "нехватает десяти кирпичей"

а не "нехватает 10 кирпич(ей)"

блин... "не хватает" раздельно, да?))

для меня это будет большой челандж

Макс
14.07.2016
10:57:53
выглядит странно
Да, бред всё это, сделаю без вложенности.

Google
Pavel
14.07.2016
10:59:49
https://github.com/petrovich

Oleg
14.07.2016
11:02:55
"для склонения русских имён, фамилий и отчеств по падежам"

а как же остальное всё?

Pavel
14.07.2016
11:04:03
Ну, хотя бы начать с этого

Остальное все - не уверен что это решаемая задача

Oleg
14.07.2016
11:04:24
да ну...

решаемая конечно

числа точно решаемая

а это самая распостранённая проблема, как мне кажется

Pavel
14.07.2016
11:05:02
Ну, в частных случаях да.

в пхп фреймворках есть такой вариант плейсхолдера: i18n("{n} кирпич|{n} кирпича|{n} кирпичей", 42)

Макс
14.07.2016
11:07:02
библиотеки для формирования чисел прописью («одна тысяча триста пятьдесят два кирпича ноль ноль копеек») существуют для других языков, не вижу ничего нерешаемого тут

Pavel
14.07.2016
11:07:21
Строка разбивается по |, далее берется нужная часть в завимисоти от второго параметра.

сделать либу, которая будет морфологически правильно формировать русский текст

Макс
14.07.2016
11:08:01
в пхп фреймворках есть такой вариант плейсхолдера: i18n("{n} кирпич|{n} кирпича|{n} кирпичей", 42)
О, а это для всех языков работает? Можно какой-то не russian-only пример? И не russian+english-only. Иначе и смысла затевать что-то нет

Мерлин
14.07.2016
11:08:24
Pavel
14.07.2016
11:08:52
Вот это утверждение крайне смелое :) Для частных задач можно решения придумать, пожалуйста. Но чтобы прям морфологически формировался вообще любой текст - это имхо фантастика

Ну то есть не костыли, а просто легкая автоматизация очень сложной задачи.

Google
Макс
14.07.2016
11:12:09
я вот не уверен, что там в других языках. вдруг получится так, что усложнение есть, а покрытия нужных ситуаций нет. что в каком-нибудь языке нужно будет условие «делится ли на три, при том что не более тридцати»

Oleg
14.07.2016
11:14:08
русский, английский (украинский, возможно)

ну белорусский

но они (кроме английского) очень похожи и правила схожи

так что базис думаю один может быть

Макс
14.07.2016
11:15:06
ну я вот в розовых мечтах мир захватываю

Oleg
14.07.2016
11:15:07
в итоге получается 2

ну я вот в розовых мечтах мир захватываю
в целом мне без разницы как тут все к этому отнесутся)))) просто это задание моё по работе))

Admin
ERROR: S client not available

Макс
14.07.2016
11:16:07
но согласен, всего не учтёшь. если избран путь с некомпилируемым декларативным конфигом, то да, нужно упрощать.

Oleg
14.07.2016
11:16:14
мне нужно будет формировать автоматически текст, следовательно такая либа мне и моим колегам нужна

в каком она будет виде и как покрывать все случаи это уже третий вопрос

вопрос в том кому здесь ещё она может быть нужна?

Pavel
14.07.2016
11:17:04
но согласен, всего не учтёшь. если избран путь с некомпилируемым декларативным конфигом, то да, нужно упрощать.
Если ты просто через палку перебираешь нужные тебе варианты, то как можно все не учесть?

Макс
14.07.2016
11:17:17
не понял вопроса

Pavel
14.07.2016
11:17:43
Здесь {n,plural,=0{котов нет} =1{есть один кот} one{# кот} few{# кота} many{# котов} other{# кота}}!

Я имею в виду вот тут строка написана специфично для русского, она абсолютно корректна. Если при интернационализции ты задаешь такие правила для каждого языка, то получается все случаи рассмотрены.

Макс
14.07.2016
11:18:50
В английском варианта два, и они определяются через условие n==1. В русском вариантов три, и они определяются через более сложное условие, в котором будет и что-то типа n%10 == 5, и ещё разные проверки. В другом языке может оказаться другой набор вариантов и другой способ выбора варианта.

few и many как здесь делятся?

Google
Макс
14.07.2016
11:19:41
у меня вот самодельный хардкод был такой string russianGenitive(T)(T n, in string one, in string two, in string five=null) if (isIntegral!T) { if (5 <= n && n <= 20) return five ? five : two; else { n = n % 10; if (n == 1) return one; else if (n == 2 || n == 3 || n == 4) return two; else return five ? five : two; } }

конфиг такого не сможет, это должен уметь код

вопрос в том кому здесь ещё она может быть нужна?
Меня вот пока только этот кусо темы волнует, про склонение в зависимости от числительных.

Pavel
14.07.2016
11:26:17
few и many как здесь делятся?
Это сам разработчик решает когда зашивает в строке шаблон. Ведь в зависимости от ситуации few это разное количество.

Макс
14.07.2016
11:27:44
тогда это как-то не про то, по-моему. в зависимости 1/2/5 нужна разная форма, это, по-моему, довольно универсальное правило

Dmitry
14.07.2016
12:10:44
Дык был же модуль грамматики Фомского

вроде бы она именно для этого

чтобы велосипеды не городить

на ней кажется парсеры языка базируются существующие

Pavel
14.07.2016
12:17:29
Ты случайно не путаешь с грамматиками Хомского? )

Dmitry
14.07.2016
12:18:42
Ой да, точно

Oleg
14.07.2016
20:44:49
http://morpher.ru/Demo.aspx чел продаёт такое дело

Dmitry
15.07.2016
10:04:45
Ребят, подскажите, как запрос сформулировать гуглу на инглише. Задача найти растры которые попадают под зону выделениям полигоном. Я разные варианты попробовал с overlapped и что-то все мимо

Макс
16.07.2016
04:15:27
Как вы думаете, чтобы в конфиге-переводе задавать разные формы числительных, достаточно ли будет простых регулярок, чтобы различать числа? По типу такого: ^.*1$ – "%s котёнок" ^.*[^1](2|3|4)$ – "%s котёнка" ^.*(0|1.)$ – "%s котят"

Или тут недостаточная выразительность получится?

В смысле, будут ли потом языки, для которых этого не хватит? Для русского вроде хватает, для английского и подавно, а больше я никаких не знаю. :-/

Dmitry
16.07.2016
08:03:58
А ты контекстно независимую грамматику не смотрел? Как оно будет выглядеть там мне интересно

Макс
16.07.2016
09:09:47
Понятно, что другой. Вопрос, для всех ли языков это можно будет вообще описать регулярками?

Pavel
16.07.2016
09:14:16
Ты регулярками описываешь цифры а не словоформы, так что не очень имеет смысл вопрос

Короче это надо у лингвистов спрашивать

Страница 37 из 719