crowdin / android-studio-plugin Goto Github PK
View Code? Open in Web Editor NEWIntegrate your Android project with Crowdin
Home Page: https://support.crowdin.com/android-studio/
License: MIT License
Integrate your Android project with Crowdin
Home Page: https://support.crowdin.com/android-studio/
License: MIT License
Describe the bug
Branch name can't contain any of the following characters: \ / : * ? " > |
To Reproduce
In my project, we are using git with branch tree like :
main :
-- feature/bOne/1.0.0
-- release/bOne/0.0.1
Environment:
In debug
2023-07-06 10:44:53.832 ERROR : java.lang.RuntimeException: Branch name can't contain any of the following characters: \ / : * ? " > | at com.crowdin.util.ActionUtils.getBranchName(ActionUtils.java:14) at com.crowdin.ui.action.RefreshTranslationProgressAction.performInBackground(RefreshTranslationProgressAction.java:79) at com.crowdin.action.BackgroundAction$1.run(BackgroundAction.java:31) at com.intellij.openapi.progress.impl.CoreProgressManager.startTask(CoreProgressManager.java:442) at com.intellij.openapi.progress.impl.ProgressManagerImpl.startTask(ProgressManagerImpl.java:114) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcessWithProgressAsynchronously$5(CoreProgressManager.java:493) at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$3(ProgressRunner.java:252) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:188) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$12(CoreProgressManager.java:608) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:683) at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:639) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:607) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:175) at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$4(ProgressRunner.java:252) at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699) at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699) at java.base/java.lang.Thread.run(Thread.java:833)
The CrowdinPropertiesLoader is an essential part of the application and should be carefully covered by Unit tests.
Is your feature request related to a problem? Please describe.
Seems like there is an improved error wrapper in code already. Our plugin has stopped working in December and I would love to fix the integration, but without any error logging it's impossible.
Describe the solution you'd like
Please release the new version that has better error logging.
Hi, we are trying out the new Crowdin plugin. As it's really easy to setup it would be great if the auto-upload could be turned off some way. It's for example not convenient to upload the strings.xml every time a developer switches branches.
Is your feature request related to a problem? Please describe.
The Crowdin documentation says to treat the personal access token like a password, yet the Android Studio plugin (and all the integrations) tell you to put it in a crowdin.properties
file which in all likelihood will get checked into git.
Describe the solution you'd like
There's a few alternatives.
~/.crowdin
folder or file with ways of storing each project personal access token).crowdin.properties
file for a place to store the personal access token that points outside the project.This class is an important part of the plugins, so it should be carefully covered by Unit tests.
After upgrading to version 1.1.0, when I try to download translations, the message "Crowdin: Translations successfully downloaded" appears, but translations are not downloaded.
On version 1.0.0 everything works fine.
Hi,
yesterday it worked fine. But today when I try to download translations I always get just this error:
"Downloading transactions failed"
This error is not very helpful, I have no idea what goes wrong or how I can find out what the error is.
Any help? Thanks!
project-id=<CORRECT-ID>
api-token=<CORRECT-TOKEN>
disable-branches=true
preserve-hierarchy=true
files.source=common/src/main/res/values/strings.xml
files.translation=common/src/main/res/values-%two_letters_code%/%original_file_name%
debug=true
I have managed to run upload sources successfully.
On trying to download translations:
The translations for the following sources will be ommited: - /strings.xml The translations with unfound sources: - /hi/Localizable.strings - /pl/Localizable.strings - /en/Localizable.strings - /lt/Localizable.strings - /uk/Localizable.strings - /pt-BR/Localizable.strings - /zh-CN/Localizable.strings - /th/Localizable.strings - /fi/Localizable.strings - /ja/Localizable.strings - /it/Localizable.strings - /lv/Localizable.strings - /et/Localizable.strings - /en-GB/Localizable.strings - /ka/Localizable.strings - /sl/Localizable.strings - /sv-SE/Localizable.strings - /fr/Localizable.strings - /hr/Localizable.strings - /de/Localizable.strings - /es-ES/Localizable.strings - /ru/Localizable.strings - /ro/Localizable.strings
It tries to handle iOS translations for some reason. I don't mind the warning, but it actually does not download the Android ones.
I am managing the Android project only and don't care about the iOS transactions for now.
Describe the bug
I've tried many configuration for target translation file. Like this :
files.source=**/values/strings.xml files.translation=**/values-%two_letters_code%/strings.xml
Expected behavior
I expect the translation file should be put in the right folder of android project. (app/src/main/res/values-en/strings.xml).
Is it your expectation? or I missed anything? Could you help explain please?
Describe the bug
Even though I wrote the translation and source values as required in the config file, I get the error that they could not be found.
my config file like that(file name crowdin.yml):
files:
- source: '/api/src/main/resources/locales/en_US.yml'
- translation: '/api/src/main/resources/locales/%locale_with_underscore%.%file_extension%'
project_id: '1111'
api_token: 'xxxx'
Hey, thanks a lot for this very useful plugin!
Since 1.0.0 (or 1.1.0 maybe), when I "Download Translations" from "Tools -> Crowdin", some translation files get deleted in a subdirectory of my repository. This is actually a git submodule containing translation files. The submodule source file was not uploaded to the Crowdin project. Those translation files have nothing to do with my project 😁.
Here is my crowdin.properties:
project-id=
api-token=
disable-branches=true
auto-upload=false
I guess I could use files.source
and files.translation
but I just want to keep default behaviour for my actual translation files.
I just want Crowdin plugin to ignore the subdirectory. Is there a way to do that?
Currently Util.java has 0% code coverage.
Support Language Mapping configured in Crowdin UI
Hello,
I have an app with two different flavour and each one has a localised name. I'm trying to setup the plugin to sync with the files I currently have in my crowdin project, but I'm having some issue understanding what's the right setup for my case.
The files are in these folders:
projectName/app/src/main/res/values/strings.xml
projectName/app/src/main/res/values/app_name.xml
projectName/app/src/flavourA/res/app_name.xml
I'm using the plugin version 1.1.0
and this is what I have for the first two files (main folder)
files.source=/values/strings.xml
files.translation=/values-%android_code%/%original_file_name%
files.1.source=/values/app_name.xml
files.1.translation=/values-%android_code%/%original_file_name%
What's the correct setup for the app_name.xml file in the flavourA folder?
I don't know if the settings in the website count, but I wasn't able to get the right path from that either: if I build&download, I get this structure
projectName/values-xx/strings.xml
projectName/values-xx/app_name.xml
projectName/xx/flavourA/app_name.xml
The last one is always wrong, no matter the tree or settings (expected projectName/flavourA/values-xx/app_name.xml)
If I upload from the plugin, should I expect the uploaded files to match the ones I already have in crowdin? I mean, if uploading from the plugin changes the tree in crowdin, will I lose all the translations?
Thank you.
The LanguageMapping.java
class has low Unit test coverage. It would be great to add the missing Unit tests.
Here i want to ask about all the options that i can configure it in crowdin.properites
project-id
api-token
preserve-hierarchy
auto-upload
files.source
files.translation
No more options ?
cannot add a target language for translation for each file.source ?
best Regards,
Nouha.
The plugin was build with the expectancy of only one module per project. If a project has multiple submodules, each with their own string data, downloading the strings will aggregate it all to one of the submodules.
Example:
If you have
a/src/main/java/res/values/strings_a.xml
and
b/src/main/java/res/values/strings_b.xml
downloading them may put them both under b/src/main/java/res/values/
Easiest way to fix this is to store the absolute path as you send it (or at the very least, search through the subdirectory to locate the named file to figure out where it is). The latter may not support multiple modules with the same file name (strings.xml
), but it's a start.
Currently, download gets all strings whether they have been approved or not.
The user should be able to specify if he wants to only download approved translations.
Is there a way to add custom file directory for the crowdin plugin?
The Crowdin plugin only seems to be checking for the source files under {MainProject|/res/values/customstrings.xml
The issue is, my source file is located inside {MainProject}/assets/language/customstrings.xml
This is my current crowdin.properties configuration, but it does nothing
project-identifier=testproj
project-key=abc
sources={MainProject}/assets/language/customstrings.xml
disable-branches=true
auto-upload=false
This seems to work, but only when the customstrings.xml file is under res/values
project-identifier=testproj
project-key=abc
sources=customstrings.xml
disable-branches=true
auto-upload=false
Now it's easy to miss click on the "Upload Translations" button and all translations will be rewritten on Crowdin.
The CrowdinFileUtil.java
class has low Unit test coverage. It would be great to add the missing Unit tests.
Describe the bug
Version 1.6.2 breaks auto-completion!
To Reproduce
Environment:
Expected behavior
Auto-completion keeps working, obviously.
Screenshots
If applicable, add screenshots to help explain your problem.
Additional context
Run the plugin in Debug mode and provide an extended log.
To enable Debug mode add debug=true
to the crowdin.properties file.
Error from server: , Message: Unrecognized field "excludeCodeBlocks" (class com.crowdin.client.sourcefiles.model.OtherFileImportOptions), not marked as ignorable (2 known properties: "contentSegmentation", "customSegmentation"]) at [Source: (String)"{"contentSegmentation":true,"customSegmentation":false,"excludeCodeBlocks":false,"excludedFrontMatterElements":[]}"; line: 1, column: 81] (through reference chain: com.crowdin.client.sourcefiles.model.FileInfoResponseList["data"]->java.util.ArrayList[1]->com.crowdin.client.sourcefiles.model.FileResponseObject["data"]->com.crowdin.client.sourcefiles.model.File["importOptions"]->com.crowdin.client.sourcefiles.model.OtherFileImportOptions["excludeCodeBlocks"])>
We have a Crowdin project which is used for many files, including our Android app.
When I download using the plugin in Android Studio, I get all those other files when all I want are the strings.xml files for the Android app.
I have several flavors in a project and want to use a separate project in crowdin for each flavor. But now i can't specify several crowdin.properties in one project. The same issue may be in case, when using several application modules.
Can the plugin grab the crowdin.properties file depending on the flavor selected?
If no, can we define several properties in root folder (like crowdin-flavor1.properties, crowdin-flavor2.properties) and show submenu for each properties file (like Tools->Crowdin->flavor1->Upload Sources; Tools->Crowdin->flavor2-> Upload Sources) ?
Describe the bug
It is very strange, the Crowdin Plugin 1.2.0 is always failed to upload source strings even from a brand new demo project.
To Reproduce
Steps to reproduce the behavior:
crowdin.properties
file to the root of project.project-id (numeric)
and api-token
, i could confirm these parameters are correct because i can see API call in my Crowdin UI (project settings > API & Webhooks > Calls History).Environment:
Android Studio version 4.0.1
Expected behavior
Work like it said in the docs.
Crowdin has recently updated its logo.
We need to update all the logo icons with the same size and image extension.
Sources:
Is your feature request related to a problem? Please describe.
As a security measure, especially for opensource projects, it would be great to have an option of placing Crowdin api-key outside of version control.
Describe the solution you'd like
Describe alternatives you've considered
Currently, if someone wants to use this plugin, the only solution is adding crowdin.properties to .gitignore. Or using CLI client instead of AS Plugin.
Currently the code coverage for this file is 0%.
Add unit tests for this to improve code coverage.
Describe the bug
A clear and concise description of what the bug is.
To Reproduce
Environment:
Windows 10
Expected behavior
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Error getting git branch name: EventQueue.isDispatchThread()=false Current thread: Thread[ApplicationImpl pooled thread 259,4,main] 668718099 SystemEventQueueThread: Thread[AWT-EventQueue-0,6,main] 296470702
Additional context
Run the plugin in Debug mode and provide an extended log.
To enable Debug mode add debug=true
to the crowdin.properties file.
Describe the bug
Looks like I can't use /
in my branch name. for example: poc/crowdin
, will throw Crowdin: Branch name can't contain any of the following characters: \ / : * ? " < > |
To Reproduce
Steps to reproduce the behavior:
/
-> git checkout -b poc/crowdin
refresh data
in Crowdin Android Studio Plugin windowEnvironment:
Chipmunk 2021.2.1
macOS Monterey (12.2.1)
Expected behavior
A clear and concise description of what you expected to happen.
Expect to sync with Crowdin backend
Additional context
Run the plugin in Debug mode and provide an extended log.
To enable Debug mode add debug=true
to the crowdin.properties file.
2:02 PM Crowdin
2022-08-15 14:02:13.635 ERROR : java.lang.RuntimeException: Branch name can't contain any of the following characters: \ / : * ? " < > |
at com.crowdin.util.ActionUtils.getBranchName(ActionUtils.java:14)
at com.crowdin.ui.action.RefreshTranslationProgressAction.performInBackground(RefreshTranslationProgressAction.java:79)
at com.crowdin.action.BackgroundAction$1.run(BackgroundAction.java:31)
at com.intellij.openapi.progress.impl.CoreProgressManager.startTask(CoreProgressManager.java:450)
at com.intellij.openapi.progress.impl.ProgressManagerImpl.startTask(ProgressManagerImpl.java:117)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcessWithProgressAsync$5(CoreProgressManager.java:510)
at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$3(ProgressRunner.java:243)
at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:183)
at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicat... (show balloon)
2:02 PM Crowdin: Branch name can't contain any of the following characters: \ / : * ? " < > |
Notifications about missing crowdin.properties file should only be shown if the project is using crowdin, not for every project I open in Android studio.
Plugin version: 0.5.10
AS version: 3.1.4
The RetryUtil.java
class has no Unit test coverage. It would be great to add Unit tests for this class.
The PropertyUtil.java
class has low Unit test coverage. It would be great to add the missing Unit tests.
Is your feature request related to a problem? Please describe.
Currently, the "Upload Translations" option is not configurable and doesn't allow applying additional import options to the uploaded translations.
The Upload Translations API supports the following request parameters:
importEqSuggestions
- Defines whether to add translation if it's the same as the source stringautoApproveImported
- Mark uploaded translations as approvedtranslateHidden
- Allow translations upload to hidden source stringsDescribe the solution you'd like
crowdin.properties
configuration file:# Applies to the default behavior and all filegroups that do not have such a configuration
import-eq-suggestions=true/false
auto-approve-imported=true/false
translate-hidden=true/false
# Ability to configure for specific file groups
# higher priority
files.1.import-eq-suggestions=true/false
files.1.auto-approve-imported=true/false
files.1.translate-hidden=true/false
files.2.import-eq-suggestions=true/false
...
UploadTranslationsAction
> RequestBuilder.uploadTranslation
Hi I'm currently trying to use this plugin in IntelliJ IDEA. I've created the crowdin.properties
with project-key and project-identifier in it. When I try to download the translations I get "Downloading translations failed". I tried tailing the idea.log
but there are no entries that appear in there at all.
Possible to add some debug logging or instructions to troubleshoot?
In my Android project i have many Flavors, each flavor have some languages, so i need for example for flavor "X" to download only the translations of two languages, and for Flavor "Y" i want to download the translations of four languages, But what I see in crowdin Android Studio plugin, I can't choose a specific languages to download.
I try Tools -> Crowdin -> download Translations ,but it download all supported languages in my crowdin project.
Can I configure that ? or this feature is not supported yet ?
I try also to change the languages that i need for a specific source file Strings.XML,
and try again Tools -> Crowdin -> download Translations but i got this warning message
Currently, this method is not covered by Unit tests.
I have several flavors in a project and want to use a separate project in crowdin for each flavor. But now i can't specify several crowdin.properties in one project.
If we add the ability to use one more of crowdin.properties files, so we can config each one for a separate project on Crowdin
Best Regards,
Nouha.
I turned on the debug log and downloaded the translations again, then it worked immediately!
To switch on the debug log, simply add debug=true
to the crowdin.properties
file.
However, I would like to document the behaviour here.
Describe the bug
Recently, I can no longer download the translations in Android Studio. I get the following error message:
14:37 Crowdin
The translations with unfound sources:
- /master/values-hu-rHU/strings.xml
- /master/values-vi-rVN/strings.xml
- /master/values-iw-rIL/strings.xml
- /master/values-hr-rHR/strings.xml
- /master/values-uk-rUA/strings.xml
- /master/values-cs-rCZ/strings.xml
- /master/values-eo-rUY/strings.xml
- /master/values-ka-rGE/strings.xml
- /master/values-it-rIT/strings.xml
I started the download as follows:
The structure of the project looks like this:
In Android Studio I checked out the master
branch.
When I re-upload the source file, the structure looks like this:
Environment:
Expected behavior
The downloading of translations must work again as before.
Additional context
4:54 Crowdin: 2021-05-07 14:54:19.238 DEBUG : Crowdin plugin started action
14:54 Crowdin: 2021-05-07 14:54:22.512 DEBUG : Using branch with id #2 and name 'master'
14:54 Crowdin: 2021-05-07 14:54:22.512 DEBUG : Downloading archive with translation files
14:54 Crowdin: 2021-05-07 14:54:32.764 DEBUG : Extracting all downloaded files to temporary directory '/home/remo/AndroidStudioProjects/Headi/all122814043905078'
14:54 Crowdin: 2021-05-07 14:54:32.782 DEBUG : Translation file '/values-es-rES/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.782 DEBUG : Translation file '/values-pl-rPL/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.782 DEBUG : Translation file '/values-cs-rCZ/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.782 DEBUG : Translation file '/values-eo-rUY/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.782 DEBUG : Translation file '/values-hr-rHR/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.783 DEBUG : Translation file '/values-de-rCH/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.783 DEBUG : Translation file '/values-sv-rSE/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.783 DEBUG : Translation file '/values-vi-rVN/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.783 DEBUG : Translation file '/values-it-rIT/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.783 DEBUG : Translation file '/values-el-rGR/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.783 DEBUG : Translation file '/values-fr-rFR/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.783 DEBUG : Translation file '/values-nl-rNL/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.783 DEBUG : Translation file '/values-pt-rBR/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.783 DEBUG : Translation file '/values-ro-rRO/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-uk-rUA/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-hu-rHU/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-ar-rSA/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-ru-rRU/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-no-rNO/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-tr-rTR/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-ca-rES/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-iw-rIL/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-da-rDK/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-fi-rFI/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-ka-rGE/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.784 DEBUG : Translation file '/values-et-rEE/strings.xml' - Found
14:54 Crowdin: 2021-05-07 14:54:32.790 DEBUG : Clearing - deleting archive and temporary directory
14:54 Crowdin: Translations downloaded successfully
Describe the bug
I have crowdin.properties
project-id=my_project_id
api-token-env=CROWDIN_API_KEY
disable-branches=true
auto-upload=false
files.source=/app/src/main/res/values/strings.xml
files.translation=/app/src/main/res/values-%two_letters_code%/%original_file_name%
And I added environment variable to the ~/.zprofile
export CROWDIN_API_KEY=my_personal_access_token
In terminal using printenv
or echo $CROWDIN_API_KEY
I see value of CROWDIN_API_KEY even after restart Mac OS, but when I start Android Studio or trying to use Crowdin plugin I see an error
Crowdin
Errors in the configuration file:
Environment variables do not contain 'CROWDIN_API_KEY' key
But when I set environment variable using launchctl setenv CROWDIN_API_KEY my_personal_access_token
Crowdin plugin see value of the CROWDIN_API_KEY variable and everything works fine until I restart Mac OS (after restart I don't see this variable neither in terminal or Android Studio).
Can you help me and say why plugin doesn't see variables from the ~/.zprofile
but see from launchctl setenv
, or I should add environment variable in another way that it will be visible for plugin (like launchctl setenv
) and won't be erased after Mac restart (like ~/.zprofile
)?
Environment:
Android Studio Arctic Fox | 2020.3.1
Build #AI-203.7717.56.2031.7583922, built on July 26, 2021
macOS 11.5.2
Crowdin Android Studio plugin 1.4.1
The first character of UIUtil:confirmDialog
method name has a different encoding, it should be replaced with the regular c
character.
Crowdin can't find sources for all translations when Tools -> Crowdin -> Download Translations
I have read documentation for like 10 times. Could not understand how files.source and files.translation should look. A tried multiple variants, but according to documentation process should work without this properties. So maybe this is bug.
I'll show everything in screenshots maybe you guys will have answers. It would help me a lot)
Download Translations should fill strings files with translations, but nothing happens.
Log with debug=true:
Project structure inside res folder:
Files structure in Crowdin:
crowdin.properties:
Currently the code coverage for the file is 0%
The PlaceholderUtil.java
class has low Unit test coverage. It would be great to add the missing Unit tests.
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.