numbertext / libnumbertext Goto Github PK
View Code? Open in Web Editor NEWNumber to number name and money text conversion libraries in C++, Java, JavaScript and Python & LibreOffice Calc Extension
License: BSD 3-Clause "New" or "Revised" License
Number to number name and money text conversion libraries in C++, Java, JavaScript and Python & LibreOffice Calc Extension
License: BSD 3-Clause "New" or "Revised" License
Hello, as a suggestion, in the web site (I suppose under "about us") you could give a quick example of what problem this language is trying to solve.
I am a bit in the IT and on my first visit on this site I still didn't get what "number to number name conversion" problem is about... I am sure a one-two sentences example, or link to a good wikipedia entry, would help...
Cheers!
[EDIT] I did read the "background" section, but still didn't grasp what the problem is..
In Ukrainian, eurocents should be in the genitive case "центів", not "центов" - just like cents for US dollars.
The ordinal form of zero in Finnish is currently "nolla", while it should be "nollas". It also does not show up in the examples on numbertext.org or the IDE.
Using 64-bit DEB-version of LibreOffice 6.1.0.3, locale in Estonian language.
Checked also https://ask.libreoffice.org/en/question/32783/how-to-use-numbertext-or-moneytext-functions/
Tested also https://ask.libreoffice.org/en/question/1194/convert-numbers-to-english-words/ macro code - did not work in LibreOffice 6.1, quotation marks around cell address, language code or number did not help in formula.
Tried to enter either directly with number or using cell address - always getting error:
=NUMBERTEXT(5)
gives
#VALUE!
or
=NUMBERTEXT(A1,en)
where in A1 is located e.g. number 5, gives
Err:501
Well, checked at https://help.libreoffice.org/Calc/Error_Codes_in_Calc and understood that this function does not respect my separator (comma) and requires semicolon regardless of what is my locale. When used semicolon, will get:
#NAME?
... seems that does not recognize the function.
Same happens with moneytext function.
Also very uncomfortable is to enter language codes when the beginning is same with any other function's beginning.
Also did not find the list of used language codes. To be honest, that =numbertext("help") did not work either - so could not get help.
I have downloaded the calc extension from:
https://extensions.libreoffice.org/en/extensions/show/numbertext-1
The language Marathi is not available in the extension. But it seems to be listed in the github readme.
Hello,
I am trying to transform numbers to words but I do not understand how I can use your solution.
I mean... I have downloaded libnumbertext zip, discovered that there is Soros.py
module and I think I need to use that program in order to transform numbers to words but I have no idea how. How can I call Soros.py
and give it a number and a language and get a string containing the word representation?
Can you please help?!
Finnish ordinal numbers from one million and up are incorrect when the number starts with 1. Examples:
1000000 outputs "ensimmäinenmiljoonas", should be "miljoonas".
1000000000 outputs "ensimmäinenmiljardis", should be "miljardis".
1000000000000 outputs "ensimmäinenbiljoonas", should be "biljoonas".
It appears the documentation for adding new languages is outdated. With the exception of the first step, it seems everything after doesn't make sense.(I'm referring to the doc/addnewlocale.txt. I was trying to add a language and I'm not sure if adding the locale file in the data
directory is sufficient.
I was trying out the addition of text numbers in LibreOffice Calc and found some problems. I haven’t tested any other function supplied by libnumbertext so there may be more.
A distinctive feature of Celtic languages is a set of sound changes that apply to the beginning of words in different grammatical contexts. In Irish there are two of these, called lenition (séimhiú) and eclipsis (urú). Lenition applies to nouns following the numbers 1-6, eclipsis follows 7-10.
Lenition adds an h after b, c, d, f, g, m, p, s & t.
Eclipsis adds letters in front: b → mb, c → gc, d → nd, f → bhf, g → ng, p → bp, t → dt.1
In the Calc context, these changes should apply to nouns like céad (hundred), míle (thousand), milliún (million), billiún (billion), etc.
1-6 chéad / mhíle / mhilliún / billiún2
7-10 gcéad / míle / milliún / billiún2
There is no change after the other tens, e.g. fiche “twenty”, tríocha “thirty”, etc.
A further complication, is that the number one (aon) by itself can mean “any” so it either requires an additional amháin (“only”) after the noun or it should be left out. In the case of large numbers, it’s more natural to just use the noun, e.g. céad = “one hundred”, míle = “one thousand”, milliún = “one million”, dhá chéad = “two hundred”, etc. Aon chéad (or the current aon céad) just look very wrong.
I'm using the online demo. In Polish it spells 75 as "siedemdziesiąt piąty" and 44 as "czterdzieści czwarty". I'm not a language expert but everyone I know says "siedemdziesiąty piąty" and "czterdziesty czwarty". When I try just 70 or 40, the results are correct ("siedemdziesiąty" and "czterdziesty").
(For feminine and neuter forms it would be "siedemdziesiąta piąta" and "siedemdziesiąte piąte" respectively.)
Hi,
I discovered an issue with the funcion for the optional values that returns nothing.
I explain that with an example:
Here are 4 lines of the spanish 'es' language
1$ uno
1 un
([579])(\d\d) $(\100) $2
(\d)(\d\d) $1cientos[ $2]
In the website if you spell the number 531531 the result is:
quinientos treinta y un mil quinientos treinta y uno (correct --> un uno )
Number 231231:
doscientos treinta y uno mil doscientos treinta y uno (incorrect --> uno uno)
This appens bacause the optional function returns ?(31)| and allwais e=true
The issue affects all the languages that have diferent values whit the same number
es - ca - da - gl - hu - lb - nl - sl (at their own way)
Hi!
I'm having trouble creating a rule for Russian money format required by our gvmt: for 1234.56, it must return "one thousand two hundred thirty-three roubles 54 kopecks" - note the number of kopecks is not in text. Could you please advise?
It seems, C++11 regex implementation of Visual C doesn't support \d, \D, see #48. Check and handle this issue by converting these patterns.
Conversion of currency with decimals in Thai Baht seems to ignore the last zero. The regular number conversion handle this correctly.
Example of number conversion, which already handle this correctly:
Example of currency conversion:
Tested with LibreOffice extension which I built myself using latest code 2 days ago. I didn't use the current official release which is almost a year old. I would fix and test the code myself if I know how to test the sorting algorithm without having to build the extension every time. I welcome any advice. Thank you.
Hi.
In Polish lang. numbers from 20 to 29 is wrong converted
20 - is dwadziesty - will be dwudziesty
2X - is dwadzieścia xxxx - will be dwudziesty xxxx
I made test on https://numbertext.github.io/Soros.html
adding this two lines after first 3 lines in section == ordinal ==
correcting wrong polish translation/convertion for range 20-29 (and +N * 100 range too)
"(.)dwadzieścia (.)" $(ordinal \2dwudziesty \3)
(.*)dwadzieścia \2dwudziesty
and second:
Section ordinal is marked as (masculine)? - YES it's correct, it is masculine.
Hello,
It seems that Numbertext 1.0.5 does not work with libreoffice 7.0
Hi, using the demo and in the program, the function convert number 1 to Thai text wrong, both with NUMBERTEXT() and MONEYTEXT().
Example: 11,111.00
Current conversion (wrong) : หนึ่งหมื่น เอ็ด พัน เอ็ด ร้อยสิบเอ็ด
Correct conversion should be : หนึ่งหมื่น หนึ่ง พัน หนึ่ง ร้อยสิบเอ็ด
Problem:
The function converts every "1" after the first digit to "เอ็ด" except "10" digit.
Why it's wrong:
"1" in Thai number can be "หนึ่ง" or "เอ็ด" but most of the time it will be "หนึ่ง"
Please see here for reference and more info.
Hello.
Please support Persian (Farsi) language and Rial currency in next version of this Add-on.
Thank you so much.
Неправильно склоняются слова в укр.языке и неправильный союз, пример 123.78:
сто двадцять три цілий и сімдесят вісім сотий
Правильно:
сто двадцять три цілих і сімдесят вісім сотих
Или без союза:
сто двадцять три цілих сімдесят вісім сотих
As used eg. here:
libnumbertext/src/Numbertext.cxx
Line 28 in 925e638
Workaround to disable the warnings in LO:
https://cgit.freedesktop.org/libreoffice/core/commit/?id=e37e1a7d2007bd6896027b69271774da2568e6f8
Hi!
The word cents has an incorrect form for the values [2-9]1. It should be the same as for $0.01 (цент) instead of центов/центів.
https://numbertext.github.io/#testimonials
LibreOffice extension 1.0.9 (1.0.10 isn't available at extensions.libreoffice.org)
Hi,
when running a numbertext with python3 (as for LibreOffice - here built against system-python which is 3.7.3 currently - and the LO extension installed) I get
/usr/lib/libreoffice/share/extensions/numbertext/pythonpath/org/Numbertext/Soros.py:44: FutureWarning: Possible nested set at position 26
prg = re.sub(r"(^|[\n;])([^\n;#]*#[^\n]*[[]:[^\n:\]]*:][^\n]*)", r"\1#\2", prg)
/usr/lib/libreoffice/share/extensions/numbertext/pythonpath/org/Numbertext/Soros.py:45: FutureWarning: Possible nested set at position 27
prg = re.sub(r"(^|[\n;])#([^\n;#]*#[^\n]*[[]:" + lang.replace("_", "-") + r":][^\n]*)", r"\1\2", prg)
/usr/lib/libreoffice/share/extensions/numbertext/pythonpath/org/Numbertext/Soros.py:73: FutureWarning: Possible nested set at position 1
s2 = re.sub(r"[[]\$(\d\d?|\([^\)]+\))",u"$(\uE00A\uE00A|$\\1\uE00A", s2)
/usr/lib/libreoffice/share/extensions/numbertext/pythonpath/org/Numbertext/Soros.py:74: FutureWarning: Possible nested set at position 1
s2 = re.sub(r"[[]([^\$[\\]*)\$(\d\d?|\([^\)]+\))",u"$(\uE00A\\1\uE00A$\\2\uE00A", s2)
printed on the console, which doesn't really sound very well. A trivial test (=NUMBERTEXT(10)) works, but..
The same happens if you patch the numbertext makefiles to use python3, and thus it it printed during the tests, see for example https://buildd.debian.org/status/fetch.php?pkg=libnumbertext&arch=amd64&ver=1.0.5-3&stamp=1567490482&raw=0
Regards,
Rene
MONEYTEXT wording for UAH currency in Ukrainian language is wrong.
CORRECT: 101,00 = сто одна гривня
CURRENTLY (OpenOffice Extension v.1.0.5.) = сто один гривня
CORRECT: 102,00 = сто дві гривні
CURRENTLY (OpenOffice Extension v.1.0.5.) = сто два гривня
1001000000 results in "mil uno millones" when it should be "mil un millones"
Same problem in a sequence:
31000000 → treinta y un millones [OK]
131000000 → ciento treinta y un millones [OK]
1031000000 → mil treinta y uno millones [ERROR: should be "un"]
10031000000 → diez mil treinta y uno millones [ERROR: should be "un"]
100031000000 → cien mil treinta y uno millones [ERROR: should be "un"]
1000031000000 → un billón treinta y un millones [OK]
An even more clear example ("veintiuno" is incorrect before a name):
21000000 = veintiún millones ✔
121000000 = ciento veintiún millones ✔
1021000000 = mil veintiuno millones ❌
10021000000 = diez mil veintiuno millones ❌
100021000000 = cien mil veintiuno millones ❌
1000021000000 = un billón veintiún millones ✔
I've tried to find a fix with the online IDE without success
Soros.hxx:
/* Soros interpreter (see numbertext.org)
* 2018 (c) László Németh
* License: LGPL/BSD dual license */
#ifndef SOROS_HXX_
#define SOROS_HXX_
#include <iostream>
#include <iterator>
#include <string>
#ifndef _MSC_VER
#include "config.h"
#endif
#ifdef HAVE_BOOST_REGEX_HPP
#include <boost/regex.hpp>
#else
#include <regex>
#endif
is bad. That of course fails when building LibreOffice against a system-libnumbertext because the following happens (Soros.hxx is included by Numbertext.hxx):
In file included from /usr/include/libnumbertext/Numbertext.hxx:8:0,
from /data/rene/git/LibreOffice/master/lingucomponent/source/nu
mbertext/numbertext.cxx:41:
/usr/include/libnumbertext/Soros.hxx:13:10: fatal error: config.h: Datei oder Ve
rzeichnis nicht gefunden
#include "config.h"
^~~~~~~~~~
compilation terminated.
(No such file or directory)
Regards,
Rene
Hi! I'm confused how to download oxt file. Here on github I found none (only the source). On the website of the project clicking on version 1.0.11 yields version 1.0.9.
This is project website: https://numbertext.github.io
This is "download link": https://extensions.libreoffice.org/extensions/numbertext-1/1-0.11/@@download/file/numbertext-1.0.11.oxt
This is not a real download link, it jumps to this webpage: https://extensions.libreoffice.org/en/extensions/show/numbertext-1
On that page are downloadable releases, but the newest is 1.0.9.
So please help me. Thank you.
Calling java -jar numbertext.jar -l nn 16
produces Missing language module: nn
.
It seems that .sor
file for nn
language code is stored as conditional in no.sor
and Numbertext.java
can't handle it.
Hello and thank you for NUMBERTEXT() and MONEYTEXT() Calc functions! They are very handy! But for French language, they do not respect administrative documents official rules. It's now been over 20 years that the French have to use hyphens instead of spaces in all compound numerals therein. Below is an excerpt of the French Republic Official Journal published on December 6, 1990 (see https://www.vjf.cnrs.fr/orthographe/PDF/JODA.pdf page 14). Would some of you be so kind to provide us with an update respecting these rules. Hoping so and thanking you in advance, with kind regards, @4560041.
6 décembre 1990
Journal officiel de la République française
Edition des documents administratifsTrait d'union : on lie par des traits d'union les numéraux formant un nombre complexe, inférieur ou supérieur à cent.
Exemples : elle a vingt-quatre ans, cet ouvrage date de l'année quatre-vingt-neuf, elle a cent-deux ans, cette maison a deux-cents ans, il lit les pages cent-trente-deux et deux-cent-soixante-et-onze, il possède sept-cent-mille-trois-cent-vingt-et-un francs.
Automatic translation
December 6, 1990
Official Journal of the French Republic
Editing of administrative documents
Hyphen: Numerals forming a complex number, less than or greater than one hundred, are linked by hyphens.
Examples: she is twenty-four years old, this work dates from the year eighty-nine, she is one hundred and two years old, this house is two hundred years old, he reads pages one hundred and thirty-two and two hundred seventy-one, he has seven hundred thousand three hundred and twenty-one francs.
Hi
(sorry for my bad english, i'm french)
There's a trouble in french with this 👍
300 € : trois cent euros is wrong
trois cents euros is correct
it's the same with 200, 400 500 ...
Thanx for your fantastic work
William
The .sor files include data for currencies which are no longer in use (some former currencies of Eurozone countries, at least). Is this intentional? If so, should more historical currencies be added?
I haven't read the code (and don't really know where to look), but from simple usage in LibreOffice it seems that there is a special case for '2' in Chinese when used at the start of a 3-digit or more-digit number. For all other cases, like in '123', '132', '20', and '2', it's '二' in Chinese; but in this special case, like '200' and '2345', it's '两' in Chinese.
I'm merely a native speaker, and don't know of any official standard specification, but this special treatment seems misguided to me. '二' and '两' are most synonymous when used for numbers, and the subtle difference is more about colloquial Chinese vs. written Chinese, in my opinion. Also while the use of '两' is OK for cardinal numbers, like '两百三十四' for '234', it's definitely wrong for cardinal numbers, so '第两百三十四‘ is not OK for '234th', and should be '第二百三十四' instead.
So what is the rationale for this special treatment of '2' at the start of a number? If the developers can point the rationale to me, I'll try to find some authoritative evidence to support my point of view above. If there is not a concrete rationale, I would suggest getting rid of this special case and just use '二' for '2' in Chinese everywhere.
Thanks.
Hi, this library would be nicely fit into a PostgreSQL extension.
Any plans to work on this?
Thanks in advance!
I have just noticed your library used in libreoffice 6.1.
I would like to point out that some ordinal spelling for italian are incorrect:
Thanks for your great job
This is a small and specific change
ca.sor has in lines 148 to 158 the following sections :
== feminine ==
1 una
(.*) $(f:|$1)
== masculine ==
1 un
(.*) $1
It would be interesting to insert in fr.sor after line 135 the following sections :
== feminine ==
1 une
(.*) $(f:|$1)
== masculine ==
1 un
(.*) $1
default being masculine ... and modify the == help == section accordingly
thank you for the good work !
p.s. : apparently other latin languages should have this rule (not found in es.sor, found something in it.sor but different from ca.sor ...)
libnumbertext/data/lv.sor
19 de_n_iņpadsmit -> 19 deviņpadsmit
("n" replace with "v")
Hi,
currently packaging libnumbertext for Debian for LibreOffice 6.1.
README says:
License: LGPL/BSD dual-license, 2009-2018 (C) László Németh (nemeth at numbertext dot org)
Numbertext language data (Soros programs):
LGPL/BSD dual-license, 2009-2018 (C) László Németh et al. (see AUTHORS)
Serbian modules:
CC/LGPL/BSD tri-license, 2009 (C) Goran Rakić (grakic at devbase dot net)
CC is mentioned in data/sr.sor as Creative Commons 3.0 Attribution - Share Alike license.
So far OK, but which versions of the LGPL? and which BSD one? (3-clause I assume?). Maybe you even mean the MIT/Expat one? Or is this LGPL-3+ as one can deduce from
and relicensed under GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
in above-mentioned data/sr.sor?
This should be clarified and license headers/COPYING file(s) added.
Regards,
Rene
Looks like terst suite started failing in latest version.
+ cd libnumbertext-1.0.11
+ /usr/bin/make -O -j48 V=1 VERBOSE=1 check
Making check in src
Making check in data
make[1]: Nothing to be done for 'check'.
Making check in tests
/usr/bin/make check-TESTS
make[3]: Entering directory '/home/tkloczko/rpmbuild/BUILD/libnumbertext-1.0.11/tests'
FAIL: es.test
make[3]: Leaving directory '/home/tkloczko/rpmbuild/BUILD/libnumbertext-1.0.11/tests'
make[3]: Entering directory '/home/tkloczko/rpmbuild/BUILD/libnumbertext-1.0.11/tests'
================================================
libnumbertext 1.0.11: tests/test-suite.log
================================================
# TOTAL: 1
# PASS: 0
# SKIP: 0
# XFAIL: 0
# FAIL: 1
# XPASS: 0
# ERROR: 0
.. contents:: :depth: 2
FAIL: es
========
./test.sh: line 13: 3148769 Segmentation fault (core dumped) $SPELLOUT -l $MODULES/$1 $(sed -n 's/ #.*$//;/^[^#]/p' $TESTDIR/$2) > $TEMPDIR/test.out$$
--- ./testSubDir/test.out3148765 2022-11-14 15:08:41.070262260 +0000
+++ ./es.out 2022-11-14 08:09:29.000000000 +0000
@@ -0,0 +1,16 @@
+mil un millones
+mil un billones mil un millones
+treinta y un millones
+ciento treinta y un millones
+mil treinta y un millones
+diez mil treinta y un millones
+cien mil treinta y un millones
+un billón treinta y un millones
+veintiún millones
+ciento veintiún millones
+mil veintiún millones
+diez mil veintiún millones
+cien mil veintiún millones
+un billón veintiún millones
+doscientos treinta y un mil doscientos treinta y uno
+quinientos treinta y un mil quinientos treinta y uno
FAIL es.test (exit status: 1)
============================================================================
Testsuite summary for libnumbertext 1.0.11
============================================================================
# TOTAL: 1
# PASS: 0
# SKIP: 0
# XFAIL: 0
# FAIL: 1
# XPASS: 0
# ERROR: 0
============================================================================
See tests/test-suite.log
============================================================================
make[3]: *** [Makefile:534: test-suite.log] Error 1
make[3]: Leaving directory '/home/tkloczko/rpmbuild/BUILD/libnumbertext-1.0.11/tests'
make[2]: *** [Makefile:642: check-TESTS] Error 2
make[1]: *** [Makefile:707: check-am] Error 2
make: *** [Makefile:452: check-recursive] Error 1
I used NUMBERTEXT for my work and it is very helpful until I tried to use the Arabic language which wasn't supported, I would be grateful if you support it.
I'm here if you want any help with it.
I can see that the language "Marathi" is supported but not "Hindi" that is very similar to Marathi. Please add.
Thanks for https://github.com/Numbertext/libnumbertext!
This is a great tool that I use in my daily activities. I have questions about the use of libnumbertext code in public non-commercial application under the current license. Can you help me with BSD 3-Clause?
Just in case, I will immediately give a description of the program and questions. My program uses the Soros interpreter code for JS completely without changes. The source code of the program uses the git submodule of this repo. The program displays text "= NUMBERTEXT ("
and "var soros = new Soros"
when using it. The program page on the network uses the title "NUMBERTEXT" and "Numbertext".
Currently, the software translate number 1100 in 'onze cents' but 1200 in 'mille deux cents'
For legal purpose i would like to be able to translate 1100 in 'mille cent'.
as stated by the Académie Française ...
Dans l’usage courant, au lieu de mille cent, mille deux cents, etc., on dit plutôt onze cents, douze cents, etc., jusqu’à dix-neuf cents : Onze cents francs, seize cents euros. En revanche, dans la langue écrite, et notamment dans un texte juridique, administratif ou scientifique, on préfèrera les formes : mille cent, mille deux cents, etc. Une somme de mille deux cent cinquante francs. Une superficie de mille cinq cents mètres carrés.
is it possible ?
apparently in fr.sor there is a special rule lines 45 & 46 for this ...
thank you for your help
The help feature for Finnish outputs ordinal numbers incorrectly.
Output: "ordinal: , kahdes, kolmas"
Should be: "ordinal: ensimmäinen, toinen, kolmas"
Please make numbertext usable as a maven dependency.
Hello,
I try to use numbertext.jar as a dependency in a project built with build tool maven
.
Maven normally wants project dependencies declared as (so-called) coordinates consisting of a groupid
, an artifactid
and a version
. With those it automatically accesses the files needed by e. g. downloading them from a (remote) repository (server) during build time.
This fails for libnumbertext, because it doesn't seem to be published at the usual place yet - i. e. Maven Central - which is kind of the default public location for libraries with a suitable license.
I can locally work around this by "publishing" a downloaded copy of numbertext.jar into a company-owned repository server but would have to supply those maven coordinates doing this. To not create a diversion from a Numbertext distribution later published centrally I'd prefer to specify official coordinates defined by Numbertext project so that newer versions could be used from a public repository automatically.
Please do (first or both of) the following to help me :-)
Thank you for your help and for making numbertext (and for making it exactly when discovered that I needed it :-) )
It would be nice if the library could also be used for conversion to an approximate reading of a number. As in:
970,123,456 => "one gig"
929,456,789 => "nine hundred meg"
1,210,789,123 => "one point two gig"
How exactly to do such rounded conversion would need to be configurable, using some high-level settings with meanings like "at most two digits", "use 'meg' instead of 'million'" etc. With other parameters, the numbers above would instead turn into:
970,123,456 => "nine hundred and seventy million"
929,456,789 => "nine hundred and thirty million"
1,210,789,123 => "one point two one billion"
Versions in configure.ac differ from versions in tags and VERSION. From what I can see from commit history
1.0.1
— 1.0 beta 2
1.0.2
— 1.0 beta 3
1.0.3
— 1.0
1.0.4
— <no tag>This brings confusion. For instance, many repositories use version from configure.ac
when packaging libnumbertext. I suggest to keep versions everywhere in sync.
When I see the numbers spelled out in Danish at https://numbertext.github.io/ all numbers from 100 and up have the article "et" in front of them.
This is wrong. In Danish, the numbers 100 and 1,000 do in fact take the article "et", but all numbers from one million and up take the article "en".
For example:
1,000,000 = en million
1,000,000,000 = en milliard
1,000,000,000 = en billion
etc.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.