diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..c3c313d --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,20 @@ +name: Build +on: + push: + branches: + - master + pull_request: + types: [opened, synchronize, reopened] +jobs: + sonarcloud: + name: SonarCloud + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + - name: SonarCloud Scan + uses: SonarSource/sonarcloud-github-action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} diff --git a/.vscode/settings.json b/.vscode/settings.json index c5f3f6b..e0f15db 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,3 @@ { - "java.configuration.updateBuildConfiguration": "interactive" + "java.configuration.updateBuildConfiguration": "automatic" } \ No newline at end of file diff --git a/android/app/build.gradle b/android/app/build.gradle index 58c2422..86cbc9c 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -1,5 +1,5 @@ apply plugin: "com.android.application" - +apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" import com.android.build.OutputFile /** @@ -81,12 +81,9 @@ project.ext.react = [ enableHermes: true, // clean and rebuild if changing ] -project.ext.vectoricons = [ - iconFontNames: [ 'MaterialIcons.ttf', 'EvilIcons.ttf' ] // Name of the font files you want to copy -] apply from: "../../node_modules/react-native/react.gradle" -apply from: "../../node_modules/react-native-vector-icons/fonts.gradle" + /** * Set this to true to create two separate APKs instead of one: * - An APK that only works on ARM devices @@ -193,6 +190,7 @@ android { } dependencies { + compile project(':react-native-vector-icons') implementation fileTree(dir: "libs", include: ["*.jar"]) //noinspection GradleDynamicVersion implementation "com.facebook.react:react-native:+" // From node_modules diff --git a/android/app/src/main/java/com/bigbluebutton/MainApplication.java b/android/app/src/main/java/com/bigbluebutton/MainApplication.java index 0bf8797..329a4d2 100644 --- a/android/app/src/main/java/com/bigbluebutton/MainApplication.java +++ b/android/app/src/main/java/com/bigbluebutton/MainApplication.java @@ -4,6 +4,8 @@ import android.app.Application; import android.content.Context; import com.facebook.react.PackageList; import com.facebook.react.ReactApplication; +import com.oblador.vectoricons.VectorIconsPackage; +import com.oblador.vectoricons.VectorIconsPackage; import com.reactnativecommunity.asyncstorage.AsyncStoragePackage; import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; import com.facebook.react.ReactInstanceManager; @@ -12,6 +14,7 @@ import com.facebook.react.ReactPackage; import com.facebook.soloader.SoLoader; import java.lang.reflect.InvocationTargetException; import java.util.List; +import com.oblador.vectoricons.VectorIconsPackage; import com.facebook.react.bridge.JSIModulePackage; // <- add import com.swmansion.reanimated.ReanimatedJSIModulePackage; // <- add @@ -29,8 +32,8 @@ public class MainApplication extends Application implements ReactApplication { protected List getPackages() { @SuppressWarnings("UnnecessaryLocalVariable") List packages = new PackageList(this).getPackages(); - // Packages that cannot be autolinked yet can be added manually here, for example: - // packages.add(new MyReactNativePackage()); + //Packages that cannot be autolinked yet can be added manually here, for example: + packages.add(new MyReactNativePackage(), new VectorIconsPackage()); return packages; } diff --git a/android/settings.gradle b/android/settings.gradle index d0aee07..d112f48 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -1,7 +1,9 @@ rootProject.name = 'BigBlueButton' +include ':react-native-vector-icons' +project(':react-native-vector-icons').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-vector-icons/android') include ':@react-native-async-storage_async-storage' project(':@react-native-async-storage_async-storage').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-async-storage/async-storage/android') include ':react-native-gesture-handler' project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android') apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) -include ':app' +include ':app' \ No newline at end of file diff --git a/ios/BigBlueButton.xcodeproj/project.pbxproj b/ios/BigBlueButton.xcodeproj/project.pbxproj index 0c2083b..f9861eb 100644 --- a/ios/BigBlueButton.xcodeproj/project.pbxproj +++ b/ios/BigBlueButton.xcodeproj/project.pbxproj @@ -18,6 +18,22 @@ F1F618E927BCA28B0085BEDE /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F1F618E827BCA28B0085BEDE /* ReplayKit.framework */; }; F1F618EC27BCA28B0085BEDE /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1F618EB27BCA28B0085BEDE /* SampleHandler.swift */; }; F1F618F027BCA28B0085BEDE /* BigBlueButton Broadcast.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = F1F618E727BCA28B0085BEDE /* BigBlueButton Broadcast.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 0606905B02944948BB17104F /* AntDesign.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F8C64715D8804F81B20225FA /* AntDesign.ttf */; }; + AB0C61DD6BF546C0AAFC9E4C /* Entypo.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 7D1758C1493F48EA828278EF /* Entypo.ttf */; }; + 31550F2772BF404481C8789A /* EvilIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = CA446FEA80BA4D3E8F05F808 /* EvilIcons.ttf */; }; + 529DC832EC8C4237BE3A08FC /* Feather.ttf in Resources */ = {isa = PBXBuildFile; fileRef = C476EA1931454EB399147EA8 /* Feather.ttf */; }; + A723DEC078834C6F8BEBD955 /* FontAwesome.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D15C46CFBEDD4C6A8A724A7D /* FontAwesome.ttf */; }; + 0433F9CE5A2A432A898C2AFF /* FontAwesome5_Brands.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8AA7B799D187471DBFC6D766 /* FontAwesome5_Brands.ttf */; }; + 4A06D1FBDE5B49428E883010 /* FontAwesome5_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = EFC11513C1C04CC6A061ADFC /* FontAwesome5_Regular.ttf */; }; + 86C1979548D543E7AA444647 /* FontAwesome5_Solid.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3AD3ABECB8FE487080FEB2C7 /* FontAwesome5_Solid.ttf */; }; + 8F9DAD740A8341F2A477C7CC /* Fontisto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = B5A6C6B34B2D453B868416B2 /* Fontisto.ttf */; }; + EECF50FCB6AA45BA9A872B70 /* Foundation.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 126F1909D1CE4C2EB0CFE8C3 /* Foundation.ttf */; }; + 74C4F550BACA4F3991D85855 /* Ionicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = BC33F460718241E28F848AAC /* Ionicons.ttf */; }; + 8B432F0B0C0C43FDB47806FA /* MaterialCommunityIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 879799A718E1458B986C16E4 /* MaterialCommunityIcons.ttf */; }; + 9A86AC6C44524D28957B3C2C /* MaterialIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = FEDEE48CF90146588BFB1F7E /* MaterialIcons.ttf */; }; + 1B77DAAF12B24E7BB140B9FD /* Octicons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 264CAB36471C4A52B613546B /* Octicons.ttf */; }; + A4277D7E8515496091672296 /* SimpleLineIcons.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 28D9D2F4459D4C6CB600189C /* SimpleLineIcons.ttf */; }; + 9F154B5AB41F45C9938B2E68 /* Zocial.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A78E75D2CEC348FF82EEC375 /* Zocial.ttf */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -76,6 +92,22 @@ F1F618E827BCA28B0085BEDE /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; }; F1F618EB27BCA28B0085BEDE /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = ""; }; F1F618ED27BCA28B0085BEDE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F8C64715D8804F81B20225FA /* AntDesign.ttf */ = {isa = PBXFileReference; name = "AntDesign.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/AntDesign.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 7D1758C1493F48EA828278EF /* Entypo.ttf */ = {isa = PBXFileReference; name = "Entypo.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + CA446FEA80BA4D3E8F05F808 /* EvilIcons.ttf */ = {isa = PBXFileReference; name = "EvilIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + C476EA1931454EB399147EA8 /* Feather.ttf */ = {isa = PBXFileReference; name = "Feather.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + D15C46CFBEDD4C6A8A724A7D /* FontAwesome.ttf */ = {isa = PBXFileReference; name = "FontAwesome.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 8AA7B799D187471DBFC6D766 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Brands.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + EFC11513C1C04CC6A061ADFC /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Regular.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 3AD3ABECB8FE487080FEB2C7 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; name = "FontAwesome5_Solid.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + B5A6C6B34B2D453B868416B2 /* Fontisto.ttf */ = {isa = PBXFileReference; name = "Fontisto.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 126F1909D1CE4C2EB0CFE8C3 /* Foundation.ttf */ = {isa = PBXFileReference; name = "Foundation.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + BC33F460718241E28F848AAC /* Ionicons.ttf */ = {isa = PBXFileReference; name = "Ionicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 879799A718E1458B986C16E4 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; name = "MaterialCommunityIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + FEDEE48CF90146588BFB1F7E /* MaterialIcons.ttf */ = {isa = PBXFileReference; name = "MaterialIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 264CAB36471C4A52B613546B /* Octicons.ttf */ = {isa = PBXFileReference; name = "Octicons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Octicons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + 28D9D2F4459D4C6CB600189C /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; name = "SimpleLineIcons.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; + A78E75D2CEC348FF82EEC375 /* Zocial.ttf */ = {isa = PBXFileReference; name = "Zocial.ttf"; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -166,6 +198,7 @@ 83CBBA001A601CBA00E9B192 /* Products */, 2D16E6871FA4F8E400B85C8A /* Frameworks */, E233CBF5F47BEE60B243DCF8 /* Pods */, + 0B7E80F3E3D64BD78EE80539 /* Resources */, ); indentWidth = 2; sourceTree = ""; @@ -204,6 +237,30 @@ path = "BigBlueButton Broadcast"; sourceTree = ""; }; + 0B7E80F3E3D64BD78EE80539 /* Resources */ = { + isa = "PBXGroup"; + children = ( + F8C64715D8804F81B20225FA /* AntDesign.ttf */, + 7D1758C1493F48EA828278EF /* Entypo.ttf */, + CA446FEA80BA4D3E8F05F808 /* EvilIcons.ttf */, + C476EA1931454EB399147EA8 /* Feather.ttf */, + D15C46CFBEDD4C6A8A724A7D /* FontAwesome.ttf */, + 8AA7B799D187471DBFC6D766 /* FontAwesome5_Brands.ttf */, + EFC11513C1C04CC6A061ADFC /* FontAwesome5_Regular.ttf */, + 3AD3ABECB8FE487080FEB2C7 /* FontAwesome5_Solid.ttf */, + B5A6C6B34B2D453B868416B2 /* Fontisto.ttf */, + 126F1909D1CE4C2EB0CFE8C3 /* Foundation.ttf */, + BC33F460718241E28F848AAC /* Ionicons.ttf */, + 879799A718E1458B986C16E4 /* MaterialCommunityIcons.ttf */, + FEDEE48CF90146588BFB1F7E /* MaterialIcons.ttf */, + 264CAB36471C4A52B613546B /* Octicons.ttf */, + 28D9D2F4459D4C6CB600189C /* SimpleLineIcons.ttf */, + A78E75D2CEC348FF82EEC375 /* Zocial.ttf */, + ); + name = Resources; + sourceTree = ""; + path = ""; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -325,6 +382,22 @@ files = ( 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + 0606905B02944948BB17104F /* AntDesign.ttf in Resources */, + AB0C61DD6BF546C0AAFC9E4C /* Entypo.ttf in Resources */, + 31550F2772BF404481C8789A /* EvilIcons.ttf in Resources */, + 529DC832EC8C4237BE3A08FC /* Feather.ttf in Resources */, + A723DEC078834C6F8BEBD955 /* FontAwesome.ttf in Resources */, + 0433F9CE5A2A432A898C2AFF /* FontAwesome5_Brands.ttf in Resources */, + 4A06D1FBDE5B49428E883010 /* FontAwesome5_Regular.ttf in Resources */, + 86C1979548D543E7AA444647 /* FontAwesome5_Solid.ttf in Resources */, + 8F9DAD740A8341F2A477C7CC /* Fontisto.ttf in Resources */, + EECF50FCB6AA45BA9A872B70 /* Foundation.ttf in Resources */, + 74C4F550BACA4F3991D85855 /* Ionicons.ttf in Resources */, + 8B432F0B0C0C43FDB47806FA /* MaterialCommunityIcons.ttf in Resources */, + 9A86AC6C44524D28957B3C2C /* MaterialIcons.ttf in Resources */, + 1B77DAAF12B24E7BB140B9FD /* Octicons.ttf in Resources */, + A4277D7E8515496091672296 /* SimpleLineIcons.ttf in Resources */, + 9F154B5AB41F45C9938B2E68 /* Zocial.ttf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/BigBlueButton/Info.plist b/ios/BigBlueButton/Info.plist index ba8ea5a..70d473b 100644 --- a/ios/BigBlueButton/Info.plist +++ b/ios/BigBlueButton/Info.plist @@ -33,7 +33,7 @@ NSLocationWhenInUseUsageDescription - + UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities @@ -48,5 +48,24 @@ UIViewControllerBasedStatusBarAppearance + UIAppFonts + + AntDesign.ttf + Entypo.ttf + EvilIcons.ttf + Feather.ttf + FontAwesome.ttf + FontAwesome5_Brands.ttf + FontAwesome5_Regular.ttf + FontAwesome5_Solid.ttf + Fontisto.ttf + Foundation.ttf + Ionicons.ttf + MaterialCommunityIcons.ttf + MaterialIcons.ttf + Octicons.ttf + SimpleLineIcons.ttf + Zocial.ttf + diff --git a/ios/Podfile b/ios/Podfile index 35e0c3c..0b52c0a 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -20,6 +20,8 @@ target 'BigBlueButton' do pod 'RNCAsyncStorage', :path => '../node_modules/@react-native-async-storage/async-storage' + pod 'RNVectorIcons', :path => '../node_modules/react-native-vector-icons' + target 'BigBlueButtonTests' do inherit! :complete # Pods for testing diff --git a/package-lock.json b/package-lock.json index 31239da..1786241 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,9 +14,13 @@ "@react-navigation/native-stack": "^6.5.0", "@types/styled-components-react-native": "^5.1.3", "bigbluebutton-mobile-sdk": "^0.1.6", + "i18next": "^21.6.12", + "i18next-browser-languagedetector": "^6.1.3", "react": "17.0.2", "react-native": "0.67.2", "react-native-gesture-handler": "^2.2.0", + "react-native-languages": "^3.0.2", + "react-native-localization": "^2.3.1", "react-native-modalize": "^2.0.13", "react-native-reanimated": "^2.4.1", "react-native-safe-area-context": "^3.4.0", @@ -7862,6 +7866,36 @@ "node": ">=8.12.0" } }, + "node_modules/i18next": { + "version": "21.6.12", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.6.12.tgz", + "integrity": "sha512-xlGTPdu2g5PZEUIE6TA1mQ9EIAAv9nMFONzgwAIrKL/KTmYYWufQNGgOmp5Og1PvgUji+6i1whz0rMdsz1qaKw==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.12.0" + } + }, + "node_modules/i18next-browser-languagedetector": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.3.tgz", + "integrity": "sha512-T+oGXHXtrur14CGnZZ7qQ07X38XJQEI00b/4ILrtO6xPbwTlQ1wtMZC2H+tBULixHuVUXv8LKbxfjyITJkezUg==", + "dependencies": { + "@babel/runtime": "^7.14.6" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -10397,6 +10431,11 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/localized-strings": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/localized-strings/-/localized-strings-0.2.4.tgz", + "integrity": "sha512-TKDhqFPkIIN/if2FSvVVZTaM/GP9TzfgdQ2uY65mr32xgFu5nqkKXprXbzy5rfx32DF5LDvS/y1UqYF/mAscYA==" + }, "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -12111,6 +12150,17 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "node_modules/react-localization": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/react-localization/-/react-localization-1.0.18.tgz", + "integrity": "sha512-LL6+aKR7E72Ek23LnKrVd3cd2fojJfQtPzveic98YPHdgcYhz+zMaWlQJgKAeZzi0jH9Euls+S+/YZFvY0Wz2Q==", + "dependencies": { + "localized-strings": "^0.2.0" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.0.0 || ^15.6.0" + } + }, "node_modules/react-native": { "version": "0.67.2", "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.67.2.tgz", @@ -12179,6 +12229,33 @@ "prop-types": "^15.7.2" } }, + "node_modules/react-native-languages": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-native-languages/-/react-native-languages-3.0.2.tgz", + "integrity": "sha512-LGsTfixFM6hXDhcFJI6mrtrNBsGPSvXT9RtZQ0tlqmGFKmMyZW6eQgJ7kLw8lISD2FIGl4jJwY06EAJpbMsNxg==", + "deprecated": "This project has been renamed to react-native-localize. Install using react-native-localize instead.", + "peerDependencies": { + "react-native": ">=0.56.0" + } + }, + "node_modules/react-native-localization": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/react-native-localization/-/react-native-localization-2.3.1.tgz", + "integrity": "sha512-jmD6GEAGmstCIZOsxZcxWJbbx364c9qtKy8kefLcHYfAc73+g+e8CB7TZEwpK4IZNXxCBAeQMBsXfFrTyJmpWQ==", + "dependencies": { + "react-localization": "^1.0.17" + }, + "peerDependencies": { + "react": ">15.6.0", + "react-native": ">0.64", + "react-native-windows": ">0.64" + }, + "peerDependenciesMeta": { + "react-native-windows": { + "optional": true + } + } + }, "node_modules/react-native-modalize": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/react-native-modalize/-/react-native-modalize-2.0.13.tgz", @@ -20765,6 +20842,22 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, + "i18next": { + "version": "21.6.12", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-21.6.12.tgz", + "integrity": "sha512-xlGTPdu2g5PZEUIE6TA1mQ9EIAAv9nMFONzgwAIrKL/KTmYYWufQNGgOmp5Og1PvgUji+6i1whz0rMdsz1qaKw==", + "requires": { + "@babel/runtime": "^7.12.0" + } + }, + "i18next-browser-languagedetector": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.3.tgz", + "integrity": "sha512-T+oGXHXtrur14CGnZZ7qQ07X38XJQEI00b/4ILrtO6xPbwTlQ1wtMZC2H+tBULixHuVUXv8LKbxfjyITJkezUg==", + "requires": { + "@babel/runtime": "^7.14.6" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -22653,6 +22746,11 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "localized-strings": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/localized-strings/-/localized-strings-0.2.4.tgz", + "integrity": "sha512-TKDhqFPkIIN/if2FSvVVZTaM/GP9TzfgdQ2uY65mr32xgFu5nqkKXprXbzy5rfx32DF5LDvS/y1UqYF/mAscYA==" + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -24006,6 +24104,14 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "react-localization": { + "version": "1.0.18", + "resolved": "https://registry.npmjs.org/react-localization/-/react-localization-1.0.18.tgz", + "integrity": "sha512-LL6+aKR7E72Ek23LnKrVd3cd2fojJfQtPzveic98YPHdgcYhz+zMaWlQJgKAeZzi0jH9Euls+S+/YZFvY0Wz2Q==", + "requires": { + "localized-strings": "^0.2.0" + } + }, "react-native": { "version": "0.67.2", "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.67.2.tgz", @@ -24075,6 +24181,20 @@ "prop-types": "^15.7.2" } }, + "react-native-languages": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/react-native-languages/-/react-native-languages-3.0.2.tgz", + "integrity": "sha512-LGsTfixFM6hXDhcFJI6mrtrNBsGPSvXT9RtZQ0tlqmGFKmMyZW6eQgJ7kLw8lISD2FIGl4jJwY06EAJpbMsNxg==", + "requires": {} + }, + "react-native-localization": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/react-native-localization/-/react-native-localization-2.3.1.tgz", + "integrity": "sha512-jmD6GEAGmstCIZOsxZcxWJbbx364c9qtKy8kefLcHYfAc73+g+e8CB7TZEwpK4IZNXxCBAeQMBsXfFrTyJmpWQ==", + "requires": { + "react-localization": "^1.0.17" + } + }, "react-native-modalize": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/react-native-modalize/-/react-native-modalize-2.0.13.tgz", diff --git a/package.json b/package.json index 949dde9..c79b402 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,13 @@ "@react-navigation/native-stack": "^6.5.0", "@types/styled-components-react-native": "^5.1.3", "bigbluebutton-mobile-sdk": "^0.1.6", + "i18next": "^21.6.12", + "i18next-browser-languagedetector": "^6.1.3", "react": "17.0.2", "react-native": "0.67.2", "react-native-gesture-handler": "^2.2.0", + "react-native-languages": "^3.0.2", + "react-native-localization": "^2.3.1", "react-native-modalize": "^2.0.13", "react-native-reanimated": "^2.4.1", "react-native-safe-area-context": "^3.4.0", diff --git a/yarn.lock b/yarn.lock index 59cae24..a905fb7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1009,7 +1009,7 @@ "pirates" "^4.0.5" "source-map-support" "^0.5.16" -"@babel/runtime@^7.12.5", "@babel/runtime@^7.8.4": +"@babel/runtime@^7.12.0", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.6", "@babel/runtime@^7.8.4": "integrity" "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==" "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz" "version" "7.17.2" @@ -4002,6 +4002,20 @@ "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" "version" "1.1.1" +"i18next-browser-languagedetector@^6.1.3": + "integrity" "sha512-T+oGXHXtrur14CGnZZ7qQ07X38XJQEI00b/4ILrtO6xPbwTlQ1wtMZC2H+tBULixHuVUXv8LKbxfjyITJkezUg==" + "resolved" "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-6.1.3.tgz" + "version" "6.1.3" + dependencies: + "@babel/runtime" "^7.14.6" + +"i18next@^21.6.12": + "integrity" "sha512-xlGTPdu2g5PZEUIE6TA1mQ9EIAAv9nMFONzgwAIrKL/KTmYYWufQNGgOmp5Og1PvgUji+6i1whz0rMdsz1qaKw==" + "resolved" "https://registry.npmjs.org/i18next/-/i18next-21.6.12.tgz" + "version" "21.6.12" + dependencies: + "@babel/runtime" "^7.12.0" + "iconv-lite@0.4.24": "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" @@ -5027,6 +5041,11 @@ "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" "version" "1.2.4" +"localized-strings@^0.2.0": + "integrity" "sha512-TKDhqFPkIIN/if2FSvVVZTaM/GP9TzfgdQ2uY65mr32xgFu5nqkKXprXbzy5rfx32DF5LDvS/y1UqYF/mAscYA==" + "resolved" "https://registry.npmjs.org/localized-strings/-/localized-strings-0.2.4.tgz" + "version" "0.2.4" + "locate-path@^3.0.0": "integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==" "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz" @@ -6169,6 +6188,13 @@ "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" "version" "16.13.1" +"react-localization@^1.0.17": + "integrity" "sha512-LL6+aKR7E72Ek23LnKrVd3cd2fojJfQtPzveic98YPHdgcYhz+zMaWlQJgKAeZzi0jH9Euls+S+/YZFvY0Wz2Q==" + "resolved" "https://registry.npmjs.org/react-localization/-/react-localization-1.0.18.tgz" + "version" "1.0.18" + dependencies: + "localized-strings" "^0.2.0" + "react-native-codegen@^0.0.8": "integrity" "sha512-k/944+0XD+8l7zDaiKfYabyEKmAmyZgS1mj+4LcSRPyHnrjgCHKrh/Y6jM6kucQ6xU1+1uyMmF/dSkikxK8i+Q==" "resolved" "https://registry.npmjs.org/react-native-codegen/-/react-native-codegen-0.0.8.tgz" @@ -6189,6 +6215,18 @@ "lodash" "^4.17.21" "prop-types" "^15.7.2" +"react-native-languages@^3.0.2": + "integrity" "sha512-LGsTfixFM6hXDhcFJI6mrtrNBsGPSvXT9RtZQ0tlqmGFKmMyZW6eQgJ7kLw8lISD2FIGl4jJwY06EAJpbMsNxg==" + "resolved" "https://registry.npmjs.org/react-native-languages/-/react-native-languages-3.0.2.tgz" + "version" "3.0.2" + +"react-native-localization@^2.3.1": + "integrity" "sha512-jmD6GEAGmstCIZOsxZcxWJbbx364c9qtKy8kefLcHYfAc73+g+e8CB7TZEwpK4IZNXxCBAeQMBsXfFrTyJmpWQ==" + "resolved" "https://registry.npmjs.org/react-native-localization/-/react-native-localization-2.3.1.tgz" + "version" "2.3.1" + dependencies: + "react-localization" "^1.0.17" + "react-native-modalize@^2.0.13": "integrity" "sha512-BMJlpTnpeDVp5LbbE6kdO+3+yLzowRvPgcIu1QCCM+//uY7oON4VcL8ISilSgAfOYeNQc6vhaD5chVtmpTl/dw==" "resolved" "https://registry.npmjs.org/react-native-modalize/-/react-native-modalize-2.0.13.tgz" @@ -6241,7 +6279,7 @@ "escape-string-regexp" "2.0.0" "invariant" "2.2.4" -"react-native@*", "react-native@^0.0.0-0 || 0.60 - 0.67 || 1000.0.0", "react-native@> 0.50.0", "react-native@>=0.23.1", "react-native@>=0.57", "react-native@0.67.2": +"react-native@*", "react-native@^0.0.0-0 || 0.60 - 0.67 || 1000.0.0", "react-native@> 0.50.0", "react-native@>=0.23.1", "react-native@>=0.56.0", "react-native@>=0.57", "react-native@>0.64", "react-native@0.67.2": "integrity" "sha512-grEtpOLLvtSg8Bivg0ffVRCjTkresqMt7Jdog/geF6VAYhb4RnLaaUCWvyrfyB9buf135FKnqg5BIuve/XQNXA==" "resolved" "https://registry.npmjs.org/react-native/-/react-native-0.67.2.tgz" "version" "0.67.2" @@ -6300,7 +6338,7 @@ "react-shallow-renderer" "^16.13.1" "scheduler" "^0.20.2" -"react@*", "react@^16.0.0 || ^17.0.0", "react@^16.8.0 || ^17.0.0", "react@^17.0.0", "react@> 15.0.0", "react@>= 16.8.0", "react@>=0.14.8", "react@>=16.0", "react@17.0.2": +"react@*", "react@^16.0.0 || ^17.0.0", "react@^16.8.0 || ^17.0.0", "react@^17.0.0", "react@^17.0.0 || ^16.0.0 || ^15.6.0", "react@> 15.0.0", "react@>= 16.8.0", "react@>=0.14.8", "react@>=16.0", "react@>15.6.0", "react@17.0.2": "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==" "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz" "version" "17.0.2"