From 41ba26326a1a67690894fb792205c4f5ad0bf09e Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 30 Mar 2021 14:27:39 -0700 Subject: [PATCH 01/20] add default app and default module --- example/metro.config.js | 14 + example/package.json | 9 +- example/windows/.gitignore | 92 ++++++ example/windows/RNLocalizeSampleApp.sln | 187 ++++++++++++ .../windows/RNLocalizeSampleApp/.gitignore | 1 + example/windows/RNLocalizeSampleApp/App.cpp | 79 ++++++ example/windows/RNLocalizeSampleApp/App.h | 18 ++ example/windows/RNLocalizeSampleApp/App.idl | 3 + example/windows/RNLocalizeSampleApp/App.xaml | 10 + .../Assets/LockScreenLogo.scale-200.png | Bin 0 -> 1430 bytes .../Assets/SplashScreen.scale-200.png | Bin 0 -> 7700 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 2937 bytes .../Assets/Square44x44Logo.scale-200.png | Bin 0 -> 1647 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 1255 bytes .../RNLocalizeSampleApp/Assets/StoreLogo.png | Bin 0 -> 1451 bytes .../Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 3204 bytes .../AutolinkedNativeModules.g.cpp | 14 + .../AutolinkedNativeModules.g.h | 10 + .../AutolinkedNativeModules.g.props | 6 + .../AutolinkedNativeModules.g.targets | 6 + .../windows/RNLocalizeSampleApp/MainPage.cpp | 20 ++ .../windows/RNLocalizeSampleApp/MainPage.h | 19 ++ .../windows/RNLocalizeSampleApp/MainPage.idl | 8 + .../windows/RNLocalizeSampleApp/MainPage.xaml | 16 ++ .../RNLocalizeSampleApp/Package.appxmanifest | 50 ++++ .../RNLocalizeSampleApp/PropertySheet.props | 16 ++ .../RNLocalizeSampleApp.vcxproj | 196 +++++++++++++ .../RNLocalizeSampleApp.vcxproj.filters | 63 +++++ .../RNLocalizeSampleApp_TemporaryKey.pfx | Bin 0 -> 2590 bytes .../ReactPackageProvider.cpp | 15 + .../ReactPackageProvider.h | 13 + .../RNLocalizeSampleApp/packages.config | 5 + example/windows/RNLocalizeSampleApp/pch.cpp | 1 + example/windows/RNLocalizeSampleApp/pch.h | 26 ++ example/yarn.lock | 265 +++++++++++++++++- metro.config.js | 29 ++ package.json | 4 +- windows/.gitignore | 92 ++++++ windows/ReactNativeLocalize.sln | 187 ++++++++++++ .../ReactNativeLocalize/PropertySheet.props | 16 ++ .../ReactNativeLocalize.def | 3 + .../ReactNativeLocalize.vcxproj | 157 +++++++++++ .../ReactNativeLocalize.vcxproj.filters | 20 ++ .../ReactNativeLocalize/ReactNativeModule.h | 33 +++ .../ReactPackageProvider.cpp | 19 ++ .../ReactPackageProvider.h | 21 ++ .../ReactPackageProvider.idl | 9 + windows/ReactNativeLocalize/packages.config | 5 + windows/ReactNativeLocalize/pch.cpp | 1 + windows/ReactNativeLocalize/pch.h | 26 ++ yarn.lock | 258 ++++++++++++++++- 51 files changed, 2032 insertions(+), 10 deletions(-) create mode 100644 example/windows/.gitignore create mode 100644 example/windows/RNLocalizeSampleApp.sln create mode 100644 example/windows/RNLocalizeSampleApp/.gitignore create mode 100644 example/windows/RNLocalizeSampleApp/App.cpp create mode 100644 example/windows/RNLocalizeSampleApp/App.h create mode 100644 example/windows/RNLocalizeSampleApp/App.idl create mode 100644 example/windows/RNLocalizeSampleApp/App.xaml create mode 100644 example/windows/RNLocalizeSampleApp/Assets/LockScreenLogo.scale-200.png create mode 100644 example/windows/RNLocalizeSampleApp/Assets/SplashScreen.scale-200.png create mode 100644 example/windows/RNLocalizeSampleApp/Assets/Square150x150Logo.scale-200.png create mode 100644 example/windows/RNLocalizeSampleApp/Assets/Square44x44Logo.scale-200.png create mode 100644 example/windows/RNLocalizeSampleApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 example/windows/RNLocalizeSampleApp/Assets/StoreLogo.png create mode 100644 example/windows/RNLocalizeSampleApp/Assets/Wide310x150Logo.scale-200.png create mode 100644 example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.cpp create mode 100644 example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.h create mode 100644 example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.props create mode 100644 example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.targets create mode 100644 example/windows/RNLocalizeSampleApp/MainPage.cpp create mode 100644 example/windows/RNLocalizeSampleApp/MainPage.h create mode 100644 example/windows/RNLocalizeSampleApp/MainPage.idl create mode 100644 example/windows/RNLocalizeSampleApp/MainPage.xaml create mode 100644 example/windows/RNLocalizeSampleApp/Package.appxmanifest create mode 100644 example/windows/RNLocalizeSampleApp/PropertySheet.props create mode 100644 example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj create mode 100644 example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj.filters create mode 100644 example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp_TemporaryKey.pfx create mode 100644 example/windows/RNLocalizeSampleApp/ReactPackageProvider.cpp create mode 100644 example/windows/RNLocalizeSampleApp/ReactPackageProvider.h create mode 100644 example/windows/RNLocalizeSampleApp/packages.config create mode 100644 example/windows/RNLocalizeSampleApp/pch.cpp create mode 100644 example/windows/RNLocalizeSampleApp/pch.h create mode 100644 metro.config.js create mode 100644 windows/.gitignore create mode 100644 windows/ReactNativeLocalize.sln create mode 100644 windows/ReactNativeLocalize/PropertySheet.props create mode 100644 windows/ReactNativeLocalize/ReactNativeLocalize.def create mode 100644 windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj create mode 100644 windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters create mode 100644 windows/ReactNativeLocalize/ReactNativeModule.h create mode 100644 windows/ReactNativeLocalize/ReactPackageProvider.cpp create mode 100644 windows/ReactNativeLocalize/ReactPackageProvider.h create mode 100644 windows/ReactNativeLocalize/ReactPackageProvider.idl create mode 100644 windows/ReactNativeLocalize/packages.config create mode 100644 windows/ReactNativeLocalize/pch.cpp create mode 100644 windows/ReactNativeLocalize/pch.h diff --git a/example/metro.config.js b/example/metro.config.js index 5545c02..da2004d 100644 --- a/example/metro.config.js +++ b/example/metro.config.js @@ -1,4 +1,18 @@ + +const path = require('path'); +const blacklist = require('metro-config/src/defaults/blacklist'); + module.exports = { + resolver: { + blacklistRE: blacklist([ + // This stops "react-native run-windows" from causing the metro server to crash if its already running + new RegExp( + `${path.resolve(__dirname, 'windows').replace(/[/\\]/g, '/')}.*`, + ), + // This prevents "react-native run-windows" from hitting: EBUSY: resource busy or locked, open msbuild.ProjectImports.zip + /.*\.ProjectImports\.zip/, + ]), + }, transformer: { getTransformOptions: async () => ({ transform: { diff --git a/example/package.json b/example/package.json index 50c0e4e..b415ffd 100644 --- a/example/package.json +++ b/example/package.json @@ -3,9 +3,10 @@ "version": "0.0.1", "private": true, "scripts": { - "clean-modules": "rm -rf ./node_modules/react-native-localize/{example,node_modules}", - "clean": "rm -rf ./node_modules ./ios/Pods", - "postinstall": "yarn clean-modules && yarn pod-update", + "clean-modules": "rimraf ./node_modules/react-native-localize/{example,node_modules}", + "clean": "rimraf ./node_modules ./ios/Pods", + "postinstall": "yarn clean-modules", + "postinstall:ios": "yarn pod-update", "pod-update": "cd ./ios && pod update && cd ..", "start-metro": "react-native start", "start-webpack": "webpack serve", @@ -18,6 +19,7 @@ "react-dom": "16.13.1", "react-native": "0.63.3", "react-native-fs": "2.16.6", + "react-native-windows": "0.63.26", "react-native-localize": "file:../", "react-native-web": "0.14.8" }, @@ -26,6 +28,7 @@ "@babel/runtime": "^7.12.5", "babel-loader": "^8.2.1", "metro-react-native-babel-preset": "^0.59.0", + "rimraf": "^3.0.2", "webpack": "^5.4.0", "webpack-cli": "^4.2.0", "webpack-dev-server": "^3.11.0" diff --git a/example/windows/.gitignore b/example/windows/.gitignore new file mode 100644 index 0000000..4ea0c7b --- /dev/null +++ b/example/windows/.gitignore @@ -0,0 +1,92 @@ +*AppPackages* +*BundleArtifacts* + +#OS junk files +[Tt]humbs.db +*.DS_Store + +#Visual Studio files +*.[Oo]bj +*.user +*.aps +*.pch +*.vspscc +*.vssscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.[Cc]ache +*.ilk +*.log +*.lib +*.sbr +*.sdf +*.opensdf +*.opendb +*.unsuccessfulbuild +ipch/ +[Oo]bj/ +[Bb]in +[Dd]ebug*/ +[Rr]elease*/ +Ankh.NoLoad + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +#MonoDevelop +*.pidb +*.userprefs + +#Tooling +_ReSharper*/ +*.resharper +[Tt]est[Rr]esult* +*.sass-cache + +#Project files +[Bb]uild/ + +#Subversion files +.svn + +# Office Temp Files +~$* + +# vim Temp Files +*~ + +#NuGet +packages/ +*.nupkg + +#ncrunch +*ncrunch* +*crunch*.local.xml + +# visual studio database projects +*.dbmdl + +#Test files +*.testsettings + +#Other files +*.DotSettings +.vs/ +*project.lock.json + +#Files generated by the VS build +**/Generated Files/** + diff --git a/example/windows/RNLocalizeSampleApp.sln b/example/windows/RNLocalizeSampleApp.sln new file mode 100644 index 0000000..6a3a092 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp.sln @@ -0,0 +1,187 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29215.179 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RNLocalizeSampleApp", "RNLocalizeSampleApp\RNLocalizeSampleApp.vcxproj", "{EEC382FF-948D-444C-8318-03380E8A3088}" + ProjectSection(ProjectDependencies) = postProject + {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {F7D32BD0-2749-483E-9A0D-1635EF7E3136} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Folly", "..\node_modules\react-native-windows\Folly\Folly.vcxproj", "{A990658C-CE31-4BCC-976F-0FC6B1AF693D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactCommon", "..\node_modules\react-native-windows\ReactCommon\ReactCommon.vcxproj", "{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}" + ProjectSection(ProjectDependencies) = postProject + {A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {A990658C-CE31-4BCC-976F-0FC6B1AF693D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chakra", "..\node_modules\react-native-windows\Chakra\Chakra.vcxitems", "{C38970C0-5FBF-4D69-90D8-CBAC225AE895}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative", "..\node_modules\react-native-windows\Microsoft.ReactNative\Microsoft.ReactNative.vcxproj", "{F7D32BD0-2749-483E-9A0D-1635EF7E3136}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JSI.Shared", "..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems", "{0CC28589-39E4-4288-B162-97B959F8B843}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JSI.Universal", "..\node_modules\react-native-windows\JSI\Universal\JSI.Universal.vcxproj", "{A62D504A-16B8-41D2-9F19-E2E86019E5E4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Cxx", "..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems", "{DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "..\node_modules\react-native-windows\Common\Common.vcxproj", "{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ReactNative", "ReactNative", "{5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Shared", "..\node_modules\react-native-windows\Shared\Shared.vcxitems", "{2049DBE9-8D13-42C9-AE4B-413AE38FFFD0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mso", "..\node_modules\react-native-windows\Mso\Mso.vcxitems", "{84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Include", "..\node_modules\react-native-windows\include\Include.vcxitems", "{EF074BA1-2D54-4D49-A28E-5E040B47CD2E}" +EndProject +Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + ..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\Shared\Shared.vcxitems*{2049dbe9-8d13-42c9-ae4b-413ae38fffd0}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\Mso\Mso.vcxitems*{84e05bfa-cbaf-4f0d-bfb6-4ce85742a57e}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{a62d504a-16b8-41d2-9f19-e2e86019e5e4}*SharedItemsImports = 4 + ..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{c38970c0-5fbf-4d69-90d8-cbac225ae895}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\include\Include.vcxitems*{ef074ba1-2d54-4d49-a28e-5e040b47cd2e}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + ..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + ..\node_modules\react-native-windows\Mso\Mso.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + ..\node_modules\react-native-windows\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|ARM.ActiveCfg = Debug|ARM + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|ARM.Build.0 = Debug|ARM + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|ARM.Deploy.0 = Debug|ARM + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|ARM64.Build.0 = Debug|ARM64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|x64.ActiveCfg = Debug|x64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|x64.Build.0 = Debug|x64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|x64.Deploy.0 = Debug|x64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|x86.ActiveCfg = Debug|Win32 + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|x86.Build.0 = Debug|Win32 + {EEC382FF-948D-444C-8318-03380E8A3088}.Debug|x86.Deploy.0 = Debug|Win32 + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|ARM.ActiveCfg = Release|ARM + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|ARM.Build.0 = Release|ARM + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|ARM.Deploy.0 = Release|ARM + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|ARM64.ActiveCfg = Release|ARM64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|ARM64.Build.0 = Release|ARM64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|ARM64.Deploy.0 = Release|ARM64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|x64.ActiveCfg = Release|x64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|x64.Build.0 = Release|x64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|x64.Deploy.0 = Release|x64 + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|x86.ActiveCfg = Release|Win32 + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|x86.Build.0 = Release|Win32 + {EEC382FF-948D-444C-8318-03380E8A3088}.Release|x86.Deploy.0 = Release|Win32 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.ActiveCfg = Debug|ARM + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.Build.0 = Debug|ARM + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.Build.0 = Debug|ARM64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.ActiveCfg = Debug|x64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.Build.0 = Debug|x64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.ActiveCfg = Debug|Win32 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.Build.0 = Debug|Win32 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.ActiveCfg = Release|ARM + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.Build.0 = Release|ARM + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.ActiveCfg = Release|ARM64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.Build.0 = Release|ARM64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.ActiveCfg = Release|x64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.Build.0 = Release|x64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.ActiveCfg = Release|Win32 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.Build.0 = Release|Win32 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.ActiveCfg = Debug|ARM + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.Build.0 = Debug|ARM + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.Build.0 = Debug|ARM64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.ActiveCfg = Debug|x64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.Build.0 = Debug|x64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.ActiveCfg = Debug|Win32 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.Build.0 = Debug|Win32 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.ActiveCfg = Release|ARM + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.Build.0 = Release|ARM + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.ActiveCfg = Release|ARM64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.Build.0 = Release|ARM64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.ActiveCfg = Release|x64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.Build.0 = Release|x64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.ActiveCfg = Release|Win32 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Build.0 = Release|Win32 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.ActiveCfg = Debug|ARM + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.Build.0 = Debug|ARM + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.Build.0 = Debug|ARM64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.ActiveCfg = Debug|x64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.Build.0 = Debug|x64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.ActiveCfg = Debug|Win32 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.Build.0 = Debug|Win32 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.ActiveCfg = Release|ARM + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.Build.0 = Release|ARM + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.ActiveCfg = Release|ARM64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.Build.0 = Release|ARM64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.ActiveCfg = Release|x64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.Build.0 = Release|x64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.ActiveCfg = Debug|ARM + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.Build.0 = Debug|ARM + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.Build.0 = Debug|ARM64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.ActiveCfg = Debug|x64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.Build.0 = Debug|x64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.ActiveCfg = Debug|Win32 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.Build.0 = Debug|Win32 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.ActiveCfg = Release|ARM + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.Build.0 = Release|ARM + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.ActiveCfg = Release|ARM64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.Build.0 = Release|ARM64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.ActiveCfg = Release|x64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.Build.0 = Release|x64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.ActiveCfg = Release|Win32 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.Build.0 = Release|Win32 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.ActiveCfg = Debug|ARM + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.Build.0 = Debug|ARM + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.Build.0 = Debug|ARM64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.ActiveCfg = Debug|x64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.Build.0 = Debug|x64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.ActiveCfg = Debug|Win32 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.Build.0 = Debug|Win32 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.ActiveCfg = Release|ARM + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.Build.0 = Release|ARM + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.ActiveCfg = Release|ARM64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.Build.0 = Release|ARM64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.ActiveCfg = Release|x64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {C38970C0-5FBF-4D69-90D8-CBAC225AE895} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {0CC28589-39E4-4288-B162-97B959F8B843} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {A62D504A-16B8-41D2-9F19-E2E86019E5E4} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {2049DBE9-8D13-42C9-AE4B-413AE38FFFD0} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {EF074BA1-2D54-4D49-A28E-5E040B47CD2E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D43FAD39-F619-437D-BB40-04A3982ACB6A} + EndGlobalSection +EndGlobal diff --git a/example/windows/RNLocalizeSampleApp/.gitignore b/example/windows/RNLocalizeSampleApp/.gitignore new file mode 100644 index 0000000..917243b --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/.gitignore @@ -0,0 +1 @@ +/Bundle diff --git a/example/windows/RNLocalizeSampleApp/App.cpp b/example/windows/RNLocalizeSampleApp/App.cpp new file mode 100644 index 0000000..ab1a9aa --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/App.cpp @@ -0,0 +1,79 @@ +#include "pch.h" + +#include "App.h" + +#include "AutolinkedNativeModules.g.h" +#include "ReactPackageProvider.h" + +using namespace winrt::RNLocalizeSampleApp; +using namespace winrt::RNLocalizeSampleApp::implementation; +using namespace winrt; +using namespace Windows::UI::Xaml; +using namespace Windows::UI::Xaml::Controls; +using namespace Windows::UI::Xaml::Navigation; +using namespace Windows::ApplicationModel; + +/// +/// Initializes the singleton application object. This is the first line of +/// authored code executed, and as such is the logical equivalent of main() or +/// WinMain(). +/// +App::App() noexcept +{ +#if BUNDLE + JavaScriptBundleFile(L"index.windows"); + InstanceSettings().UseWebDebugger(false); + InstanceSettings().UseFastRefresh(false); +#else + JavaScriptMainModuleName(L"index"); + InstanceSettings().UseWebDebugger(true); + InstanceSettings().UseFastRefresh(true); +#endif + +#if _DEBUG + InstanceSettings().UseDeveloperSupport(true); +#else + InstanceSettings().UseDeveloperSupport(false); +#endif + + RegisterAutolinkedNativeModulePackages(PackageProviders()); // Includes any autolinked modules + + PackageProviders().Append(make()); // Includes all modules in this project + + InitializeComponent(); +} + +/// +/// Invoked when the application is launched normally by the end user. Other entry points +/// will be used such as when the application is launched to open a specific file. +/// +/// Details about the launch request and process. +void App::OnLaunched(activation::LaunchActivatedEventArgs const& e) +{ + super::OnLaunched(e); + + Frame rootFrame = Window::Current().Content().as(); + rootFrame.Navigate(xaml_typename(), box_value(e.Arguments())); +} + +/// +/// Invoked when application execution is being suspended. Application state is saved +/// without knowing whether the application will be terminated or resumed with the contents +/// of memory still intact. +/// +/// The source of the suspend request. +/// Details about the suspend request. +void App::OnSuspending([[maybe_unused]] IInspectable const& sender, [[maybe_unused]] SuspendingEventArgs const& e) +{ + // Save application state and stop any background activity +} + +/// +/// Invoked when Navigation to a certain page fails +/// +/// The Frame which failed navigation +/// Details about the navigation failure +void App::OnNavigationFailed(IInspectable const&, NavigationFailedEventArgs const& e) +{ + throw hresult_error(E_FAIL, hstring(L"Failed to load Page ") + e.SourcePageType().Name); +} diff --git a/example/windows/RNLocalizeSampleApp/App.h b/example/windows/RNLocalizeSampleApp/App.h new file mode 100644 index 0000000..6b0329d --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/App.h @@ -0,0 +1,18 @@ +#pragma once + +#include "App.xaml.g.h" + +namespace activation = winrt::Windows::ApplicationModel::Activation; + +namespace winrt::RNLocalizeSampleApp::implementation +{ + struct App : AppT + { + App() noexcept; + void OnLaunched(activation::LaunchActivatedEventArgs const&); + void OnSuspending(IInspectable const&, Windows::ApplicationModel::SuspendingEventArgs const&); + void OnNavigationFailed(IInspectable const&, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs const&); + private: + using super = AppT; + }; +} // namespace winrt::RNLocalizeSampleApp::implementation diff --git a/example/windows/RNLocalizeSampleApp/App.idl b/example/windows/RNLocalizeSampleApp/App.idl new file mode 100644 index 0000000..451b575 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/App.idl @@ -0,0 +1,3 @@ +namespace RNLocalizeSampleApp +{ +} diff --git a/example/windows/RNLocalizeSampleApp/App.xaml b/example/windows/RNLocalizeSampleApp/App.xaml new file mode 100644 index 0000000..225300d --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/App.xaml @@ -0,0 +1,10 @@ + + + + + diff --git a/example/windows/RNLocalizeSampleApp/Assets/LockScreenLogo.scale-200.png b/example/windows/RNLocalizeSampleApp/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..735f57adb5dfc01886d137b4e493d7e97cf13af3 GIT binary patch literal 1430 zcmaJ>TTC2P7~aKltDttVHYH6u8Io4i*}3fO&d$gd*bA_<3j~&e7%8(eXJLfhS!M@! zKrliY>>6yT4+Kr95$!DoD(Qn-5TP|{V_KS`k~E6(LGS@#`v$hQo&^^BKsw3HIsZBT z_y6C2n`lK@apunKojRQ^(_P}Mgewt$(^BBKCTZ;*xa?J3wQ7~@S0lUvbcLeq1Bg4o zH-bvQi|wt~L7q$~a-gDFP!{&TQfc3fX*6=uHv* zT&1&U(-)L%Xp^djI2?~eBF2cxC@YOP$+9d?P&h?lPy-9M2UT9fg5jKm1t$m#iWE{M zIf%q9@;fyT?0UP>tcw-bLkz;s2LlKl2qeP0w zECS7Ate+Awk|KQ+DOk;fl}Xsy4o^CY=pwq%QAAKKl628_yNPsK>?A>%D8fQG6IgdJ ztnxttBz#NI_a@fk7SU`WtrpsfZsNs9^0(2a z@C3#YO3>k~w7?2hipBf{#b6`}Xw1hlG$yi?;1dDs7k~xDAw@jiI*+tc;t2Lflg&bM)0!Y;0_@=w%`LW^8DsYpS#-bLOklX9r?Ei}TScw|4DbpW%+7 zFgAI)f51s}{y-eWb|vrU-Ya!GuYKP)J7z#*V_k^Xo>4!1Yqj*m)x&0L^tg3GJbVAJ zJ-Pl$R=NAabouV=^z_t;^K*0AvFs!vYU>_<|I^#c?>>CR<(T?=%{;U=aI*SbZADLH z&(f2wz_Y0??Tf|g;?|1Znw6}6U43Q#qNRwv1vp9uFn1)V#*4p&%$mP9x&15^OaBiDS(XppT|z^>;B{PLVEbS3IFYV yGvCsSX*m literal 0 HcmV?d00001 diff --git a/example/windows/RNLocalizeSampleApp/Assets/SplashScreen.scale-200.png b/example/windows/RNLocalizeSampleApp/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..023e7f1feda78d5100569825acedfd213a0d84e9 GIT binary patch literal 7700 zcmeHLYj~4Yw%(;oxoEH#Kxq-eR|+VkP17b#Vk;?4QwkI+A{L04G+#<<(x#Un1#+h5>eArRq zTw$)ZvTWW_Y?bDho0nPVTh08+s`sp!j74rJTTtXIDww0SILedFv?sZ?yb@@}GN;#8 znk_b~Q(A0YR#uV4ef!osoV1M3;vQ8N$O|fStfgf$S5;ddUNv`tWtGjM;koG#N;7M< zP*84lnx(bn_KF&9Z5Ai$)#Cs3a|$OFw>WKCT$of*L7_CqQEinflT|W{JT+aKp-E0v zsxmYg)1(T>DROm+LN1eQw8}KCTp=C!$H7`PU!t9_Hw@TsTI2`udRZv*!a5`#A9hK6Y95L(CDUX&_@QxKV z_feX{UhA#ZWlvgpL$#w^D#lq`_A4AzDqd|Zv6y9PX&DNcN|l}_D^{q@GG&H^Pg583 z8FI6N8^H7b5WjGp;urW)d7F+_lcp%KsLX0viCmE(OHH+=%ZfD_=`voUuoUxFO^L;- z;!;2{g-YiiO6m4bs89OuF9!p{FGtH-f%8<2gY!h9s)4ciN%{Kh1+`}{^}M~+TDH9N z^Z5PlgVXMC&2&k*Hw^Lb9gny#ro$MOIxIt{+r)EA10$VR3 zanN8D{TUkl+v0CQ_>ZoHP<M-x#8@8ZiT#$Kh`(uRaX1g$Bg|qy$<#7 zSSAi{Nb8Y=lvNVeio+UGLCAtoLBfL`iOv`)yoJMDJBN>4IH@(l7YRF;61@>qq1iM9 zr@b#OC~SAxSle?5Pp8Z78{VO0YFr1x7kZU64Z23eLf2T2#6J_t;-E}DkB?NufZ0Ug zi?J&byXeaB-uTNVhuiM!UVQw}bZrJ3GtAETYp->!{q#zfN7D3AS9@Q7*V^85jGx#R z(QxYV(wW#F0XF9^^s>>H8pPlVJ>)3Oz z&_X8Sf@~?cH_O*cgi$U#`v`RRfv#y3m(ZpKk^5uLup+lVs$~}FZU$r_+}#hl%?g5m z-u-}-666ssp-xWQak~>PPy$mRc|~?pVSs1_@mBEXpPVfLF6(Ktf1S* zPPh@QZ=tFMs?LM2(5P3L2;l_6XX6s&cYsP1ip#eg0`ZEP0HGYh{UmS@o`MihLLvkU zgyAG0G`b1|qjxxh1(ODKFE%AP}Dq=3vK$P7TXP4GrM1kQ72!GUVMDl`rDC&2;TA}*nF z8$nQD&6ys_nc1*E7$*1S@R8$ymy(sQV}imGSedB@{!QR5P&N_H=-^o!?LsWs+2|mH z-e=)T^SvI)=_JIm7}j4;@*Z17=(#}m=~YF~z~CLI+vdAGlJDcdF$TM?CVI1%LhUrN zaa6DJ=Yh$)$k&Oz{-~8yw^GM^8prYxSxo zvI4k#ibryMa%%*8oI-5m61Koa_A_xg=(fwp0aBX{;X4Q;NXUhtaoJDo1>TqhWtn=_ zd5~chq#&6~c%8JZK#t_&J(9EVUU&upYeIovLt1>vaHe}UUq>#RGQj!EN#5+0@T`(@ z^g~>*c`VGRiSt;!$_4+0hk^I!@O3``5=sZ8IwlxWW7km1B&_t&E*u0_9UBa#VqwY* zz>nxv?FAsVnRaD(Bui=6i==BFUw0k4n$>`umU`F2l?7CYTD^)c2X+d9X&ddS9|gj? zM?knGkGCX&W8offw8aLC2$D{PjC3nVZwd4k?eZH8*mZ)U@3Qk8RDFOz_#WUA#vnzy zyP>KrCfKwSXea7}jgJjBc}PGY+4#6%lbZyjhy`5sZd_Vy6Wz;ixa?czkN}J9It1K6 zY!eu>|AwF^fwZlLAYyQI*lM@^>O>Iu6Vf6i>Q$?v!SeUS<{>UYMwz$*%Aq?w^`j{h z!$GZbhu=^D{&ET8;))LL%ZBDZkQqRd2;u~!d9bHGmLRhLDctNgYyjsuvoSZ#iVdoB z2!f--UUA#U;<{je#?cYt^{PIyKa%hW>}uepWMyAI{{Zo7?2>?$c9;whJae%oN|I-kpTQSx_C$Z&;f zi2i)qmEn=y4U0uvk)$m;zKfjPK@oc?I`}1Jzl$Q~aoKBd3kt7L#7gyt|A_qgz6ai< z=X%D1i!d2h?rHR^R8SUj&G||dkC?DT>{o#Yau<@uqVT{Xef&XG}5*E4aPk{}~ zplx&XhaV)&1EfI3Em;Bw#O5SV^c;{twb-1Rw)+=0!e_BLbd7tYmXCH0wrlOSS+~`7He8Iqx0{CN+DVit9;*6L~JAN zD&cyT)2?h}xnYmL?^)<7YyzZ3$FHU^Eg;DLqAV{#wv#Wj7S`Jdl1pX&{3(uZ?!uh} zDc$ZTNV*7le_W6}Hju~GMTxZQ1aWCeUc%!jv3MHAzt>Y-nQK%zfT*3ebDQA5b?iGn; zBjv3B+GhLTexd_(CzZDP4|#n5^~scvB6#Pk%Ho!kQ>yYw((Dv{6=$g3jT1!u6gORW zx5#`7Wy-ZHRa~IxGHdrp(bm%lf>2%J660nj$fCqN(epv@y!l9s7@k6EvxS{AMP>WY zX4$@F8^kayphIx-RGO$+LYl9YdoI5d|4#q9##`_F5Xnx`&GPzp2fB{-{P@ATw=X@~ z_|&^UMWAKD;jjBKTK(~o?cUFRK8EX=6>cXpfzg4ZpMB>*w_^8GSiT-Jp|xBOnzM+j z*09-@-~qJ(eqWq5@R4i^u4^{McCP(!3}C|v_WsTR*bIUxN(Nx`u##3B4{sE`Z`v8w zAwIG`?1~PkID~W{uDzmqH98Pew_1(;x2%8r^vY{)_&J2K)cN{W+h5+g)ZcjP&Ci#O zgy|8K@4kyMfwilHd&6TDlhb%++Pk!>9HRld6HT7gwyZGrxS$}CsD6`>6!!2K1@Mjf z(P0WYB7V_OFZyeWrbOFb>O54BNXf~K&?}3=^v;v_wT{DKr?jN^DtN&DXwX%u?s*c6`%8>WFz z7}YW^tp0bp^NriE)AB6M2l<7rn7fzePtR*omOevpfm9n?}2V*+0iW;S)C zhg`NAjL?D=W#k*$aR{>pGf~lD-rVtD;5jW1_*Jn1j1=es@Kcx4ySM_bwcQCT=d+DV z>Sz~L=Hj@(X%31nK$mWI@7d>}ORB`K(p=+`UD)+99YUGQc7y^bHZ1F(8|tL0 zdK*DT0kSXG_{BKTpP2*2PecdKV9;dq$^ZZDP;Nyq1kp-&GI5eAyZsK!e3V zK@rPy*{(`KIfo+lc878mDKk^V#`VT05}64kBtk%DgwLrOvLMj5-;*GNKv6c6pzMuL z6EP%ob|_0IW}lLRXCP2!9wWhEw3LA7iF#1O1mIZ@Z=6&bz41F;@S_GvYAG-#CW3z{ zP3+6vHhvP&A3$##Vo9$dT^#MoGg^|MDm=Bt1d2RRwSZ<;ZHICpLBv5Xs!D?BH^(9_ z7`H=N&^v|Z-%mP}wNzG{aiFCsRgwzwq!N6obW9+7(R; z(SZ=23`|`>qil!LMGG{_Heq!BD>(Y-zV9wD)}hz25JA37YR%39;kI4y9pgtcUass6 zP24}ZY$vvYeI`zy&)A_X#nY3017ap*0&jx|mVwyGhg3;!keU53a}Uhm3BZI$N$6Se zLWlAmy1S0xKJm4G_U@sN_Tm=`$xWJSEwKU98rZ&)1R^*$$1vA3oG#&*%SMxY_~oGP zP&PFJatFLM-Ps%84IV-+Ow)T{C7cqUAvauy4C z(FRz&?6$Rypj{xO!`y=*J5o4@U8Q-(y5(*=YoKeZ+-1YdljXxkA#B)zo=FeQH#?Le zycNUmEEHWO9a=X^pb#&cOq7-`7UA87#|S22)<7RUtZo|(zibX=w;K3qur9vy#`MNV z6UUcf9ZwEnKCCp+OoBnF@OdbvH)ANXO0o~Pi9l8=x3))}L<#vO0-~O4!~--Ket?d} zJaqsj<@CD1%S2cTW%rOP{Vto%0sGW~1RMa_j^)5nil0Yw- z0EE#bP+l4#P^%PQ+N*oxu1Zq05xZ!bXfYTg>9c{(Iw*lnjR^>kz%lAN^zFce7rppy zY8zA~3GD=A6d*hze&l4D_wA~+O!56)BZTe_rEu}Ezi<4!kG|W#amBZ5{&XS2@6R~H z{9o^y*BkH4$~yX9U&@CgbOzX1bn9xqF|zh$Dh0Y5y*E0e90*$!ObrHY3Ok0`2=O~r zCuke6KrP9KOf?V(YDsM<6pX2nVoN%M$LT^q#FmtaF?1^27F*IcNX~XRB(|hCFvdcc zc)$=S-)acdk$g4?_>jRqxpI6M3vHZk?0c^3=byamYDNf;uB{3NlKW5IhnOS3DNkMV z?tK8?kJ}pmvp%&&eTVOVjHP`q34hN1@!aK}H(K!vI`~gf|Gv+FNEQD5Yd<~yX7k_l h&G-K)@HZb3BABY{)U1?^%I#E6`MGoTtustd{~yM6srvu` literal 0 HcmV?d00001 diff --git a/example/windows/RNLocalizeSampleApp/Assets/Square150x150Logo.scale-200.png b/example/windows/RNLocalizeSampleApp/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..af49fec1a5484db1d52a7f9b5ec90a27c7030186 GIT binary patch literal 2937 zcma)84OCO-8BSud5)jwMLRVKgX(S?$n?Ld|vrsm<$CF7)&zTbyy1FE5bU`Q17MRv`9ue$;R(@8kR;#vJ*IM0>cJIAOte!d7oRgdH zd%ySjdB6L9=gX^A6)VzH7p2l@v~3zJAMw|DFy#^)F@@F*`mqUn=Il>l)8_+ab;nOW{%+iPx z+s{Eu|&pIs)Z7{La9~?xKfyl z#43?gjEL15d4WbOZo#SiP%>DB^+BcnJ=7dHEe;r#G=tuw|ka z%q@}##Uh7;tc%L_64m(kHtw74ty%BJMb)_1)#S0j`)F8_1jF7vScpsnH=0V19bO8y zR`0SjIdCUo&=>JwMQF8KHA<{ODHTiQh}0^@5QRmCA?gOH6_H3K^-_sNB^RrdNuK-R zOO*vOrKCVvDwgUck`kF(E7j{I#iiN;b*ZdCt4m@HPA`EuEqGGf4%!K<;(=I=&Vyrw z%TwcWtxa}8mCZ%Cyf&ActJ6_$ox5z6-D!0-dvnRx6t7y3d+h6QYpKWO;8OdnvERo7 zuEf>ih5`wqY)~o@OeVt-wM?Q!>QzdGRj!bz6fzYrfw$hZfAKzr2-M+D+R>}~oT574c;_3zquHcElqKIsryILt3g8n3jcMb+j?i?-L3FpZJ z2WRVBRdDPc+G5aaYg#5hpE+6nQ|(VSoxT3|biF;BUq#==-27Xi=gihDPYP$7?=9cP zYKE$jeQ|3~_L0VG-(F~2ZPyD0=k{J4Q~h(t__{-mz_w8{JDY9{`1ouzz!Vr5!ECdE z6U~O1k8c}24V7~zzXWTV-Pe4)y}wQJS&q%H5`Fo_f_JvIU489aCX$;P`u#!I-=^4ijC2{&9!O&h>mi?9oYD=GC#%)6{GzN6nQYw+Fal50!#x^asjBBR50i`+mho*ttoqV)ubM2KD9S~k7+FR4>{29?6 z{!l6kDdyTN0YJ9LgkPWeXm|gyi@zM3?0@{&pXT12w|78&W-q!RRF)&iLCEZVH<|fR zN0fr2^t8H(>L?>K#>^+jWROLral(Qy-xoBq1U7A&DV||wClb)Otd9?(gZ|8znMF}D zf<1haWz^s0qgecz;RFGt0C-B4g`jNGHsFU+;{<%t65v^sjk^h$lmWn#B0#_)9ij&d z-~lc`A)YYExi^7sBuPM^Y|wA2g*5?`K?#7tzELQYNxGo$UB$4J8RJp1k(8Jj+~hMT zlN~>M@KTTh^--8y3PK_NZ@AC!{PT=CziBzGd+wTJ^@icH!Bd}%)g8V)%K?|c&WTUk zy}qv1C%(fjRoZ4ozC3{O%@5?)XzH35zHns$pgU*Q?fj4v?fp1Qbm+j;3l;9jam9Da zXVcKjPlQ73x78QPu|Ffm6x?`~e3oD=gl=4kYK?={kD5j~QCXU)`HSdduNNENzA*2$ zOm3PzF!lN5e*06-f1Uot67wY#{o-S1!KZ7E=!~7ynnk9_iJR#kFoNbAOT#^2Gd17F zMmvU6>lndZQGd|ax9kUoXXO+$N?|j@6qpsF&_j7YXvwo_C{JpmLw5&#e6k>atv%es z5)7r*Wvv_JkUpT}M!_o!nVlEk1Zbl=a*2hQ*<|%*K1Glj^FcF`6kTzGQ3lz~2tCc@ z&x|tj;aH&1&9HwcJBcT`;{?a+pnej;M1HO(6Z{#J!cZA04hnFl;NXA+&`=7bjW_^o zfC40u3LMG?NdPtwGl>Tq6u}*QG)}-y;)lu-_>ee3kibW(69n0$0Zy!}9rQz%*v1iO zT9_H>99yIrSPYVy6^);rR}7Yo=J_T@hi+qhTZXnVWyf;JDYm5#eYLTxr*?kiNn!+Y zQ+LUkBafNJ#rH#C(?d5^;gw9o#%daEI{mA*LHPIHPU`#|H$hD zwm>0&+kahQ)E#%~k>&5@&#Vg82H?s%71=)(soi@174pi9--2{w{1$}Sz4zGn3Du&x bht0Iza^2ykEt4(epJ78uh5nDlX8(TxzDYwP literal 0 HcmV?d00001 diff --git a/example/windows/RNLocalizeSampleApp/Assets/Square44x44Logo.scale-200.png b/example/windows/RNLocalizeSampleApp/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..ce342a2ec8a61291ba76c54604aea7e9d20af11b GIT binary patch literal 1647 zcmaJ?eM}Q)7(e+G1Q(|`V9JhTI2>MkceK4;p;PR&$Pi?ejk3YQ_3o`S&|W_dsOZ8# zWPTt69g`t$ab`0cj-Y0yiBSOqmd)tG7G(}M5aP0_%&9TijB#&)I{zSE^4@#z^FF`l z`8{8`o%wlL(UI|y2!cdsuVamHH~H86F!*-15em4)NqUpCQM5?aoC_eCf@lV4wvF2a zjDQn1JBL69f&@2M3rvzJcfE!eZ8FZUBlFlC5RD)it33{mF9#B82AiyQE%w)`vlwa> zv{<1sm&kSKK$&%2jSFn7$t&P%%6Ue>R=EAnG8N7fqynWG8L3p!4801a;8{+nliO(qd(jNJ_?+9W3#hLIDLoT6~3fx9=`CC-D}-AMrpEO7HK zt3$GicGPc?GmDjy7K2P@La;eu4!$zWCZ`ym{Z$b zu-O6RM&K4JT|BIZB`E-gxqG%FzanI#+2FFmqHqXG7yxWB=w55RGOM)$xMb(>kSNR z2w=1AZi%z=AmG~yea~XaXJR!v7vLn(RUnELfiB1|6D84ICOS}^Zo2AdN}<&*h}G_u z{xZ!(%>tLT3J3<5XhWy-tg+6)0nmUUENLW8TWA{R6bgVd3X;anYFZ^IRis*_P-C-r z;i>%1^eL3UI2-{w8nuFFcs0e~7J{O2k^~Ce%+Ly4U?|=!0LH=t6()xi<^I-rs+9sF z*q{E-CxZbGPeu#a;XJwE;9S1?#R&uns>^0G3p`hEUF*v`M?@h%T%J%RChmD|EVydq zmHWh*_=S%emRC*mhxaVLzT@>Z2SX0u9v*DIJ@WC^kLVdlGV6LpK$KIrlJqc zpJ921)+3JJdTx|<`G&kXpKkjGJv=76R`yYIQ{#c-`%+`#V(7}Q;&@6U8!Td1`d;?N z_9mnI#?AA}4J!r)LN4!E-@H5eXauuB7TOawS>Y|{-P?NNx-lq+z1W-+y(;39P&&LP zL{N80?&=C*qKmdA^moMZRuPcD!B<*mq$ch=0Cnlitw#txRWhb3%TQvPqjkC`F69G4b! ze7z9MZ#+;_#l?H37UqUhDFb^l&s2{oM$3I0o^Q!yx;;V)QmCMo)Tb_ui|mit8MS?U zm##6$sZZ1$@|s%?l@>4Z<*Q}sRBSKMhb4I{e5LdEhsHIHTe8Bod5c>6QtT>$XgUBz z6MK`kO$=jmt@FqggOhJ5j~e@ygRbG;<{Vu)*+nn9aQeo0;$#j;|MS=S$&L?BeV25z xs3B`@=#`5TF{^6(A1rvdY@|-RtQ|iS5{tyX+wH?;n8E)G$kykv-D^wh{{!TZT%7;_ literal 0 HcmV?d00001 diff --git a/example/windows/RNLocalizeSampleApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/example/windows/RNLocalizeSampleApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c02ce97e0a802b85f6021e822c89f8bf57d5cd GIT binary patch literal 1255 zcmaJ>TWs4@7*5+{G#S+&C!qC#> zf>5N3P6jO*Cz>ug*(_DmW=)kea&m$gZ^+nyiF`;j%w@}y8)>p*SH}C`m?DXeieF2U zyQHecc_L%Gh!7GMt+hG06y;+|p4>m~}PjA}rKViGiEnn7G0ZO<>G|7q;2?NwGCM3s?eued6%hd$B+ z*kQJ{#~$S=DFE(%=E+UkmlEI*%3llUf~8Ja9YU1Vui0IbGBkW_gHB%Rd&!!ioX zs40O?i9I{};kle7GMvE7(rk`la=gTI)47=>%?q@^iL-nUo3}h4S}N-KHn8t5mVP8w z&bSErwp+37 zNJJ8?a|{r5Q3R0Z5s-LB1WHOwYC@7pCHWND#cL1cZ?{kJ368_*(UDWUDyb<}0y@o# zfMF016iMWPCb6obAxT$JlB6(2DrlXDTB&!0`!m??4F(qWMhjVZo?JXQmz`1*58Z=& zcDmB|S-E@j?BoFGix0flckqdS4jsPNzhfWyWIM98GxcLs89C(~dw%$_t;JjX-SD}E zfiGV;{8Q%8r}w9x>EEigW81>`kvnU@pK)4+xk9@+bNj9L!AAZ@SZ@q|)&BmY3+HZx zul~BeG4|}-;L%cHViQGQX?^zFfO0&#cHwel=d`lH9sJ-@Sl@n*(8J2>%Ac`IxyY?Q z{=GhWvC#gu-~Ia7*n{=+;qM?Ul_wy1+u7ho;=`>EwP^g~R@{unBds`!#@}tluZQpS zm)M~nYEifJWJGx?_6DcTy>#uh%>!H9=hb^(v`=m3F1{L>db=<5_tm+_&knAQ2EU$s Mu9UqpbNZeC0BbUo^Z)<= literal 0 HcmV?d00001 diff --git a/example/windows/RNLocalizeSampleApp/Assets/StoreLogo.png b/example/windows/RNLocalizeSampleApp/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..7385b56c0e4d3c6b0efe3324aa1194157d837826 GIT binary patch literal 1451 zcmaJ>eN5D57_Z|bH;{0+1#mbl)eTU3{h)Wf7EZV?;HD@XL@{B`Ui%(2aMxQ~xdXSv z5nzWi(LW)U2=Vc-cY@s7nPt{i0hc6!7xN4NNHI#EQl>YNBy8l4%x9gr_W-j zEZMQmmTIy(>;lblRfh`dIyTgc9W5d!VP$L4(kKrN1c5G~(O_#xG zAJCNTstD^5SeXFB+&$h=ToJP2H>xr$iqPs-#O*;4(!Fjw25-!gEb*)mU}=)J;Iu>w zxK(5XoD0wrPSKQ~rbL^Cw6O_03*l*}i=ydbu7adJ6y;%@tjFeXIXT+ms30pmbOP%Q zX}S;+LBh8Tea~TSkHzvX6$rYb)+n&{kSbIqh|c7hmlxmwSiq5iVhU#iEQ<>a18|O^Sln-8t&+t`*{qBWo5M?wFM(JuimAOb5!K#D}XbslM@#1ZVz_;!9U zpfEpLAOz=0g@bd6Xj_ILi-x^!M}73h^o@}hM$1jflTs|Yuj9AL@A3<-?MV4!^4q`e z)fO@A;{9K^?W?DbnesnPr6kK>$zaKo&;FhFd(GYFCIU^T+OIMb%Tqo+P%oq(IdX7S zf6+HLO?7o0m+p>~Tp5UrXWh!UH!wZ5kv!E`_w)PTpI(#Iw{AS`gH4^b(bm^ZCq^FZ zY9DD7bH}rq9mg88+KgA$Zp!iWncuU2n1AuIa@=sWvUR-s`Qb{R*kk(SPU^`$6BXz8 zn#7yaFOIK%qGxyi`dYtm#&qqox0$h=pNi#u=M8zUG@bpiZ=3sT=1}Trr}39cC)H|v zbL?W)=&s4zrh)7>L(|cc%$1#!zfL?HjpeP%T+x_a+jZ16b^iKOHxFEX$7d|8${H-* zIrOJ5w&i$>*D>AKaIoYg`;{L@jM((Kt?$N$5OnuPqVvq**Nm}(f0wwOF%iX_Pba;V z;m@wxX&NcV3?<1+u?A{y_DIj7#m3Af1rCE)o`D&Y3}0%7E;iX1yMDiS)sh0wKi!36 zL!Wmq?P^Ku&rK~HJd97KkLTRl>ScGFYZNlYytWnhmuu|)L&ND8_PmkayQb{HOY640 bno1(wj@u8DCVuFR|31B*4ek@pZJqxCDDe1x literal 0 HcmV?d00001 diff --git a/example/windows/RNLocalizeSampleApp/Assets/Wide310x150Logo.scale-200.png b/example/windows/RNLocalizeSampleApp/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..288995b397fdbef1fb7e85afd71445d5de1952c5 GIT binary patch literal 3204 zcmbVPeQXow8NYmBd90>}0NP?GhXW~VaeThm=a0tV#EwJMI!)6M3}|c4_Bl3=Kd>G0 z(GHx1wl<7(tP?FsOQkTilSo*iIvF%uArExJ73~P zSv1xEy!U(Wd4A9D`FQV@W3@F^qJ@PEF$@z`Z!*BbFsS(^?B zyiAzJ+q})bkgiQHWqEb*jJD-coHYr1^iocg)l!Qa{Xqs-l~6J}p-|##ZHYofskQ3$ zI0;xzXyhazBeXhIsg5A=%ufo@f)1yy&ScKS0;HF^!r_2UE^lpZEom(+@duma3awTv zCrCL-%D_SvYWIcdHkmI}#50(fkUi)Qgx!80ju>g1za^}ff>JI8Z@^-iCiaCgg@TgF z+vtE?Q9{VQUX&MW9SYYmGcxA14%N2@7FwBTD4N<(2{nWgV8$e3?-F=L^&FrtWn~(U_Q~~^uYiyeY6-KoTnfh9AWz@ zIKje0)u!_Lw)E}G!#kEfwKVdNt(UAf9*f>tEL_(=xco-T%jTi@7YlC3hs2ik%Le0H ztj}RTeCF(5mwvi3_56>-yB?l;J>-1%!9~=fs|QcNG3J~a@JCu`4SB460s0ZO+##4fFUSGLcj_ja^fL4&BKALfb#$6$O?>P@qx2Agl^x0i&ugt zsy5Pyu=()`7HRMG3IB7F1@`_ z+-!J%#i6e^U$e#+C%Q>_qVRzWRsG^W_n+@OcX@vzI&z;mzHNb!GQ?LWA(wtpqHqTM z1OFw_{Zn?fD)p)`c`kOgv{de=v@suGRqY{N^U7gI1VF3*F=obwaXI6ob5__Yn zVTguS!%(NI09J8x#AO_aW!9W7k*UvB;IWDFC3srwftr{kHj%g)fvnAm;&h_dnl~

MY- zf+K}sCe8qU6Ujs`3ua{U0Of$R_gVQBuUA za0v=mu#vIOqiiAZOr&h*$WyOw&k-xr$;G4Ixa!#TJNr>95(h>l%)PUy4p+^SgR(uR zta%k*?ny-+nAr8spEk1fo{J4i!b^Fia`N{_F6@zidA2ZTTrjl#^5Z-2KfB@Cu}l9s z(*|Z2jc?p~vn2f)3y9i*7zJV1L{$?|&q)4oaT;uXi6>1GkRXVTOzAz(RHEmr=eFIi z`}<>-Q?K0GN8!IYxeP1XKXO+jsJbp~o^);Bc;%b7Flpe7;1`Ny@3r7ZR;?R)aJt8C ziNlEC<@3f_lIV4TwV}&e;D!Ee5_|e#g0LUh=5vmYWYm7&2h*M>QPKvGh9-)wfMMW3 z8J9b%1k7dzPzO0_NGQy92BZ^FR6R~6;^6?lqO;-QUP4BY%cG%3vEhbm#>4vIhPBh3 z-+pZGjh$x%Hp{?=FHsMp0&wNPlj00us{&`1ZOZTqs8%4X&xH=UDr*xyBW(Zp&Em94 zf)ZSfn#yg0N)>!1kWdkqJ^S*z0FF5|fj&qcE#Na|%OY0$uO>!&hP+1ywfD_WXk@4J(?MBftK7>$Nvqh@tDuarN%PrTLQ2Uzysx>UV=V zk^RrDSvdQ?0;=hY67EgII-f4`t=+i*yS=Y~!XlqIy_4x&%+OdfbKOFPXS2X5%4R{N z$SQMX^AK6(fA const& packageProviders) +{ + UNREFERENCED_PARAMETER(packageProviders); +} + +} diff --git a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.h b/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.h new file mode 100644 index 0000000..f28bb8b --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.h @@ -0,0 +1,10 @@ +// AutolinkedNativeModules.g.h contents generated by "react-native autolink-windows" +// clang-format off +#pragma once + +namespace winrt::Microsoft::ReactNative +{ + +void RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector const& packageProviders); + +} diff --git a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.props b/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.props new file mode 100644 index 0000000..f5db933 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.props @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.targets b/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.targets new file mode 100644 index 0000000..85bc237 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.targets @@ -0,0 +1,6 @@ + + + + + + diff --git a/example/windows/RNLocalizeSampleApp/MainPage.cpp b/example/windows/RNLocalizeSampleApp/MainPage.cpp new file mode 100644 index 0000000..158c159 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/MainPage.cpp @@ -0,0 +1,20 @@ +#include "pch.h" +#include "MainPage.h" +#if __has_include("MainPage.g.cpp") +#include "MainPage.g.cpp" +#endif + +#include "App.h" + +using namespace winrt; +using namespace Windows::UI::Xaml; + +namespace winrt::RNLocalizeSampleApp::implementation +{ + MainPage::MainPage() + { + InitializeComponent(); + auto app = Application::Current().as(); + ReactRootView().ReactNativeHost(app->Host()); + } +} diff --git a/example/windows/RNLocalizeSampleApp/MainPage.h b/example/windows/RNLocalizeSampleApp/MainPage.h new file mode 100644 index 0000000..497c684 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/MainPage.h @@ -0,0 +1,19 @@ +#pragma once +#include "MainPage.g.h" +#include + +namespace winrt::RNLocalizeSampleApp::implementation +{ + struct MainPage : MainPageT + { + MainPage(); + }; +} + +namespace winrt::RNLocalizeSampleApp::factory_implementation +{ + struct MainPage : MainPageT + { + }; +} + diff --git a/example/windows/RNLocalizeSampleApp/MainPage.idl b/example/windows/RNLocalizeSampleApp/MainPage.idl new file mode 100644 index 0000000..c65e111 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/MainPage.idl @@ -0,0 +1,8 @@ +namespace RNLocalizeSampleApp +{ + [default_interface] + runtimeclass MainPage : Windows.UI.Xaml.Controls.Page + { + MainPage(); + } +} diff --git a/example/windows/RNLocalizeSampleApp/MainPage.xaml b/example/windows/RNLocalizeSampleApp/MainPage.xaml new file mode 100644 index 0000000..40f7e4b --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/MainPage.xaml @@ -0,0 +1,16 @@ + + + diff --git a/example/windows/RNLocalizeSampleApp/Package.appxmanifest b/example/windows/RNLocalizeSampleApp/Package.appxmanifest new file mode 100644 index 0000000..d69218b --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/Package.appxmanifest @@ -0,0 +1,50 @@ + + + + + + + + + + RNLocalizeSampleApp + namro + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example/windows/RNLocalizeSampleApp/PropertySheet.props b/example/windows/RNLocalizeSampleApp/PropertySheet.props new file mode 100644 index 0000000..5942ba3 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/PropertySheet.props @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj b/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj new file mode 100644 index 0000000..12515b3 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj @@ -0,0 +1,196 @@ + + + + + true + true + true + {eec382ff-948d-444c-8318-03380e8a3088} + RNLocalizeSampleApp + RNLocalizeSampleApp + en-US + 16.0 + true + Windows Store + 10.0 + 10.0.18362.0 + 10.0.16299.0 + RNLocalizeSampleApp_TemporaryKey.pfx + 7F5FF536DF12FBB03D5AE657CA37218B48F2BF52 + password + + + + $([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), 'node_modules\react-native-windows\package.json'))\node_modules\react-native-windows\ + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + Application + Unicode + + + true + true + + + false + true + false + + + + + + + + + + + + + + + + + Use + pch.h + $(IntDir)pch.pch + Level4 + %(AdditionalOptions) /bigobj + 4453;28204 + + + + + _DEBUG;%(PreprocessorDefinitions) + + + + + NDEBUG;%(PreprocessorDefinitions) + + + + + MainPage.xaml + Code + + + + + + App.xaml + + + + + Designer + + + + + Designer + + + + + + + + + + + + + + MainPage.xaml + Code + + + + + Create + + + App.xaml + + + + + + App.xaml + + + MainPage.xaml + Code + + + + + + + false + + + + + Designer + + + + + + + + + This project references targets in your node_modules\react-native-windows folder. The missing file is {0}. + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + diff --git a/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj.filters b/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj.filters new file mode 100644 index 0000000..2aa08b7 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj.filters @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + Assets + + + + + + + + {e48dc53e-40b1-40cb-970a-f89935452892} + + + + + + + + + + + + + \ No newline at end of file diff --git a/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp_TemporaryKey.pfx b/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp_TemporaryKey.pfx new file mode 100644 index 0000000000000000000000000000000000000000..35f1f1f961173537132396a33888b3fe3b982be4 GIT binary patch literal 2590 zcmZXUc|6qH8^^!Hn8}c(m_kCKFfwCb+C;LBtl5oyEY}`avVCnsq%6&i?DDfkwi#Jc zhO&f4)?}AmE@`C5{nqRL?tT4Uzt?#^=XuWi^PK0LKhAluAc~&}#*777hY_rjaoTY^ zhha!q9?1F{4zki9+=>Me!2d`rn{be29SgE7L-rBD_V+G!6pSekg#W;T@Nd`?2-JTu zRGb5TsHfj}hOw!MWnx0Ug@f?XexJhNvstPe{AP@^0jb zQwCLkq;M8S7zm2y+2TJj^s2#Shba2EvqCu61g-Q;r*`Sv_SeaNNUn2t!SF}D}pQ%Ijcz9{VOX?PuGnpEb@k;--Oo=sDPai=P} z?sPknGj=)i-7{>1Y}VT|+L=@Ib0Z!0Z*HlsH_BfsTl`q*Ua+2=wnjCO=c~C)6%>u) zYh5@QFiaY;wqRlRG1}AL>05VBK2%$3^@WllU|apNWK1tL7R{ZIaO(1HZVUGT@NUI> zdsVkuoNa#7+}GxE@q+5JKZeC0Ac0aZ^m1{d^VsTvBaZ;{2DPm| ziu;3rAdi2sWJPVHyQC5L=ZE$Kih1)WLIhoyV9- zxj4Qne`$XIx5D5ZXG3qxZTo3Oogq^R>wWVD*)#7{L@wmz$~UQ5Qb?|AP46U(z8R)#8bo?9EpB` zSw-znKYX)Hmf6_8p~dT1N~nA}l{fAfNt*3Jv1^s!Jx>M2pux>>J8tmA*n`n?mGwR6Z^9 z<}3@-NnOzeFHbR;*u8b5jhR@BrNBup2PG%-*6B|RSJ;FN6wK$#UWHmtwr4qM<5_hZ zA2YK2h+2ypg505N3gcPz7Vf4}A~GaWd!D?FMD5HXedzG??wW(6jN=SjFb+(jRcf5^D^@^*T(P)3Z zl^xozBGbr&-(J35^nO~=TxGEcp9HeuGnuf&*_T?Y;e1Tud`nf=NXB-IikNAu9ywR4 zkD#{Mr5N)^4JGtEF6tfj=s)d}l^2JA!(jjbU~T_}Jhvu7mf;S+>yPP-?l#kI->zV?uQuI`%j8(sT@F{!Y)cTnr-W?i!u64|8sC?! zYvy5H5VR2yLPLxI#YJ8+A%kP zys>_~XzY2HZSqd;uJ+Yaq%pqv-Q2Lkn>%4aD4kg25Q)G$REgQ=-`!qmCbWcT*(^7l znVvnZUyePWuNSZo{L(*z&dF)`6hz-S{!z7=TXa;CR<~{_!w6Dhs#wu{rH0E|8o*pY zw3jp!gD>CRw`#xL$Hh2rOYHZfKm9^Z952%8?FMV4u>ue6Ojfa{ycFS@_ULgVx`C~i z|28sp$Y8Adk@TG0UN_3T)5zO;$}cgb8{dHWIuWrG+grAMHHU9r-A<1)of#kHBRS5Q z6!89lCLWZ2gmGnOYn3v^EB!jxeCy?klwj@j9q7#@oGP8B^Nxxw`70LYGw;D{-#-Q{8Y?-t+1!PD7$T=?FiquOlY#$(HmO zncYkBNGOa-g^{=L-$!&tn`$P%k1oLGcy^|@7HYB|xis8Sx4TaMSRU(5e<0tqqVBMb z6bpVLhl6(qhkW$YW?!lV9%%1g@hOU{owO4a5r1~SY7HpczXGqq$#J&@vS&niUf-+n zRh)Qkq3o836A@OJ4!Aj~dX26bK91Cx6!eKYrl5IfF^)-QSJ;>?;b~A~<0UHC#8y!A z`H#XIlkJ$iPZ}v=*(*td+FuGRuBATxrhPpu^=u{W84l6M=ochwIU zGYaC5fUaIm8gg)}7Pa+AcV9;0VHLugNP^y`n4nuM{@w}ebR6QuaysT*fV3rHasb&g z^S*JAOUS|!ARC69%ZP7z@J1*p0G%<}ZSQx|W?+&-pO#$3l$3UJQ(bPE*1Oo^u?1e2 zG5l(ug^1MRKyftrQ-t}HO!zUoG_XtsNyu`-s$qq&NCb-%2Qw2toTqeG?8Sny0elTO nsolVZx;d~HGM}!iz97)@^TYlH*_4xK literal 0 HcmV?d00001 diff --git a/example/windows/RNLocalizeSampleApp/ReactPackageProvider.cpp b/example/windows/RNLocalizeSampleApp/ReactPackageProvider.cpp new file mode 100644 index 0000000..fb899c0 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/ReactPackageProvider.cpp @@ -0,0 +1,15 @@ +#include "pch.h" +#include "ReactPackageProvider.h" +#include "NativeModules.h" + +using namespace winrt::Microsoft::ReactNative; + +namespace winrt::RNLocalizeSampleApp::implementation +{ + +void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept +{ + AddAttributedModules(packageBuilder); +} + +} // namespace winrt::RNLocalizeSampleApp::implementation diff --git a/example/windows/RNLocalizeSampleApp/ReactPackageProvider.h b/example/windows/RNLocalizeSampleApp/ReactPackageProvider.h new file mode 100644 index 0000000..f3e582a --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/ReactPackageProvider.h @@ -0,0 +1,13 @@ +#pragma once + +#include "winrt/Microsoft.ReactNative.h" + +namespace winrt::RNLocalizeSampleApp::implementation +{ + struct ReactPackageProvider : winrt::implements + { + public: // IReactPackageProvider + void CreatePackage(winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder) noexcept; + }; +} // namespace winrt::RNLocalizeSampleApp::implementation + diff --git a/example/windows/RNLocalizeSampleApp/packages.config b/example/windows/RNLocalizeSampleApp/packages.config new file mode 100644 index 0000000..7ad3ffb --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/example/windows/RNLocalizeSampleApp/pch.cpp b/example/windows/RNLocalizeSampleApp/pch.cpp new file mode 100644 index 0000000..bcb5590 --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/example/windows/RNLocalizeSampleApp/pch.h b/example/windows/RNLocalizeSampleApp/pch.h new file mode 100644 index 0000000..13f3eec --- /dev/null +++ b/example/windows/RNLocalizeSampleApp/pch.h @@ -0,0 +1,26 @@ +#pragma once + +#define NOMINMAX + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include diff --git a/example/yarn.lock b/example/yarn.lock index b4a611b..7876e3a 100644 --- a/example/yarn.lock +++ b/example/yarn.lock @@ -886,6 +886,36 @@ sudo-prompt "^9.0.0" wcwidth "^1.0.1" +"@react-native-windows/cli@0.63.11": + version "0.63.11" + resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.63.11.tgz#239c7d905c9198fbbb08b117acb6260d5ce94828" + integrity sha512-RRfeoBwFIIdctcvT8Ynrew7kdYCqnGY/35CrW6M2/G+f3ZVwHhTpdF8I5zyLAQskvFgztRE40MdMofylgcRI0Q== + dependencies: + "@react-native-windows/telemetry" "^0.63.5" + chalk "^3.0.0" + cli-spinners "^2.2.0" + envinfo "^7.5.0" + find-up "^4.1.0" + glob "^7.1.1" + inquirer "^3.0.6" + mustache "^4.0.1" + nuget-exe "5.8.0" + ora "^3.4.0" + semver "^7.1.3" + shelljs "^0.8.4" + username "^5.1.0" + uuid "^3.3.2" + xml-parser "^1.2.1" + xmldom "^0.5.0" + xpath "^0.0.27" + +"@react-native-windows/telemetry@^0.63.5": + version "0.63.5" + resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.63.5.tgz#77d3a490b26490a642e7d7ce21cd5c06b768f4be" + integrity sha512-Ifd54IIcGbPjwAGfjJkRfdk5+SNtc9oCWgKMrJszIrlJ1REYVUXBo+6Xw3taKyA1Jf1eCB7DWlb98/NbqdLgcg== + dependencies: + applicationinsights "^1.8.8" + "@types/eslint-scope@^3.7.0": version "3.7.0" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" @@ -1295,6 +1325,16 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +applicationinsights@^1.8.8: + version "1.8.10" + resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.8.10.tgz#fffa482cd1519880fb888536a87081ac05130667" + integrity sha512-ZLDA7mShh4mP2Z/HlFolmvhBPX1LfnbIWXrselyYVA7EKjHhri1fZzpu2EiWAmfbRxNBY6fRjoPJWbx5giKy4A== + dependencies: + cls-hooked "^4.2.2" + continuation-local-storage "^3.2.1" + diagnostic-channel "0.3.1" + diagnostic-channel-publishers "0.4.4" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1407,11 +1447,26 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== +async-hook-jl@^1.7.6: + version "1.7.6" + resolved "https://registry.yarnpkg.com/async-hook-jl/-/async-hook-jl-1.7.6.tgz#4fd25c2f864dbaf279c610d73bf97b1b28595e68" + integrity sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg== + dependencies: + stack-chain "^1.3.7" + async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async-listener@^0.6.0: + version "0.6.10" + resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" + integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== + dependencies: + semver "^5.3.0" + shimmer "^1.1.0" + async@^2.4.0, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1774,6 +1829,11 @@ cli-spinners@^2.0.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== +cli-spinners@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" @@ -1802,6 +1862,15 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +cls-hooked@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/cls-hooked/-/cls-hooked-4.2.2.tgz#ad2e9a4092680cdaffeb2d3551da0e225eae1908" + integrity sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw== + dependencies: + async-hook-jl "^1.7.6" + emitter-listener "^1.0.1" + semver "^5.4.1" + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -1946,6 +2015,14 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +continuation-local-storage@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" + integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== + dependencies: + async-listener "^0.6.0" + emitter-listener "^1.1.1" + convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -2175,6 +2252,18 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== +diagnostic-channel-publishers@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.4.4.tgz#57c3b80b7e7f576f95be3a257d5e94550f0082d6" + integrity sha512-l126t01d2ZS9EreskvEtZPrcgstuvH3rbKy82oUhUrVmBaGx4hO9wECdl3cvZbKDYjMF3QJDB5z5dL9yWAjvZQ== + +diagnostic-channel@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-0.3.1.tgz#7faa143e107f861be3046539eb4908faab3f53fd" + integrity sha512-6eb9YRrimz8oTr5+JDzGmSYnXy5V7YnK5y/hd8AUDK1MssHjQKm9LlD6NSrHx4vMDF3+e/spI2hmWTviElgWZA== + dependencies: + semver "^5.3.0" + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -2205,6 +2294,13 @@ electron-to-chromium@^1.3.571: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.584.tgz#506cf7ba5895aafa8241876ab028654b61fd9ceb" integrity sha512-NB3DzrTzJFhWkUp+nl2KtUtoFzrfGXTir2S+BU4tXGyXH9vlluPuFpE3pTKeH7+PY460tHLjKzh6K2+TWwW+Ww== +emitter-listener@^1.0.1, emitter-listener@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" + integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== + dependencies: + shimmer "^1.2.0" + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -2254,6 +2350,11 @@ enquirer@^2.3.6: dependencies: ansi-colors "^4.1.1" +envinfo@^7.5.0: + version "7.7.4" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" + integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== + envinfo@^7.7.2, envinfo@^7.7.3: version "7.7.3" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" @@ -2769,7 +2870,7 @@ glob-to-regexp@^0.4.1: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.3, glob@^7.1.3: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.3: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3064,6 +3165,11 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + interpret@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" @@ -3151,6 +3257,13 @@ is-core-module@^2.0.0: dependencies: has "^1.0.3" +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3652,6 +3765,13 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -3667,6 +3787,13 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -3684,6 +3811,15 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +mem@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" @@ -4099,7 +4235,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.1.0: +mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -4164,6 +4300,11 @@ multicast-dns@^6.0.1: dns-packet "^1.3.1" thunky "^1.0.2" +mustache@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -4275,6 +4416,11 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +nuget-exe@5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/nuget-exe/-/nuget-exe-5.8.0.tgz#45287c4ad8308a5a7057913b32c08998fe7fdc82" + integrity sha512-m95SBWa+SJNOfR0GTwdQ3OwK2915Ts3XvajYx0iaOZYydwvz6reJyptiNGf+HQhvTe5viNiRAmGXxNww9obZjw== + nullthrows@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" @@ -4427,11 +4573,21 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -4792,6 +4948,31 @@ react-native-web@0.14.8: prop-types "^15.6.0" react-timer-mixin "^0.13.4" +react-native-windows@0.63.26: + version "0.63.26" + resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.63.26.tgz#af5213c5a0f7ecfd013701531490e9120b9192e4" + integrity sha512-ZbxskcsR+7nJ8uqXnnuZgHHzBB8gZ7RJ556skiTUXlXKs1vh4/PODmSvvNroX/56UXw35/Zi/YtapT/sMqgPJQ== + dependencies: + "@babel/runtime" "^7.8.4" + "@react-native-windows/cli" "0.63.11" + abort-controller "^3.0.0" + anser "^1.4.9" + base64-js "^1.1.2" + event-target-shim "^5.0.1" + fbjs "^1.0.0" + fbjs-scripts "^1.1.0" + invariant "^2.2.4" + nullthrows "^1.1.1" + pretty-format "^24.9.0" + promise "^8.0.3" + prop-types "^15.7.2" + react-devtools-core "^4.6.0" + regenerator-runtime "^0.13.2" + scheduler "0.19.1" + stacktrace-parser "^0.1.3" + use-subscription "^1.0.0" + whatwg-fetch "^3.0.0" + react-native@0.63.3: version "0.63.3" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.63.3.tgz#4a7f6540e049ff41810887bbd1125abc4672f3bf" @@ -4875,6 +5056,13 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + rechoir@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" @@ -5010,6 +5198,14 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@^1.1.6: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1, resolve@^1.9.0: version "1.18.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" @@ -5043,6 +5239,13 @@ rimraf@^2.5.4, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + rimraf@~2.2.6: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" @@ -5166,7 +5369,7 @@ selfsigned@^1.10.7: dependencies: node-forge "^0.10.0" -semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -5176,6 +5379,13 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.1.3: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -5299,6 +5509,20 @@ shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shelljs@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shimmer@^1.1.0, shimmer@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -5467,6 +5691,11 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +stack-chain@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-1.3.7.tgz#d192c9ff4ea6a22c94c4dd459171e3f00cea1285" + integrity sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU= + stack-utils@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" @@ -5883,6 +6112,14 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +username@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/username/-/username-5.1.0.tgz#a7f9325adce2d0166448cdd55d4985b1360f2508" + integrity sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg== + dependencies: + execa "^1.0.0" + mem "^4.3.0" + utf8@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" @@ -6187,6 +6424,13 @@ xcode@^2.0.0: simple-plist "^1.0.0" uuid "^3.3.2" +xml-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/xml-parser/-/xml-parser-1.2.1.tgz#c31f4c34f2975db82ad013222120592736156fcd" + integrity sha1-wx9MNPKXXbgq0BMiISBZJzYVb80= + dependencies: + debug "^2.2.0" + xmlbuilder@^9.0.7: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" @@ -6204,6 +6448,16 @@ xmldom@0.1.x: resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== +xmldom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.5.0.tgz#193cb96b84aa3486127ea6272c4596354cb4962e" + integrity sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA== + +xpath@^0.0.27: + version "0.0.27" + resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.27.tgz#dd3421fbdcc5646ac32c48531b4d7e9d0c2cfa92" + integrity sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ== + xpipe@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" @@ -6224,6 +6478,11 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yargs-parser@^13.1.2: version "13.1.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" diff --git a/metro.config.js b/metro.config.js new file mode 100644 index 0000000..1b710a4 --- /dev/null +++ b/metro.config.js @@ -0,0 +1,29 @@ +/** + * Metro configuration for React Native + * https://github.com/facebook/react-native + * + * @format + */ +const path = require('path'); +const blacklist = require('metro-config/src/defaults/blacklist'); + +module.exports = { + resolver: { + blacklistRE: blacklist([ + // This stops "react-native run-windows" from causing the metro server to crash if its already running + new RegExp( + `${path.resolve(__dirname, 'windows').replace(/[/\\]/g, '/')}.*`, + ), + // This prevents "react-native run-windows" from hitting: EBUSY: resource busy or locked, open msbuild.ProjectImports.zip + /.*\.ProjectImports\.zip/, + ]), + }, + transformer: { + getTransformOptions: async () => ({ + transform: { + experimentalImportSupport: false, + inlineRequires: false, + }, + }), + }, +}; diff --git a/package.json b/package.json index 16ceb16..760f156 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,8 @@ ], "scripts": { "format": "prettier '**/*.{js,json,md,ts,tsx}' --write", - "prepare": "bob build" + "prepare": "bob build", + "windows": "react-native run-windows" }, "@react-native-community/bob": { "source": "src", @@ -61,6 +62,7 @@ "prettier": "^2.1.2", "react": "16.13.1", "react-native": "0.63.3", + "react-native-windows": "0.63.26", "typescript": "^4.0.5" } } diff --git a/windows/.gitignore b/windows/.gitignore new file mode 100644 index 0000000..4ea0c7b --- /dev/null +++ b/windows/.gitignore @@ -0,0 +1,92 @@ +*AppPackages* +*BundleArtifacts* + +#OS junk files +[Tt]humbs.db +*.DS_Store + +#Visual Studio files +*.[Oo]bj +*.user +*.aps +*.pch +*.vspscc +*.vssscc +*_i.c +*_p.c +*.ncb +*.suo +*.tlb +*.tlh +*.bak +*.[Cc]ache +*.ilk +*.log +*.lib +*.sbr +*.sdf +*.opensdf +*.opendb +*.unsuccessfulbuild +ipch/ +[Oo]bj/ +[Bb]in +[Dd]ebug*/ +[Rr]elease*/ +Ankh.NoLoad + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +#MonoDevelop +*.pidb +*.userprefs + +#Tooling +_ReSharper*/ +*.resharper +[Tt]est[Rr]esult* +*.sass-cache + +#Project files +[Bb]uild/ + +#Subversion files +.svn + +# Office Temp Files +~$* + +# vim Temp Files +*~ + +#NuGet +packages/ +*.nupkg + +#ncrunch +*ncrunch* +*crunch*.local.xml + +# visual studio database projects +*.dbmdl + +#Test files +*.testsettings + +#Other files +*.DotSettings +.vs/ +*project.lock.json + +#Files generated by the VS build +**/Generated Files/** + diff --git a/windows/ReactNativeLocalize.sln b/windows/ReactNativeLocalize.sln new file mode 100644 index 0000000..db7158a --- /dev/null +++ b/windows/ReactNativeLocalize.sln @@ -0,0 +1,187 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29215.179 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactNativeLocalize", "ReactNativeLocalize\ReactNativeLocalize.vcxproj", "{10E2379C-4264-444A-8656-B3D7E83ACB44}" + ProjectSection(ProjectDependencies) = postProject + {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {F7D32BD0-2749-483E-9A0D-1635EF7E3136} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Folly", "..\node_modules\react-native-windows\Folly\Folly.vcxproj", "{A990658C-CE31-4BCC-976F-0FC6B1AF693D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactCommon", "..\node_modules\react-native-windows\ReactCommon\ReactCommon.vcxproj", "{A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}" + ProjectSection(ProjectDependencies) = postProject + {A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {A990658C-CE31-4BCC-976F-0FC6B1AF693D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Chakra", "..\node_modules\react-native-windows\Chakra\Chakra.vcxitems", "{C38970C0-5FBF-4D69-90D8-CBAC225AE895}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative", "..\node_modules\react-native-windows\Microsoft.ReactNative\Microsoft.ReactNative.vcxproj", "{F7D32BD0-2749-483E-9A0D-1635EF7E3136}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JSI.Shared", "..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems", "{0CC28589-39E4-4288-B162-97B959F8B843}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "JSI.Universal", "..\node_modules\react-native-windows\JSI\Universal\JSI.Universal.vcxproj", "{A62D504A-16B8-41D2-9F19-E2E86019E5E4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Cxx", "..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems", "{DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Common", "..\node_modules\react-native-windows\Common\Common.vcxproj", "{FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ReactNative", "ReactNative", "{5EA20F54-880A-49F3-99FA-4B3FE54E8AB1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.ReactNative.Shared", "..\node_modules\react-native-windows\Shared\Shared.vcxitems", "{2049DBE9-8D13-42C9-AE4B-413AE38FFFD0}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mso", "..\node_modules\react-native-windows\Mso\Mso.vcxitems", "{84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Include", "..\node_modules\react-native-windows\include\Include.vcxitems", "{EF074BA1-2D54-4D49-A28E-5E040B47CD2E}" +EndProject +Global + GlobalSection(SharedMSBuildProjectFiles) = preSolution + ..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\Shared\Shared.vcxitems*{2049dbe9-8d13-42c9-ae4b-413ae38fffd0}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\Mso\Mso.vcxitems*{84e05bfa-cbaf-4f0d-bfb6-4ce85742a57e}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{a62d504a-16b8-41d2-9f19-e2e86019e5e4}*SharedItemsImports = 4 + ..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{c38970c0-5fbf-4d69-90d8-cbac225ae895}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{da8b35b3-da00-4b02-bde6-6a397b3fd46b}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\include\Include.vcxitems*{ef074ba1-2d54-4d49-a28e-5e040b47cd2e}*SharedItemsImports = 9 + ..\node_modules\react-native-windows\Chakra\Chakra.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + ..\node_modules\react-native-windows\Microsoft.ReactNative.Cxx\Microsoft.ReactNative.Cxx.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + ..\node_modules\react-native-windows\Mso\Mso.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + ..\node_modules\react-native-windows\Shared\Shared.vcxitems*{f7d32bd0-2749-483e-9a0d-1635ef7e3136}*SharedItemsImports = 4 + EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|ARM.ActiveCfg = Debug|ARM + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|ARM.Build.0 = Debug|ARM + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|ARM.Deploy.0 = Debug|ARM + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|ARM64.Build.0 = Debug|ARM64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|x64.ActiveCfg = Debug|x64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|x64.Build.0 = Debug|x64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|x64.Deploy.0 = Debug|x64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|x86.ActiveCfg = Debug|Win32 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|x86.Build.0 = Debug|Win32 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|x86.Deploy.0 = Debug|Win32 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|ARM.ActiveCfg = Release|ARM + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|ARM.Build.0 = Release|ARM + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|ARM.Deploy.0 = Release|ARM + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|ARM64.ActiveCfg = Release|ARM64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|ARM64.Build.0 = Release|ARM64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|ARM64.Deploy.0 = Release|ARM64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|x64.ActiveCfg = Release|x64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|x64.Build.0 = Release|x64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|x64.Deploy.0 = Release|x64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|x86.ActiveCfg = Release|Win32 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|x86.Build.0 = Release|Win32 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|x86.Deploy.0 = Release|Win32 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.ActiveCfg = Debug|ARM + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM.Build.0 = Debug|ARM + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|ARM64.Build.0 = Debug|ARM64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.ActiveCfg = Debug|x64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x64.Build.0 = Debug|x64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.ActiveCfg = Debug|Win32 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Debug|x86.Build.0 = Debug|Win32 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.ActiveCfg = Release|ARM + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM.Build.0 = Release|ARM + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.ActiveCfg = Release|ARM64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|ARM64.Build.0 = Release|ARM64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.ActiveCfg = Release|x64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x64.Build.0 = Release|x64 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.ActiveCfg = Release|Win32 + {A990658C-CE31-4BCC-976F-0FC6B1AF693D}.Release|x86.Build.0 = Release|Win32 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.ActiveCfg = Debug|ARM + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM.Build.0 = Debug|ARM + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|ARM64.Build.0 = Debug|ARM64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.ActiveCfg = Debug|x64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x64.Build.0 = Debug|x64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.ActiveCfg = Debug|Win32 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Debug|x86.Build.0 = Debug|Win32 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.ActiveCfg = Release|ARM + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM.Build.0 = Release|ARM + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.ActiveCfg = Release|ARM64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|ARM64.Build.0 = Release|ARM64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.ActiveCfg = Release|x64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x64.Build.0 = Release|x64 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.ActiveCfg = Release|Win32 + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD}.Release|x86.Build.0 = Release|Win32 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.ActiveCfg = Debug|ARM + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM.Build.0 = Debug|ARM + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|ARM64.Build.0 = Debug|ARM64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.ActiveCfg = Debug|x64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x64.Build.0 = Debug|x64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.ActiveCfg = Debug|Win32 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Debug|x86.Build.0 = Debug|Win32 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.ActiveCfg = Release|ARM + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM.Build.0 = Release|ARM + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.ActiveCfg = Release|ARM64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|ARM64.Build.0 = Release|ARM64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.ActiveCfg = Release|x64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x64.Build.0 = Release|x64 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.ActiveCfg = Release|Win32 + {F7D32BD0-2749-483E-9A0D-1635EF7E3136}.Release|x86.Build.0 = Release|Win32 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.ActiveCfg = Debug|ARM + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM.Build.0 = Debug|ARM + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|ARM64.Build.0 = Debug|ARM64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.ActiveCfg = Debug|x64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x64.Build.0 = Debug|x64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.ActiveCfg = Debug|Win32 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Debug|x86.Build.0 = Debug|Win32 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.ActiveCfg = Release|ARM + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM.Build.0 = Release|ARM + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.ActiveCfg = Release|ARM64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|ARM64.Build.0 = Release|ARM64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.ActiveCfg = Release|x64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x64.Build.0 = Release|x64 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.ActiveCfg = Release|Win32 + {A62D504A-16B8-41D2-9F19-E2E86019E5E4}.Release|x86.Build.0 = Release|Win32 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.ActiveCfg = Debug|ARM + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM.Build.0 = Debug|ARM + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|ARM64.Build.0 = Debug|ARM64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.ActiveCfg = Debug|x64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x64.Build.0 = Debug|x64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.ActiveCfg = Debug|Win32 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Debug|x86.Build.0 = Debug|Win32 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.ActiveCfg = Release|ARM + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM.Build.0 = Release|ARM + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.ActiveCfg = Release|ARM64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|ARM64.Build.0 = Release|ARM64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.ActiveCfg = Release|x64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32 + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {A990658C-CE31-4BCC-976F-0FC6B1AF693D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {A9D95A91-4DB7-4F72-BEB6-FE8A5C89BFBD} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {C38970C0-5FBF-4D69-90D8-CBAC225AE895} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {0CC28589-39E4-4288-B162-97B959F8B843} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {A62D504A-16B8-41D2-9F19-E2E86019E5E4} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {DA8B35B3-DA00-4B02-BDE6-6A397B3FD46B} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {2049DBE9-8D13-42C9-AE4B-413AE38FFFD0} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {84E05BFA-CBAF-4F0D-BFB6-4CE85742A57E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + {EF074BA1-2D54-4D49-A28E-5E040B47CD2E} = {5EA20F54-880A-49F3-99FA-4B3FE54E8AB1} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D43FAD39-F619-437D-BB40-04A3982ACB6A} + EndGlobalSection +EndGlobal diff --git a/windows/ReactNativeLocalize/PropertySheet.props b/windows/ReactNativeLocalize/PropertySheet.props new file mode 100644 index 0000000..5942ba3 --- /dev/null +++ b/windows/ReactNativeLocalize/PropertySheet.props @@ -0,0 +1,16 @@ + + + + + + + + \ No newline at end of file diff --git a/windows/ReactNativeLocalize/ReactNativeLocalize.def b/windows/ReactNativeLocalize/ReactNativeLocalize.def new file mode 100644 index 0000000..24e7c12 --- /dev/null +++ b/windows/ReactNativeLocalize/ReactNativeLocalize.def @@ -0,0 +1,3 @@ +EXPORTS +DllCanUnloadNow = WINRT_CanUnloadNow PRIVATE +DllGetActivationFactory = WINRT_GetActivationFactory PRIVATE diff --git a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj b/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj new file mode 100644 index 0000000..e34e281 --- /dev/null +++ b/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj @@ -0,0 +1,157 @@ + + + + + true + true + true + {10e2379c-4264-444a-8656-b3d7e83acb44} + ReactNativeLocalize + ReactNativeLocalize + en-US + 16.0 + true + Windows Store + 10.0 + 10.0.18362.0 + 10.0.16299.0 + + + + $([MSBuild]::GetDirectoryNameOfFileAbove($(SolutionDir), 'node_modules\react-native-windows\package.json'))\node_modules\react-native-windows\ + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + DynamicLibrary + Unicode + false + + + true + true + + + false + true + false + + + + + + + + + + + + + + + + + Use + pch.h + $(IntDir)pch.pch + Level4 + %(AdditionalOptions) /bigobj + 4453;28204 + _WINRT_DLL;%(PreprocessorDefinitions) + $(WindowsSDK_WindowsMetadata);$(AdditionalUsingDirectories) + + + Console + true + ReactNativeLocalize.def + + + + + _DEBUG;%(PreprocessorDefinitions) + + + + + NDEBUG;%(PreprocessorDefinitions) + + + + + ReactPackageProvider.idl + + + + + + + Create + + + ReactPackageProvider.idl + + + + + + + + + + + + + + + + + This project references targets in your node_modules\react-native-windows folder that are missing. The missing file is {0}. + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + diff --git a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters b/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters new file mode 100644 index 0000000..84e1f4f --- /dev/null +++ b/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/windows/ReactNativeLocalize/ReactNativeModule.h b/windows/ReactNativeLocalize/ReactNativeModule.h new file mode 100644 index 0000000..20cb29a --- /dev/null +++ b/windows/ReactNativeLocalize/ReactNativeModule.h @@ -0,0 +1,33 @@ +#pragma once + +#include "JSValue.h" +#include "NativeModules.h" + +using namespace winrt::Microsoft::ReactNative; + +namespace winrt::ReactNativeLocalize +{ + +REACT_MODULE(ReactNativeModule, L"ReactNativeLocalize") +struct ReactNativeModule +{ + // See https://microsoft.github.io/react-native-windows/docs/native-modules for details on writing native modules + + REACT_INIT(Initialize) + void Initialize(ReactContext const &reactContext) noexcept + { + m_reactContext = reactContext; + } + + REACT_METHOD(sampleMethod) + void sampleMethod(std::string stringArgument, int numberArgument, std::function &&callback) noexcept + { + // TODO: Implement some actually useful functionality + callback("Received numberArgument: " + std::to_string(numberArgument) + " stringArgument: " + stringArgument); + } + + private: + ReactContext m_reactContext{nullptr}; +}; + +} // namespace winrt::ReactNativeLocalize diff --git a/windows/ReactNativeLocalize/ReactPackageProvider.cpp b/windows/ReactNativeLocalize/ReactPackageProvider.cpp new file mode 100644 index 0000000..aeac99f --- /dev/null +++ b/windows/ReactNativeLocalize/ReactPackageProvider.cpp @@ -0,0 +1,19 @@ +#include "pch.h" +#include "ReactPackageProvider.h" +#if __has_include("ReactPackageProvider.g.cpp") +#include "ReactPackageProvider.g.cpp" +#endif + +#include "ReactNativeModule.h" + +using namespace winrt::Microsoft::ReactNative; + +namespace winrt::ReactNativeLocalize::implementation +{ + +void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept +{ + AddAttributedModules(packageBuilder); +} + +} // namespace winrt::ReactNativeLocalize::implementation diff --git a/windows/ReactNativeLocalize/ReactPackageProvider.h b/windows/ReactNativeLocalize/ReactPackageProvider.h new file mode 100644 index 0000000..58e2c93 --- /dev/null +++ b/windows/ReactNativeLocalize/ReactPackageProvider.h @@ -0,0 +1,21 @@ +#pragma once +#include "ReactPackageProvider.g.h" + +using namespace winrt::Microsoft::ReactNative; + +namespace winrt::ReactNativeLocalize::implementation +{ + struct ReactPackageProvider : ReactPackageProviderT + { + ReactPackageProvider() = default; + + void CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept; + }; +} // namespace winrt::ReactNativeLocalize::implementation + +namespace winrt::ReactNativeLocalize::factory_implementation +{ + +struct ReactPackageProvider : ReactPackageProviderT {}; + +} // namespace winrt::ReactNativeLocalize::factory_implementation diff --git a/windows/ReactNativeLocalize/ReactPackageProvider.idl b/windows/ReactNativeLocalize/ReactPackageProvider.idl new file mode 100644 index 0000000..cab9410 --- /dev/null +++ b/windows/ReactNativeLocalize/ReactPackageProvider.idl @@ -0,0 +1,9 @@ +namespace ReactNativeLocalize +{ + [webhosthidden] + [default_interface] + runtimeclass ReactPackageProvider : Microsoft.ReactNative.IReactPackageProvider + { + ReactPackageProvider(); + }; +} diff --git a/windows/ReactNativeLocalize/packages.config b/windows/ReactNativeLocalize/packages.config new file mode 100644 index 0000000..d413965 --- /dev/null +++ b/windows/ReactNativeLocalize/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/windows/ReactNativeLocalize/pch.cpp b/windows/ReactNativeLocalize/pch.cpp new file mode 100644 index 0000000..bcb5590 --- /dev/null +++ b/windows/ReactNativeLocalize/pch.cpp @@ -0,0 +1 @@ +#include "pch.h" diff --git a/windows/ReactNativeLocalize/pch.h b/windows/ReactNativeLocalize/pch.h new file mode 100644 index 0000000..794450c --- /dev/null +++ b/windows/ReactNativeLocalize/pch.h @@ -0,0 +1,26 @@ +#pragma once + +#define NOMINMAX + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +using namespace winrt::Windows::Foundation; diff --git a/yarn.lock b/yarn.lock index c4880a0..0f382cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1271,6 +1271,36 @@ sudo-prompt "^9.0.0" wcwidth "^1.0.1" +"@react-native-windows/cli@0.63.11": + version "0.63.11" + resolved "https://registry.yarnpkg.com/@react-native-windows/cli/-/cli-0.63.11.tgz#239c7d905c9198fbbb08b117acb6260d5ce94828" + integrity sha512-RRfeoBwFIIdctcvT8Ynrew7kdYCqnGY/35CrW6M2/G+f3ZVwHhTpdF8I5zyLAQskvFgztRE40MdMofylgcRI0Q== + dependencies: + "@react-native-windows/telemetry" "^0.63.5" + chalk "^3.0.0" + cli-spinners "^2.2.0" + envinfo "^7.5.0" + find-up "^4.1.0" + glob "^7.1.1" + inquirer "^3.0.6" + mustache "^4.0.1" + nuget-exe "5.8.0" + ora "^3.4.0" + semver "^7.1.3" + shelljs "^0.8.4" + username "^5.1.0" + uuid "^3.3.2" + xml-parser "^1.2.1" + xmldom "^0.5.0" + xpath "^0.0.27" + +"@react-native-windows/telemetry@^0.63.5": + version "0.63.5" + resolved "https://registry.yarnpkg.com/@react-native-windows/telemetry/-/telemetry-0.63.5.tgz#77d3a490b26490a642e7d7ce21cd5c06b768f4be" + integrity sha512-Ifd54IIcGbPjwAGfjJkRfdk5+SNtc9oCWgKMrJszIrlJ1REYVUXBo+6Xw3taKyA1Jf1eCB7DWlb98/NbqdLgcg== + dependencies: + applicationinsights "^1.8.8" + "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" @@ -1499,6 +1529,16 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +applicationinsights@^1.8.8: + version "1.8.10" + resolved "https://registry.yarnpkg.com/applicationinsights/-/applicationinsights-1.8.10.tgz#fffa482cd1519880fb888536a87081ac05130667" + integrity sha512-ZLDA7mShh4mP2Z/HlFolmvhBPX1LfnbIWXrselyYVA7EKjHhri1fZzpu2EiWAmfbRxNBY6fRjoPJWbx5giKy4A== + dependencies: + cls-hooked "^4.2.2" + continuation-local-storage "^3.2.1" + diagnostic-channel "0.3.1" + diagnostic-channel-publishers "0.4.4" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1584,6 +1624,21 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-hook-jl@^1.7.6: + version "1.7.6" + resolved "https://registry.yarnpkg.com/async-hook-jl/-/async-hook-jl-1.7.6.tgz#4fd25c2f864dbaf279c610d73bf97b1b28595e68" + integrity sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg== + dependencies: + stack-chain "^1.3.7" + +async-listener@^0.6.0: + version "0.6.10" + resolved "https://registry.yarnpkg.com/async-listener/-/async-listener-0.6.10.tgz#a7c97abe570ba602d782273c0de60a51e3e17cbc" + integrity sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw== + dependencies: + semver "^5.3.0" + shimmer "^1.1.0" + async@0.9.x: version "0.9.2" resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" @@ -1920,6 +1975,11 @@ cli-spinners@^2.0.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.5.0.tgz#12763e47251bf951cb75c201dfa58ff1bcb2d047" integrity sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ== +cli-spinners@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" + integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== + cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" @@ -1968,6 +2028,15 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= +cls-hooked@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/cls-hooked/-/cls-hooked-4.2.2.tgz#ad2e9a4092680cdaffeb2d3551da0e225eae1908" + integrity sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw== + dependencies: + async-hook-jl "^1.7.6" + emitter-listener "^1.0.1" + semver "^5.4.1" + collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" @@ -2090,6 +2159,14 @@ connect@^3.6.5: parseurl "~1.3.3" utils-merge "1.0.1" +continuation-local-storage@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz#11f613f74e914fe9b34c92ad2d28fe6ae1db7ffb" + integrity sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA== + dependencies: + async-listener "^0.6.0" + emitter-listener "^1.1.1" + convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -2302,6 +2379,18 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +diagnostic-channel-publishers@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.4.4.tgz#57c3b80b7e7f576f95be3a257d5e94550f0082d6" + integrity sha512-l126t01d2ZS9EreskvEtZPrcgstuvH3rbKy82oUhUrVmBaGx4hO9wECdl3cvZbKDYjMF3QJDB5z5dL9yWAjvZQ== + +diagnostic-channel@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/diagnostic-channel/-/diagnostic-channel-0.3.1.tgz#7faa143e107f861be3046539eb4908faab3f53fd" + integrity sha512-6eb9YRrimz8oTr5+JDzGmSYnXy5V7YnK5y/hd8AUDK1MssHjQKm9LlD6NSrHx4vMDF3+e/spI2hmWTviElgWZA== + dependencies: + semver "^5.3.0" + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -2331,6 +2420,13 @@ electron-to-chromium@^1.3.591: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.596.tgz#c7ed98512c7ff36ddcbfed9e54e6355335c35257" integrity sha512-nLO2Wd2yU42eSoNJVQKNf89CcEGqeFZd++QsnN2XIgje1s/19AgctfjLIbPORlvcCO8sYjLwX4iUgDdusOY8Sg== +emitter-listener@^1.0.1, emitter-listener@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/emitter-listener/-/emitter-listener-1.1.2.tgz#56b140e8f6992375b3d7cb2cab1cc7432d9632e8" + integrity sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ== + dependencies: + shimmer "^1.2.0" + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -2367,6 +2463,11 @@ enquirer@^2.3.6: dependencies: ansi-colors "^4.1.1" +envinfo@^7.5.0: + version "7.7.4" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" + integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== + envinfo@^7.7.2: version "7.7.3" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" @@ -2848,7 +2949,7 @@ glob-parent@^5.1.0: dependencies: is-glob "^4.0.1" -glob@^7.1.3, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3105,6 +3206,11 @@ inquirer@^7.0.4: strip-ansi "^6.0.0" through "^2.3.6" +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -3155,6 +3261,13 @@ is-core-module@^2.1.0: dependencies: has "^1.0.3" +is-core-module@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -3690,6 +3803,13 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -3705,6 +3825,13 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -3717,6 +3844,15 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +mem@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" @@ -4127,7 +4263,7 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== -mimic-fn@^2.1.0: +mimic-fn@^2.0.0, mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== @@ -4179,6 +4315,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +mustache@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -4285,6 +4426,11 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" +nuget-exe@5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/nuget-exe/-/nuget-exe-5.8.0.tgz#45287c4ad8308a5a7057913b32c08998fe7fdc82" + integrity sha512-m95SBWa+SJNOfR0GTwdQ3OwK2915Ts3XvajYx0iaOZYydwvz6reJyptiNGf+HQhvTe5viNiRAmGXxNww9obZjw== + nullthrows@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" @@ -4415,11 +4561,21 @@ p-cancelable@^1.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -4687,6 +4843,31 @@ react-is@^16.12.0, react-is@^16.8.1, react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-native-windows@0.63.26: + version "0.63.26" + resolved "https://registry.yarnpkg.com/react-native-windows/-/react-native-windows-0.63.26.tgz#af5213c5a0f7ecfd013701531490e9120b9192e4" + integrity sha512-ZbxskcsR+7nJ8uqXnnuZgHHzBB8gZ7RJ556skiTUXlXKs1vh4/PODmSvvNroX/56UXw35/Zi/YtapT/sMqgPJQ== + dependencies: + "@babel/runtime" "^7.8.4" + "@react-native-windows/cli" "0.63.11" + abort-controller "^3.0.0" + anser "^1.4.9" + base64-js "^1.1.2" + event-target-shim "^5.0.1" + fbjs "^1.0.0" + fbjs-scripts "^1.1.0" + invariant "^2.2.4" + nullthrows "^1.1.1" + pretty-format "^24.9.0" + promise "^8.0.3" + prop-types "^15.7.2" + react-devtools-core "^4.6.0" + regenerator-runtime "^0.13.2" + scheduler "0.19.1" + stacktrace-parser "^0.1.3" + use-subscription "^1.0.0" + whatwg-fetch "^3.0.0" + react-native@0.63.3: version "0.63.3" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.63.3.tgz#4a7f6540e049ff41810887bbd1125abc4672f3bf" @@ -4747,6 +4928,13 @@ readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@~2.3.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -4843,6 +5031,14 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@^1.1.6: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: version "1.19.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" @@ -5004,7 +5200,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -5014,6 +5210,13 @@ semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.1.3: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -5112,6 +5315,20 @@ shell-quote@^1.6.1: resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== +shelljs@^0.8.4: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shimmer@^1.1.0, shimmer@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -5249,6 +5466,11 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +stack-chain@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-1.3.7.tgz#d192c9ff4ea6a22c94c4dd459171e3f00cea1285" + integrity sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU= + stack-utils@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.3.tgz#db7a475733b5b8bf6521907b18891d29006f7751" @@ -5608,6 +5830,14 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +username@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/username/-/username-5.1.0.tgz#a7f9325adce2d0166448cdd55d4985b1360f2508" + integrity sha512-PCKbdWw85JsYMvmCv5GH3kXmM66rCd9m1hBEDutPNv94b/pqCMT4NtcKyeWYvLFiE8b+ha1Jdl8XAaUdPn5QTg== + dependencies: + execa "^1.0.0" + mem "^4.3.0" + util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -5741,6 +5971,13 @@ xcode@^2.0.0: simple-plist "^1.0.0" uuid "^3.3.2" +xml-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/xml-parser/-/xml-parser-1.2.1.tgz#c31f4c34f2975db82ad013222120592736156fcd" + integrity sha1-wx9MNPKXXbgq0BMiISBZJzYVb80= + dependencies: + debug "^2.2.0" + xmlbuilder@^9.0.7: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" @@ -5758,6 +5995,16 @@ xmldom@0.1.x: resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== +xmldom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.5.0.tgz#193cb96b84aa3486127ea6272c4596354cb4962e" + integrity sha512-Foaj5FXVzgn7xFzsKeNIde9g6aFBxTPi37iwsno8QvApmtg7KYrr+OPyRHcJF7dud2a5nGRBXK3n0dL62Gf7PA== + +xpath@^0.0.27: + version "0.0.27" + resolved "https://registry.yarnpkg.com/xpath/-/xpath-0.0.27.tgz#dd3421fbdcc5646ac32c48531b4d7e9d0c2cfa92" + integrity sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ== + xpipe@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/xpipe/-/xpipe-1.0.5.tgz#8dd8bf45fc3f7f55f0e054b878f43a62614dafdf" @@ -5778,6 +6025,11 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + yaml@^1.10.0, yaml@^1.7.2: version "1.10.0" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" From c009245bb6a56003b9db8c40c02ea8e15864e22d Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 30 Mar 2021 14:51:08 -0700 Subject: [PATCH 02/20] autolink the module --- example/windows/RNLocalizeSampleApp.sln | 18 ++++++++++++++++++ .../AutolinkedNativeModules.g.cpp | 6 +++++- .../AutolinkedNativeModules.g.targets | 4 ++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/example/windows/RNLocalizeSampleApp.sln b/example/windows/RNLocalizeSampleApp.sln index 6a3a092..7fb11b0 100644 --- a/example/windows/RNLocalizeSampleApp.sln +++ b/example/windows/RNLocalizeSampleApp.sln @@ -35,6 +35,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mso", "..\node_modules\reac EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Include", "..\node_modules\react-native-windows\include\Include.vcxitems", "{EF074BA1-2D54-4D49-A28E-5E040B47CD2E}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactNativeLocalize", "..\node_modules\react-native-localize\windows\ReactNativeLocalize\ReactNativeLocalize.vcxproj", "{10E2379C-4264-444A-8656-B3D7E83ACB44}" +EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution ..\node_modules\react-native-windows\JSI\Shared\JSI.Shared.vcxitems*{0cc28589-39e4-4288-b162-97b959f8b843}*SharedItemsImports = 9 @@ -164,6 +166,22 @@ Global {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x64.Build.0 = Release|x64 {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.ActiveCfg = Release|Win32 {FCA38F3C-7C73-4C47-BE4E-32F77FA8538D}.Release|x86.Build.0 = Release|Win32 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|ARM.ActiveCfg = Debug|ARM + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|ARM.Build.0 = Debug|ARM + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|ARM64.Build.0 = Debug|ARM64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|x64.ActiveCfg = Debug|x64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|x64.Build.0 = Debug|x64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|x86.ActiveCfg = Debug|Win32 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Debug|x86.Build.0 = Debug|Win32 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|ARM.ActiveCfg = Release|ARM + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|ARM.Build.0 = Release|ARM + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|ARM64.ActiveCfg = Release|ARM64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|ARM64.Build.0 = Release|ARM64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|x64.ActiveCfg = Release|x64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|x64.Build.0 = Release|x64 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|x86.ActiveCfg = Release|Win32 + {10E2379C-4264-444A-8656-B3D7E83ACB44}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.cpp b/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.cpp index 7ab2110..e394a6b 100644 --- a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.cpp +++ b/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.cpp @@ -3,12 +3,16 @@ #include "pch.h" #include "AutolinkedNativeModules.g.h" +// Includes from react-native-localize +#include + namespace winrt::Microsoft::ReactNative { void RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector const& packageProviders) { - UNREFERENCED_PARAMETER(packageProviders); + // IReactPackageProviders from react-native-localize + packageProviders.Append(winrt::ReactNativeLocalize::ReactPackageProvider()); } } diff --git a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.targets b/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.targets index 85bc237..ca07546 100644 --- a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.targets +++ b/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.targets @@ -2,5 +2,9 @@ + + + {10e2379c-4264-444a-8656-b3d7e83acb44} + From 33de7bc5a58f674b5bc43b3bcc78a52ec15d4bbe Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 30 Mar 2021 15:07:03 -0700 Subject: [PATCH 03/20] update module --- .gitignore | 3 + example/package.json | 1 - .../ReactNativeLocalize/RNLocalizeModule.cpp | 174 ++++++++++++++++++ .../ReactNativeLocalize/RNLocalizeModule.h | 42 +++++ .../RNLocalizeModuleTypes.h | 74 ++++++++ .../ReactNativeLocalize.vcxproj | 9 +- .../ReactNativeLocalize.vcxproj.filters | 4 +- .../ReactNativeLocalize/ReactNativeModule.h | 33 ---- 8 files changed, 302 insertions(+), 38 deletions(-) create mode 100644 windows/ReactNativeLocalize/RNLocalizeModule.cpp create mode 100644 windows/ReactNativeLocalize/RNLocalizeModule.h create mode 100644 windows/ReactNativeLocalize/RNLocalizeModuleTypes.h delete mode 100644 windows/ReactNativeLocalize/ReactNativeModule.h diff --git a/.gitignore b/.gitignore index c0ef7ec..405e3e4 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,6 @@ Pods/ # Bundle artifact *.jsbundle + +bin/ +msbuild.binlog diff --git a/example/package.json b/example/package.json index b415ffd..4b868e7 100644 --- a/example/package.json +++ b/example/package.json @@ -6,7 +6,6 @@ "clean-modules": "rimraf ./node_modules/react-native-localize/{example,node_modules}", "clean": "rimraf ./node_modules ./ios/Pods", "postinstall": "yarn clean-modules", - "postinstall:ios": "yarn pod-update", "pod-update": "cd ./ios && pod update && cd ..", "start-metro": "react-native start", "start-webpack": "webpack serve", diff --git a/windows/ReactNativeLocalize/RNLocalizeModule.cpp b/windows/ReactNativeLocalize/RNLocalizeModule.cpp new file mode 100644 index 0000000..73561af --- /dev/null +++ b/windows/ReactNativeLocalize/RNLocalizeModule.cpp @@ -0,0 +1,174 @@ +#include "RNLocalizeModule.h" + +#include "winrt/Windows.Globalization.h" + +using namespace winrt::Microsoft::ReactNative; + +namespace winrt::ReactNativeLocalize +{ + +std::vector RNLocalizeModule::getLocaleNames() +{ + std::vector locales; + for (winrt::hstring locale : winrt::Windows::Globalization::ApplicationLanguages::Languages()) + { + locales.push_back(locale); + } + return locales; +} + +std::vector RNLocalizeModule::getLocales(std::vector localeStrings) +{ + std::vector localesArray; + for (winrt::hstring localeString : localeStrings) + { + Locale locale; + std::string languageCode = getLanguageCode(to_string(localeString)); + locale.languageCode = languageCode; + + std::string countryCode = getCountryCode(to_string(localeString)); + locale.countryCode = countryCode; + + locale.isRTL = getIsRTL(languageCode); + + std::string scriptCode = getScriptCode(localeString); + locale.scriptCode = scriptCode; + + std::string languageTag = languageCode + "-" + scriptCode + "-" + countryCode; + locale.languageTag = languageTag; + + localesArray.push_back(locale); + } + return localesArray; +} + +std::string RNLocalizeModule::getCountryCode(std::string locale) +{ + return locale.substr(locale.find("-") + 1, locale.length()); +} + +std::string RNLocalizeModule::getLanguageCode(std::string locale) +{ + return locale.substr(0, locale.find("-")); +} + +bool RNLocalizeModule::getIsRTL(std::string languageCode) +{ + return std::find(USES_RTL_LAYOUT.begin(), USES_RTL_LAYOUT.end(), languageCode) != USES_RTL_LAYOUT.end(); +} + +bool RNLocalizeModule::getUsesMetricSystem(std::string countryCode) +{ + return std::find(USES_IMPERIAL.begin(), USES_IMPERIAL.end(), countryCode) == USES_IMPERIAL.end(); +} + +std::string RNLocalizeModule::getTemperatureUnit(std::string countryCode) +{ + return std::find(USES_FAHRENHEIT.begin(), USES_FAHRENHEIT.end(), countryCode) != USES_FAHRENHEIT.end() ? "fahrenheit" : "celsius"; +} + +bool RNLocalizeModule::getUses24HourClock() +{ + return !to_string(winrt::Windows::Globalization::Calendar().GetClock()).compare("24HourClock"); +} + +std::vector RNLocalizeModule::getCurrencies() +{ + std::vector currencies; + for (winrt::hstring currency : winrt::Windows::Globalization::GeographicRegion().CurrenciesInUse()) + { + currencies.push_back(winrt::to_string(currency)); + } + return currencies; +} + +std::string RNLocalizeModule::getScriptCode(winrt::hstring locale) +{ + return winrt::to_string(winrt::Windows::Globalization::Language(locale).Script()); +} + +std::string RNLocalizeModule::getCalendar() +{ + std::string calendar = to_string(winrt::Windows::Globalization::Calendar().GetCalendarSystem()); + calendar = calendar.substr(0, calendar.size() - 8); + std::transform(calendar.begin(), calendar.end(), calendar.begin(), ::tolower); + return calendar; +} + +std::string RNLocalizeModule::getTimeZone() +{ + // Use GetTimeZoneInformation to get the hour bias from GMT and then create a formatted string (KLUDGE) + TIME_ZONE_INFORMATION TimeZoneInfo; + GetTimeZoneInformation(&TimeZoneInfo); + + int hourBias = -TimeZoneInfo.Bias / 60; + char timeZoneBuffer[10]; + snprintf( + timeZoneBuffer, + sizeof(timeZoneBuffer), + "GMT%s%02d:00", + hourBias < 0 ? "-" : "+", + hourBias < 0 ? -hourBias : hourBias); + std::string timeZoneString(timeZoneBuffer); + + return timeZoneString; +} + +NumberFormatSettings RNLocalizeModule::getNumberFormatSettings(std::string locale) +{ + LPCWSTR locale_l = std::wstring(locale.begin(), locale.end()).c_str(); + + NumberFormatSettings numberFormatSettings; + + // Use GetNumberFormatEx to get number formatting based on the passed locale (KLUDGE) + std::string num_s("1000.00"); + std::wstring num_w = std::wstring(num_s.begin(), num_s.end()); + LPCWSTR num_l = num_w.c_str(); + + LPWSTR numberFormatBuffer = new TCHAR[9]; + GetNumberFormatEx(locale_l, NULL, num_l, NULL, numberFormatBuffer, 9); + std::string formattedString = winrt::to_string(numberFormatBuffer); + delete numberFormatBuffer; // this or delete[]? + + numberFormatSettings.decimalSeparator = formattedString.substr(5, 1); + numberFormatSettings.groupingSeparator = formattedString.substr(1, 1); + + return numberFormatSettings; +} + +LocalizationConstants RNLocalizeModule::getExported() +{ + std::vector deviceLocales = getLocaleNames(); + std::string currentLocale = winrt::to_string(deviceLocales[0]); + std::string currentCountryCode = getCountryCode(currentLocale); + + LocalizationConstants constants; + constants.calendar = getCalendar(); + constants.country = currentCountryCode; + constants.currencies = getCurrencies(); + constants.locales = getLocales(deviceLocales); + constants.numberFormatSettings = getNumberFormatSettings(currentLocale); + constants.temperatureUnit = getTemperatureUnit(currentCountryCode); + constants.timeZone = getTimeZone(); + constants.uses24HourClock = getUses24HourClock(); + constants.usesMetricSystem = getUsesMetricSystem(currentCountryCode); + return constants; +} + +void RNLocalizeModule::GetConstants(winrt::Microsoft::ReactNative::ReactConstantProvider &provider) noexcept +{ + provider.Add(L"initialConstants", getExported()); +} + +LocalizationConstants RNLocalizeModule::initialConstants() noexcept +{ + std::vector deviceLocales = getLocaleNames(); + std::string currentLocale = winrt::to_string(deviceLocales[0]); + std::string currentCountryCode = getCountryCode(currentLocale); + + LocalizationConstants constants; + constants.locales = getLocales(deviceLocales); + return constants; +} + +} // namespace winrt::ReactNativeLocalize diff --git a/windows/ReactNativeLocalize/RNLocalizeModule.h b/windows/ReactNativeLocalize/RNLocalizeModule.h new file mode 100644 index 0000000..9afa7c5 --- /dev/null +++ b/windows/ReactNativeLocalize/RNLocalizeModule.h @@ -0,0 +1,42 @@ +#pragma once + +#include "JSValue.h" +#include "NativeModules.h" + +using namespace winrt::Microsoft::ReactNative; + +namespace winrt::ReactNativeLocalize +{ + +REACT_MODULE(RNLocalizeModule, L"ReactNativeLocalize"); +struct RNLocalizeModule +{ + REACT_CONSTANT_PROVIDER(GetConstants) + void RNLocalizeModule::GetConstants(RN::ReactConstantProvider &provider) noexcept; + + REACT_METHOD(initialConstants) + LocalizationConstants initialConstants() noexcept; + +private: + std::vector getLocaleNames(); + std::vector getLocales(std::vector); + std::string getCountryCode(std::string); + std::string getLanguageCode(std::string); + bool getIsRTL(std::string); + bool getUsesMetricSystem(std::string); + std::string getTemperatureUnit(std::string); + bool getUses24HourClock(); + std::vector getCurrencies(); + std::string getScriptCode(winrt::hstring); + std::string getCalendar(); + std::string getTimeZone(); + NumberFormatSettings getNumberFormatSettings(std::string); + LocalizationConstants getExported(); + + const std::array USES_FAHRENHEIT{{"BS", "BZ", "KY", "PR", "PW", "US"}}; + const std::array USES_IMPERIAL{{"LR", "MM", "US"}}; + const std::array USES_RTL_LAYOUT{ + {"ar", "ckb", "fa", "he", "ks", "lrc", "mzn", "ps", "ug", "ur", "yi"}}; +}; + +} // namespace winrt::ReactNativeLocalize diff --git a/windows/ReactNativeLocalize/RNLocalizeModuleTypes.h b/windows/ReactNativeLocalize/RNLocalizeModuleTypes.h new file mode 100644 index 0000000..7c7ab48 --- /dev/null +++ b/windows/ReactNativeLocalize/RNLocalizeModuleTypes.h @@ -0,0 +1,74 @@ +#pragma once + +#include "NativeModules.h" + +#include + +// These should stay aligned with those defined here +// https://github.com/react-native-community/react-native-localize/tree/master/src + +REACT_STRUCT(Locale) +struct Locale +{ + REACT_FIELD(languageCode, L"languageCode") + std::string languageCode; + + REACT_FIELD(scriptCode, L"scriptCode") + std::optional scriptCode; + + REACT_FIELD(countryCode, L"countryCode") + std::string countryCode; + + REACT_FIELD(languageTag, L"languageTag") + std::string languageTag; + + REACT_FIELD(isRTL, L"isRTL") + bool isRTL; +}; + +REACT_STRUCT(NumberFormatSettings) +struct NumberFormatSettings +{ + REACT_FIELD(decimalSeparator, L"decimalSeparator") + std::string decimalSeparator; + + REACT_FIELD(groupingSeparator, L"groupingSeparator") + std::string groupingSeparator; +}; + +REACT_STRUCT(LocalizationConstants) +struct LocalizationConstants +{ + REACT_FIELD(calendar, L"calendar") + std::string calendar; + + REACT_FIELD(country, L"country") + std::string country; + + REACT_FIELD(currencies, L"currencies") + std::vector currencies; + + REACT_FIELD(locales, L"locales") + std::vector locales; + + REACT_FIELD(numberFormatSettings, L"numberFormatSettings") + NumberFormatSettings numberFormatSettings; + + REACT_FIELD(temperatureUnit, L"temperatureUnit") + std::string temperatureUnit; + + REACT_FIELD(timeZone, L"timeZone") + std::string timeZone; + + REACT_FIELD(uses24HourClock, L"uses24HourClock") + bool uses24HourClock; + + REACT_FIELD(usesMetricSystem, L"usesMetricSystem") + bool usesMetricSystem; + + REACT_FIELD(usesAutoDateAndTime, L"usesAutoDateAndTime") + std::optional usesAutoDateAndTime; + + REACT_FIELD(usesAutoTimeZone, L"usesAutoTimeZone") + std::optional usesAutoTimeZone; +}; diff --git a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj b/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj index e34e281..0d73c67 100644 --- a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj +++ b/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj @@ -69,7 +69,8 @@ false - + + @@ -109,16 +110,18 @@ + ReactPackageProvider.idl - + Create + ReactPackageProvider.idl @@ -154,4 +157,4 @@ - + \ No newline at end of file diff --git a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters b/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters index 84e1f4f..567152d 100644 --- a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters +++ b/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters @@ -7,11 +7,13 @@ + - + + diff --git a/windows/ReactNativeLocalize/ReactNativeModule.h b/windows/ReactNativeLocalize/ReactNativeModule.h deleted file mode 100644 index 20cb29a..0000000 --- a/windows/ReactNativeLocalize/ReactNativeModule.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include "JSValue.h" -#include "NativeModules.h" - -using namespace winrt::Microsoft::ReactNative; - -namespace winrt::ReactNativeLocalize -{ - -REACT_MODULE(ReactNativeModule, L"ReactNativeLocalize") -struct ReactNativeModule -{ - // See https://microsoft.github.io/react-native-windows/docs/native-modules for details on writing native modules - - REACT_INIT(Initialize) - void Initialize(ReactContext const &reactContext) noexcept - { - m_reactContext = reactContext; - } - - REACT_METHOD(sampleMethod) - void sampleMethod(std::string stringArgument, int numberArgument, std::function &&callback) noexcept - { - // TODO: Implement some actually useful functionality - callback("Received numberArgument: " + std::to_string(numberArgument) + " stringArgument: " + stringArgument); - } - - private: - ReactContext m_reactContext{nullptr}; -}; - -} // namespace winrt::ReactNativeLocalize From 1d045072c09f6a5bfb6f6ff2c192f6bad0918a78 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 30 Mar 2021 15:44:36 -0700 Subject: [PATCH 04/20] delete comment, fix version, fix header change, remove rnw64 winui3 ref, add includes, fix namespace, --- .../RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj | 5 ++--- windows/ReactNativeLocalize/RNLocalizeModule.cpp | 4 +++- windows/ReactNativeLocalize/RNLocalizeModule.h | 7 ++++--- windows/ReactNativeLocalize/RNLocalizeModuleTypes.h | 1 + .../ReactNativeLocalize/ReactNativeLocalize.vcxproj | 13 ++++++------- .../ReactNativeLocalize/ReactPackageProvider.cpp | 2 +- windows/ReactNativeLocalize/packages.config | 2 +- 7 files changed, 18 insertions(+), 16 deletions(-) diff --git a/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj b/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj index 12515b3..a0c7062 100644 --- a/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj +++ b/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj @@ -80,7 +80,6 @@ - @@ -183,7 +182,7 @@ - + @@ -191,6 +190,6 @@ - + diff --git a/windows/ReactNativeLocalize/RNLocalizeModule.cpp b/windows/ReactNativeLocalize/RNLocalizeModule.cpp index 73561af..134070d 100644 --- a/windows/ReactNativeLocalize/RNLocalizeModule.cpp +++ b/windows/ReactNativeLocalize/RNLocalizeModule.cpp @@ -1,3 +1,5 @@ +#include "pch.h" + #include "RNLocalizeModule.h" #include "winrt/Windows.Globalization.h" @@ -128,7 +130,7 @@ NumberFormatSettings RNLocalizeModule::getNumberFormatSettings(std::string local LPWSTR numberFormatBuffer = new TCHAR[9]; GetNumberFormatEx(locale_l, NULL, num_l, NULL, numberFormatBuffer, 9); std::string formattedString = winrt::to_string(numberFormatBuffer); - delete numberFormatBuffer; // this or delete[]? + delete numberFormatBuffer; numberFormatSettings.decimalSeparator = formattedString.substr(5, 1); numberFormatSettings.groupingSeparator = formattedString.substr(1, 1); diff --git a/windows/ReactNativeLocalize/RNLocalizeModule.h b/windows/ReactNativeLocalize/RNLocalizeModule.h index 9afa7c5..88df9e7 100644 --- a/windows/ReactNativeLocalize/RNLocalizeModule.h +++ b/windows/ReactNativeLocalize/RNLocalizeModule.h @@ -1,8 +1,9 @@ -#pragma once +#pragma once #include "JSValue.h" #include "NativeModules.h" - +#include "RNLocalizeModuleTypes.h" +#include using namespace winrt::Microsoft::ReactNative; namespace winrt::ReactNativeLocalize @@ -12,7 +13,7 @@ REACT_MODULE(RNLocalizeModule, L"ReactNativeLocalize"); struct RNLocalizeModule { REACT_CONSTANT_PROVIDER(GetConstants) - void RNLocalizeModule::GetConstants(RN::ReactConstantProvider &provider) noexcept; + void RNLocalizeModule::GetConstants(winrt::Microsoft::ReactNative::ReactConstantProvider &provider) noexcept; REACT_METHOD(initialConstants) LocalizationConstants initialConstants() noexcept; diff --git a/windows/ReactNativeLocalize/RNLocalizeModuleTypes.h b/windows/ReactNativeLocalize/RNLocalizeModuleTypes.h index 7c7ab48..1f163af 100644 --- a/windows/ReactNativeLocalize/RNLocalizeModuleTypes.h +++ b/windows/ReactNativeLocalize/RNLocalizeModuleTypes.h @@ -3,6 +3,7 @@ #include "NativeModules.h" #include +#include // These should stay aligned with those defined here // https://github.com/react-native-community/react-native-localize/tree/master/src diff --git a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj b/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj index 0d73c67..66bd983 100644 --- a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj +++ b/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj @@ -1,6 +1,6 @@ - + true true @@ -79,7 +79,6 @@ - @@ -146,15 +145,15 @@ - - + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - + + + \ No newline at end of file diff --git a/windows/ReactNativeLocalize/ReactPackageProvider.cpp b/windows/ReactNativeLocalize/ReactPackageProvider.cpp index aeac99f..4297b19 100644 --- a/windows/ReactNativeLocalize/ReactPackageProvider.cpp +++ b/windows/ReactNativeLocalize/ReactPackageProvider.cpp @@ -4,7 +4,7 @@ #include "ReactPackageProvider.g.cpp" #endif -#include "ReactNativeModule.h" +#include "RNLocalizeModule.h" using namespace winrt::Microsoft::ReactNative; diff --git a/windows/ReactNativeLocalize/packages.config b/windows/ReactNativeLocalize/packages.config index d413965..7ad3ffb 100644 --- a/windows/ReactNativeLocalize/packages.config +++ b/windows/ReactNativeLocalize/packages.config @@ -1,5 +1,5 @@  - + \ No newline at end of file From 31c956c50c1650c97d3e1704cafffd71c5b3daeb Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 30 Mar 2021 16:43:23 -0700 Subject: [PATCH 05/20] font comes through as white by default for some reason on windows. Also fix up module name --- example/src/SyncExample.js | 2 ++ example/windows/RNLocalizeSampleApp/MainPage.xaml | 2 +- windows/ReactNativeLocalize/RNLocalizeModule.h | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/example/src/SyncExample.js b/example/src/SyncExample.js index bc7bdd3..f0588b7 100644 --- a/example/src/SyncExample.js +++ b/example/src/SyncExample.js @@ -151,8 +151,10 @@ const styles = StyleSheet.create({ textDecorationLine: "underline", fontWeight: "500", marginBottom: 8, + color: "black", }, value: { textAlign: "left", + color: "black", }, }); diff --git a/example/windows/RNLocalizeSampleApp/MainPage.xaml b/example/windows/RNLocalizeSampleApp/MainPage.xaml index 40f7e4b..762fdeb 100644 --- a/example/windows/RNLocalizeSampleApp/MainPage.xaml +++ b/example/windows/RNLocalizeSampleApp/MainPage.xaml @@ -10,7 +10,7 @@ Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> diff --git a/windows/ReactNativeLocalize/RNLocalizeModule.h b/windows/ReactNativeLocalize/RNLocalizeModule.h index 88df9e7..9e66778 100644 --- a/windows/ReactNativeLocalize/RNLocalizeModule.h +++ b/windows/ReactNativeLocalize/RNLocalizeModule.h @@ -9,7 +9,7 @@ using namespace winrt::Microsoft::ReactNative; namespace winrt::ReactNativeLocalize { -REACT_MODULE(RNLocalizeModule, L"ReactNativeLocalize"); +REACT_MODULE(RNLocalizeModule, L"RNLocalize"); struct RNLocalizeModule { REACT_CONSTANT_PROVIDER(GetConstants) From 573411527b9df09e1c41435fc6ba910bad5eec70 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 30 Mar 2021 16:44:17 -0700 Subject: [PATCH 06/20] for consistency --- example/src/AsyncExample.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/example/src/AsyncExample.js b/example/src/AsyncExample.js index f1f7843..9e5af45 100644 --- a/example/src/AsyncExample.js +++ b/example/src/AsyncExample.js @@ -175,8 +175,10 @@ const styles = StyleSheet.create({ textDecorationLine: "underline", fontWeight: "500", marginBottom: 8, + color: "black", }, value: { textAlign: "left", + color: "black", }, }); From 3b79e40488babf3074bce3bb758e5061194fa32f Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 31 Mar 2021 13:21:17 -0700 Subject: [PATCH 07/20] renamed to RNLocalizeExampleApp from RNLocalizeSampleApp to better align with main repro example app name --- ...SampleApp.sln => RNLocalizeExampleApp.sln} | 2 +- .../.gitignore | 0 .../App.cpp | 12 +++++------ example/windows/RNLocalizeExampleApp/App.h | 19 +++++++++++++++++ example/windows/RNLocalizeExampleApp/App.idl | 3 +++ .../App.xaml | 4 ++-- .../Assets/LockScreenLogo.scale-200.png | Bin .../Assets/SplashScreen.scale-200.png | Bin .../Assets/Square150x150Logo.scale-200.png | Bin .../Assets/Square44x44Logo.scale-200.png | Bin ...x44Logo.targetsize-24_altform-unplated.png | Bin .../Assets/StoreLogo.png | Bin .../Assets/Wide310x150Logo.scale-200.png | Bin .../AutolinkedNativeModules.g.cpp | 0 .../AutolinkedNativeModules.g.h | 0 .../AutolinkedNativeModules.g.props | 0 .../AutolinkedNativeModules.g.targets | 0 .../windows/RNLocalizeExampleApp/MainPage.cpp | 20 ++++++++++++++++++ .../MainPage.h | 4 ++-- .../MainPage.idl | 2 +- .../MainPage.xaml | 4 ++-- .../Package.appxmanifest | 8 +++---- .../PropertySheet.props | 0 .../RNLocalizeExampleApp.vcxproj} | 6 +++--- .../RNLocalizeExampleApp.vcxproj.filters} | 0 .../RNLocalizeExampleApp_TemporaryKey.pfx} | Bin .../ReactPackageProvider.cpp | 4 ++-- .../ReactPackageProvider.h | 12 +++++++++++ .../packages.config | 0 .../pch.cpp | 0 .../pch.h | 0 example/windows/RNLocalizeSampleApp/App.h | 18 ---------------- example/windows/RNLocalizeSampleApp/App.idl | 3 --- .../windows/RNLocalizeSampleApp/MainPage.cpp | 20 ------------------ .../ReactPackageProvider.h | 13 ------------ 35 files changed, 77 insertions(+), 77 deletions(-) rename example/windows/{RNLocalizeSampleApp.sln => RNLocalizeExampleApp.sln} (98%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/.gitignore (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/App.cpp (82%) create mode 100644 example/windows/RNLocalizeExampleApp/App.h create mode 100644 example/windows/RNLocalizeExampleApp/App.idl rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/App.xaml (81%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/Assets/LockScreenLogo.scale-200.png (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/Assets/SplashScreen.scale-200.png (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/Assets/Square150x150Logo.scale-200.png (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/Assets/Square44x44Logo.scale-200.png (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/Assets/Square44x44Logo.targetsize-24_altform-unplated.png (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/Assets/StoreLogo.png (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/Assets/Wide310x150Logo.scale-200.png (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/AutolinkedNativeModules.g.cpp (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/AutolinkedNativeModules.g.h (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/AutolinkedNativeModules.g.props (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/AutolinkedNativeModules.g.targets (100%) create mode 100644 example/windows/RNLocalizeExampleApp/MainPage.cpp rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/MainPage.h (68%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/MainPage.idl (79%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/MainPage.xaml (87%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/Package.appxmanifest (88%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/PropertySheet.props (100%) rename example/windows/{RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj => RNLocalizeExampleApp/RNLocalizeExampleApp.vcxproj} (98%) rename example/windows/{RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj.filters => RNLocalizeExampleApp/RNLocalizeExampleApp.vcxproj.filters} (100%) rename example/windows/{RNLocalizeSampleApp/RNLocalizeSampleApp_TemporaryKey.pfx => RNLocalizeExampleApp/RNLocalizeExampleApp_TemporaryKey.pfx} (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/ReactPackageProvider.cpp (70%) create mode 100644 example/windows/RNLocalizeExampleApp/ReactPackageProvider.h rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/packages.config (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/pch.cpp (100%) rename example/windows/{RNLocalizeSampleApp => RNLocalizeExampleApp}/pch.h (100%) delete mode 100644 example/windows/RNLocalizeSampleApp/App.h delete mode 100644 example/windows/RNLocalizeSampleApp/App.idl delete mode 100644 example/windows/RNLocalizeSampleApp/MainPage.cpp delete mode 100644 example/windows/RNLocalizeSampleApp/ReactPackageProvider.h diff --git a/example/windows/RNLocalizeSampleApp.sln b/example/windows/RNLocalizeExampleApp.sln similarity index 98% rename from example/windows/RNLocalizeSampleApp.sln rename to example/windows/RNLocalizeExampleApp.sln index 7fb11b0..5c358d5 100644 --- a/example/windows/RNLocalizeSampleApp.sln +++ b/example/windows/RNLocalizeExampleApp.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29215.179 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RNLocalizeSampleApp", "RNLocalizeSampleApp\RNLocalizeSampleApp.vcxproj", "{EEC382FF-948D-444C-8318-03380E8A3088}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RNLocalizeExampleApp", "RNLocalizeExampleApp\RNLocalizeExampleApp.vcxproj", "{EEC382FF-948D-444C-8318-03380E8A3088}" ProjectSection(ProjectDependencies) = postProject {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {F7D32BD0-2749-483E-9A0D-1635EF7E3136} EndProjectSection diff --git a/example/windows/RNLocalizeSampleApp/.gitignore b/example/windows/RNLocalizeExampleApp/.gitignore similarity index 100% rename from example/windows/RNLocalizeSampleApp/.gitignore rename to example/windows/RNLocalizeExampleApp/.gitignore diff --git a/example/windows/RNLocalizeSampleApp/App.cpp b/example/windows/RNLocalizeExampleApp/App.cpp similarity index 82% rename from example/windows/RNLocalizeSampleApp/App.cpp rename to example/windows/RNLocalizeExampleApp/App.cpp index ab1a9aa..691d7dd 100644 --- a/example/windows/RNLocalizeSampleApp/App.cpp +++ b/example/windows/RNLocalizeExampleApp/App.cpp @@ -5,8 +5,8 @@ #include "AutolinkedNativeModules.g.h" #include "ReactPackageProvider.h" -using namespace winrt::RNLocalizeSampleApp; -using namespace winrt::RNLocalizeSampleApp::implementation; +using namespace winrt::RNLocalizeExampleApp; +using namespace winrt::RNLocalizeExampleApp::implementation; using namespace winrt; using namespace Windows::UI::Xaml; using namespace Windows::UI::Xaml::Controls; @@ -48,12 +48,12 @@ App::App() noexcept /// will be used such as when the application is launched to open a specific file. /// /// Details about the launch request and process. -void App::OnLaunched(activation::LaunchActivatedEventArgs const& e) +void App::OnLaunched(activation::LaunchActivatedEventArgs const &e) { super::OnLaunched(e); Frame rootFrame = Window::Current().Content().as(); - rootFrame.Navigate(xaml_typename(), box_value(e.Arguments())); + rootFrame.Navigate(xaml_typename(), box_value(e.Arguments())); } ///

@@ -63,7 +63,7 @@ void App::OnLaunched(activation::LaunchActivatedEventArgs const& e) /// /// The source of the suspend request. /// Details about the suspend request. -void App::OnSuspending([[maybe_unused]] IInspectable const& sender, [[maybe_unused]] SuspendingEventArgs const& e) +void App::OnSuspending([[maybe_unused]] IInspectable const &sender, [[maybe_unused]] SuspendingEventArgs const &e) { // Save application state and stop any background activity } @@ -73,7 +73,7 @@ void App::OnSuspending([[maybe_unused]] IInspectable const& sender, [[maybe_unus /// /// The Frame which failed navigation /// Details about the navigation failure -void App::OnNavigationFailed(IInspectable const&, NavigationFailedEventArgs const& e) +void App::OnNavigationFailed(IInspectable const &, NavigationFailedEventArgs const &e) { throw hresult_error(E_FAIL, hstring(L"Failed to load Page ") + e.SourcePageType().Name); } diff --git a/example/windows/RNLocalizeExampleApp/App.h b/example/windows/RNLocalizeExampleApp/App.h new file mode 100644 index 0000000..c157ef7 --- /dev/null +++ b/example/windows/RNLocalizeExampleApp/App.h @@ -0,0 +1,19 @@ +#pragma once + +#include "App.xaml.g.h" + +namespace activation = winrt::Windows::ApplicationModel::Activation; + +namespace winrt::RNLocalizeExampleApp::implementation +{ +struct App : AppT +{ + App() noexcept; + void OnLaunched(activation::LaunchActivatedEventArgs const &); + void OnSuspending(IInspectable const &, Windows::ApplicationModel::SuspendingEventArgs const &); + void OnNavigationFailed(IInspectable const &, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs const &); + +private: + using super = AppT; +}; +} // namespace winrt::RNLocalizeExampleApp::implementation diff --git a/example/windows/RNLocalizeExampleApp/App.idl b/example/windows/RNLocalizeExampleApp/App.idl new file mode 100644 index 0000000..a251bdd --- /dev/null +++ b/example/windows/RNLocalizeExampleApp/App.idl @@ -0,0 +1,3 @@ +namespace RNLocalizeExampleApp +{ +} diff --git a/example/windows/RNLocalizeSampleApp/App.xaml b/example/windows/RNLocalizeExampleApp/App.xaml similarity index 81% rename from example/windows/RNLocalizeSampleApp/App.xaml rename to example/windows/RNLocalizeExampleApp/App.xaml index 225300d..266ed43 100644 --- a/example/windows/RNLocalizeSampleApp/App.xaml +++ b/example/windows/RNLocalizeExampleApp/App.xaml @@ -1,8 +1,8 @@  diff --git a/example/windows/RNLocalizeSampleApp/Assets/LockScreenLogo.scale-200.png b/example/windows/RNLocalizeExampleApp/Assets/LockScreenLogo.scale-200.png similarity index 100% rename from example/windows/RNLocalizeSampleApp/Assets/LockScreenLogo.scale-200.png rename to example/windows/RNLocalizeExampleApp/Assets/LockScreenLogo.scale-200.png diff --git a/example/windows/RNLocalizeSampleApp/Assets/SplashScreen.scale-200.png b/example/windows/RNLocalizeExampleApp/Assets/SplashScreen.scale-200.png similarity index 100% rename from example/windows/RNLocalizeSampleApp/Assets/SplashScreen.scale-200.png rename to example/windows/RNLocalizeExampleApp/Assets/SplashScreen.scale-200.png diff --git a/example/windows/RNLocalizeSampleApp/Assets/Square150x150Logo.scale-200.png b/example/windows/RNLocalizeExampleApp/Assets/Square150x150Logo.scale-200.png similarity index 100% rename from example/windows/RNLocalizeSampleApp/Assets/Square150x150Logo.scale-200.png rename to example/windows/RNLocalizeExampleApp/Assets/Square150x150Logo.scale-200.png diff --git a/example/windows/RNLocalizeSampleApp/Assets/Square44x44Logo.scale-200.png b/example/windows/RNLocalizeExampleApp/Assets/Square44x44Logo.scale-200.png similarity index 100% rename from example/windows/RNLocalizeSampleApp/Assets/Square44x44Logo.scale-200.png rename to example/windows/RNLocalizeExampleApp/Assets/Square44x44Logo.scale-200.png diff --git a/example/windows/RNLocalizeSampleApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/example/windows/RNLocalizeExampleApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png similarity index 100% rename from example/windows/RNLocalizeSampleApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png rename to example/windows/RNLocalizeExampleApp/Assets/Square44x44Logo.targetsize-24_altform-unplated.png diff --git a/example/windows/RNLocalizeSampleApp/Assets/StoreLogo.png b/example/windows/RNLocalizeExampleApp/Assets/StoreLogo.png similarity index 100% rename from example/windows/RNLocalizeSampleApp/Assets/StoreLogo.png rename to example/windows/RNLocalizeExampleApp/Assets/StoreLogo.png diff --git a/example/windows/RNLocalizeSampleApp/Assets/Wide310x150Logo.scale-200.png b/example/windows/RNLocalizeExampleApp/Assets/Wide310x150Logo.scale-200.png similarity index 100% rename from example/windows/RNLocalizeSampleApp/Assets/Wide310x150Logo.scale-200.png rename to example/windows/RNLocalizeExampleApp/Assets/Wide310x150Logo.scale-200.png diff --git a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.cpp b/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.cpp similarity index 100% rename from example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.cpp rename to example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.cpp diff --git a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.h b/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.h similarity index 100% rename from example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.h rename to example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.h diff --git a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.props b/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.props similarity index 100% rename from example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.props rename to example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.props diff --git a/example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.targets b/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.targets similarity index 100% rename from example/windows/RNLocalizeSampleApp/AutolinkedNativeModules.g.targets rename to example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.targets diff --git a/example/windows/RNLocalizeExampleApp/MainPage.cpp b/example/windows/RNLocalizeExampleApp/MainPage.cpp new file mode 100644 index 0000000..039ad3c --- /dev/null +++ b/example/windows/RNLocalizeExampleApp/MainPage.cpp @@ -0,0 +1,20 @@ +#include "pch.h" +#include "MainPage.h" +#if __has_include("MainPage.g.cpp") +#include "MainPage.g.cpp" +#endif + +#include "App.h" + +using namespace winrt; +using namespace Windows::UI::Xaml; + +namespace winrt::RNLocalizeExampleApp::implementation +{ +MainPage::MainPage() +{ + InitializeComponent(); + auto app = Application::Current().as(); + ReactRootView().ReactNativeHost(app->Host()); +} +} // namespace winrt::RNLocalizeExampleApp::implementation diff --git a/example/windows/RNLocalizeSampleApp/MainPage.h b/example/windows/RNLocalizeExampleApp/MainPage.h similarity index 68% rename from example/windows/RNLocalizeSampleApp/MainPage.h rename to example/windows/RNLocalizeExampleApp/MainPage.h index 497c684..503e85d 100644 --- a/example/windows/RNLocalizeSampleApp/MainPage.h +++ b/example/windows/RNLocalizeExampleApp/MainPage.h @@ -2,7 +2,7 @@ #include "MainPage.g.h" #include -namespace winrt::RNLocalizeSampleApp::implementation +namespace winrt::RNLocalizeExampleApp::implementation { struct MainPage : MainPageT { @@ -10,7 +10,7 @@ namespace winrt::RNLocalizeSampleApp::implementation }; } -namespace winrt::RNLocalizeSampleApp::factory_implementation +namespace winrt::RNLocalizeExampleApp::factory_implementation { struct MainPage : MainPageT { diff --git a/example/windows/RNLocalizeSampleApp/MainPage.idl b/example/windows/RNLocalizeExampleApp/MainPage.idl similarity index 79% rename from example/windows/RNLocalizeSampleApp/MainPage.idl rename to example/windows/RNLocalizeExampleApp/MainPage.idl index c65e111..5427801 100644 --- a/example/windows/RNLocalizeSampleApp/MainPage.idl +++ b/example/windows/RNLocalizeExampleApp/MainPage.idl @@ -1,4 +1,4 @@ -namespace RNLocalizeSampleApp +namespace RNLocalizeExampleApp { [default_interface] runtimeclass MainPage : Windows.UI.Xaml.Controls.Page diff --git a/example/windows/RNLocalizeSampleApp/MainPage.xaml b/example/windows/RNLocalizeExampleApp/MainPage.xaml similarity index 87% rename from example/windows/RNLocalizeSampleApp/MainPage.xaml rename to example/windows/RNLocalizeExampleApp/MainPage.xaml index 762fdeb..a2a928e 100644 --- a/example/windows/RNLocalizeSampleApp/MainPage.xaml +++ b/example/windows/RNLocalizeExampleApp/MainPage.xaml @@ -1,8 +1,8 @@ - RNLocalizeSampleApp + RNLocalizeExampleApp namro Assets\StoreLogo.png @@ -31,12 +31,12 @@ + EntryPoint="RNLocalizeExampleApp.App"> diff --git a/example/windows/RNLocalizeSampleApp/PropertySheet.props b/example/windows/RNLocalizeExampleApp/PropertySheet.props similarity index 100% rename from example/windows/RNLocalizeSampleApp/PropertySheet.props rename to example/windows/RNLocalizeExampleApp/PropertySheet.props diff --git a/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj b/example/windows/RNLocalizeExampleApp/RNLocalizeExampleApp.vcxproj similarity index 98% rename from example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj rename to example/windows/RNLocalizeExampleApp/RNLocalizeExampleApp.vcxproj index a0c7062..bec30bc 100644 --- a/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj +++ b/example/windows/RNLocalizeExampleApp/RNLocalizeExampleApp.vcxproj @@ -6,8 +6,8 @@ true true {eec382ff-948d-444c-8318-03380e8a3088} - RNLocalizeSampleApp - RNLocalizeSampleApp + RNLocalizeExampleApp + RNLocalizeExampleApp en-US 16.0 true @@ -15,7 +15,7 @@ 10.0 10.0.18362.0 10.0.16299.0 - RNLocalizeSampleApp_TemporaryKey.pfx + RNLocalizeExampleApp_TemporaryKey.pfx 7F5FF536DF12FBB03D5AE657CA37218B48F2BF52 password diff --git a/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj.filters b/example/windows/RNLocalizeExampleApp/RNLocalizeExampleApp.vcxproj.filters similarity index 100% rename from example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp.vcxproj.filters rename to example/windows/RNLocalizeExampleApp/RNLocalizeExampleApp.vcxproj.filters diff --git a/example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp_TemporaryKey.pfx b/example/windows/RNLocalizeExampleApp/RNLocalizeExampleApp_TemporaryKey.pfx similarity index 100% rename from example/windows/RNLocalizeSampleApp/RNLocalizeSampleApp_TemporaryKey.pfx rename to example/windows/RNLocalizeExampleApp/RNLocalizeExampleApp_TemporaryKey.pfx diff --git a/example/windows/RNLocalizeSampleApp/ReactPackageProvider.cpp b/example/windows/RNLocalizeExampleApp/ReactPackageProvider.cpp similarity index 70% rename from example/windows/RNLocalizeSampleApp/ReactPackageProvider.cpp rename to example/windows/RNLocalizeExampleApp/ReactPackageProvider.cpp index fb899c0..e4f27a7 100644 --- a/example/windows/RNLocalizeSampleApp/ReactPackageProvider.cpp +++ b/example/windows/RNLocalizeExampleApp/ReactPackageProvider.cpp @@ -4,7 +4,7 @@ using namespace winrt::Microsoft::ReactNative; -namespace winrt::RNLocalizeSampleApp::implementation +namespace winrt::RNLocalizeExampleApp::implementation { void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept @@ -12,4 +12,4 @@ void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuil AddAttributedModules(packageBuilder); } -} // namespace winrt::RNLocalizeSampleApp::implementation +} // namespace winrt::RNLocalizeExampleApp::implementation diff --git a/example/windows/RNLocalizeExampleApp/ReactPackageProvider.h b/example/windows/RNLocalizeExampleApp/ReactPackageProvider.h new file mode 100644 index 0000000..ef63d32 --- /dev/null +++ b/example/windows/RNLocalizeExampleApp/ReactPackageProvider.h @@ -0,0 +1,12 @@ +#pragma once + +#include "winrt/Microsoft.ReactNative.h" + +namespace winrt::RNLocalizeExampleApp::implementation +{ +struct ReactPackageProvider : winrt::implements +{ +public: // IReactPackageProvider + void CreatePackage(winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder) noexcept; +}; +} // namespace winrt::RNLocalizeExampleApp::implementation diff --git a/example/windows/RNLocalizeSampleApp/packages.config b/example/windows/RNLocalizeExampleApp/packages.config similarity index 100% rename from example/windows/RNLocalizeSampleApp/packages.config rename to example/windows/RNLocalizeExampleApp/packages.config diff --git a/example/windows/RNLocalizeSampleApp/pch.cpp b/example/windows/RNLocalizeExampleApp/pch.cpp similarity index 100% rename from example/windows/RNLocalizeSampleApp/pch.cpp rename to example/windows/RNLocalizeExampleApp/pch.cpp diff --git a/example/windows/RNLocalizeSampleApp/pch.h b/example/windows/RNLocalizeExampleApp/pch.h similarity index 100% rename from example/windows/RNLocalizeSampleApp/pch.h rename to example/windows/RNLocalizeExampleApp/pch.h diff --git a/example/windows/RNLocalizeSampleApp/App.h b/example/windows/RNLocalizeSampleApp/App.h deleted file mode 100644 index 6b0329d..0000000 --- a/example/windows/RNLocalizeSampleApp/App.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include "App.xaml.g.h" - -namespace activation = winrt::Windows::ApplicationModel::Activation; - -namespace winrt::RNLocalizeSampleApp::implementation -{ - struct App : AppT - { - App() noexcept; - void OnLaunched(activation::LaunchActivatedEventArgs const&); - void OnSuspending(IInspectable const&, Windows::ApplicationModel::SuspendingEventArgs const&); - void OnNavigationFailed(IInspectable const&, Windows::UI::Xaml::Navigation::NavigationFailedEventArgs const&); - private: - using super = AppT; - }; -} // namespace winrt::RNLocalizeSampleApp::implementation diff --git a/example/windows/RNLocalizeSampleApp/App.idl b/example/windows/RNLocalizeSampleApp/App.idl deleted file mode 100644 index 451b575..0000000 --- a/example/windows/RNLocalizeSampleApp/App.idl +++ /dev/null @@ -1,3 +0,0 @@ -namespace RNLocalizeSampleApp -{ -} diff --git a/example/windows/RNLocalizeSampleApp/MainPage.cpp b/example/windows/RNLocalizeSampleApp/MainPage.cpp deleted file mode 100644 index 158c159..0000000 --- a/example/windows/RNLocalizeSampleApp/MainPage.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "pch.h" -#include "MainPage.h" -#if __has_include("MainPage.g.cpp") -#include "MainPage.g.cpp" -#endif - -#include "App.h" - -using namespace winrt; -using namespace Windows::UI::Xaml; - -namespace winrt::RNLocalizeSampleApp::implementation -{ - MainPage::MainPage() - { - InitializeComponent(); - auto app = Application::Current().as(); - ReactRootView().ReactNativeHost(app->Host()); - } -} diff --git a/example/windows/RNLocalizeSampleApp/ReactPackageProvider.h b/example/windows/RNLocalizeSampleApp/ReactPackageProvider.h deleted file mode 100644 index f3e582a..0000000 --- a/example/windows/RNLocalizeSampleApp/ReactPackageProvider.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include "winrt/Microsoft.ReactNative.h" - -namespace winrt::RNLocalizeSampleApp::implementation -{ - struct ReactPackageProvider : winrt::implements - { - public: // IReactPackageProvider - void CreatePackage(winrt::Microsoft::ReactNative::IReactPackageBuilder const &packageBuilder) noexcept; - }; -} // namespace winrt::RNLocalizeSampleApp::implementation - From ed31ea2a9bf0396146f4483afa5e4fc79fc477af Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 31 Mar 2021 13:37:11 -0700 Subject: [PATCH 08/20] fix buddhist calendar edgecase. --- windows/ReactNativeLocalize/RNLocalizeModule.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/windows/ReactNativeLocalize/RNLocalizeModule.cpp b/windows/ReactNativeLocalize/RNLocalizeModule.cpp index 134070d..280a3a9 100644 --- a/windows/ReactNativeLocalize/RNLocalizeModule.cpp +++ b/windows/ReactNativeLocalize/RNLocalizeModule.cpp @@ -92,7 +92,21 @@ std::string RNLocalizeModule::getScriptCode(winrt::hstring locale) std::string RNLocalizeModule::getCalendar() { std::string calendar = to_string(winrt::Windows::Globalization::Calendar().GetCalendarSystem()); + + // Window's Calendar system can return any of these values: + // "EastAsianLunisolarCalendar", "GregorianCalendar", "HebrewCalendar, "HijriCalendar", + // "JapaneseCalendar", "JulianCalendar", "KoreanCalendar", "PersianCalendar", + // "TaiwanCalendar", "ThaiBuddhistCalendar", "UmAlQuraCalendar" + // In all cases they end in "Calendar" and RNL doesn't expect this, so we must truncate it. calendar = calendar.substr(0, calendar.size() - 8); + + // Special edge case: RNL expects "buddhist" not "thaibuddhist" + // see https://github.com/zoontek/react-native-localize/blob/master/src/types.ts + if (calendar == "ThaiBuddhist") + { + return "buddhist"; + } + std::transform(calendar.begin(), calendar.end(), calendar.begin(), ::tolower); return calendar; } From ff69bd3bc6e9d44e404c1b5d4357c2cb2d8680dd Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 31 Mar 2021 14:12:12 -0700 Subject: [PATCH 09/20] change from ReactNativeLocalize to RNLocalize. update READMEs, package.json, and gitignores --- .gitignore | 3 -- README.md | 7 +++++ android/.project | 17 ++++++++++++ example/android/.project | 17 ++++++++++++ example/android/app/.project | 23 ++++++++++++++++ .../ReactNativeFlipper.class | Bin 0 -> 3955 bytes .../com/rnlocalizeexample/MainActivity.class | Bin 0 -> 1161 bytes .../rnlocalizeexample/MainApplication.class | Bin 0 -> 4038 bytes example/package.json | 2 +- example/windows/.gitignore | 1 + example/windows/RNLocalizeExampleApp.sln | 2 +- .../AutolinkedNativeModules.g.cpp | 4 +-- .../AutolinkedNativeModules.g.targets | 2 +- package.json | 2 ++ windows/.gitignore | 15 ++++++++++ windows/README.md | 26 ++++++++++++++++++ ...ReactNativeLocalize.sln => RNLocalize.sln} | 2 +- .../PropertySheet.props | 0 .../RNLocalize.def} | 0 .../RNLocalize.filters} | 0 .../RNLocalize.vcxproj} | 6 ++-- .../RNLocalizeModule.cpp | 4 +-- .../RNLocalizeModule.h | 5 ++-- .../RNLocalizeModuleTypes.h | 0 .../ReactPackageProvider.cpp | 4 +-- .../ReactPackageProvider.h | 8 +++--- .../ReactPackageProvider.idl | 2 +- .../packages.config | 0 .../pch.cpp | 0 .../{ReactNativeLocalize => RNLocalize}/pch.h | 0 30 files changed, 129 insertions(+), 23 deletions(-) create mode 100644 android/.project create mode 100644 example/android/.project create mode 100644 example/android/app/.project create mode 100644 example/android/app/bin/src/debug/java/com/rnlocalizeexample/ReactNativeFlipper.class create mode 100644 example/android/app/bin/src/main/java/com/rnlocalizeexample/MainActivity.class create mode 100644 example/android/app/bin/src/main/java/com/rnlocalizeexample/MainApplication.class create mode 100644 windows/README.md rename windows/{ReactNativeLocalize.sln => RNLocalize.sln} (98%) rename windows/{ReactNativeLocalize => RNLocalize}/PropertySheet.props (100%) rename windows/{ReactNativeLocalize/ReactNativeLocalize.def => RNLocalize/RNLocalize.def} (100%) rename windows/{ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters => RNLocalize/RNLocalize.filters} (100%) rename windows/{ReactNativeLocalize/ReactNativeLocalize.vcxproj => RNLocalize/RNLocalize.vcxproj} (98%) rename windows/{ReactNativeLocalize => RNLocalize}/RNLocalizeModule.cpp (98%) rename windows/{ReactNativeLocalize => RNLocalize}/RNLocalizeModule.h (94%) rename windows/{ReactNativeLocalize => RNLocalize}/RNLocalizeModuleTypes.h (100%) rename windows/{ReactNativeLocalize => RNLocalize}/ReactPackageProvider.cpp (76%) rename windows/{ReactNativeLocalize => RNLocalize}/ReactPackageProvider.h (64%) rename windows/{ReactNativeLocalize => RNLocalize}/ReactPackageProvider.idl (85%) rename windows/{ReactNativeLocalize => RNLocalize}/packages.config (100%) rename windows/{ReactNativeLocalize => RNLocalize}/pch.cpp (100%) rename windows/{ReactNativeLocalize => RNLocalize}/pch.h (100%) diff --git a/.gitignore b/.gitignore index 405e3e4..c0ef7ec 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,3 @@ Pods/ # Bundle artifact *.jsbundle - -bin/ -msbuild.binlog diff --git a/README.md b/README.md index ac7c45b..0c8a37a 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ A toolbox for your React Native app localization.
[![Platform - Android](https://img.shields.io/badge/platform-Android-3ddc84.svg?style=flat&logo=android)](https://www.android.com) [![Platform - iOS](https://img.shields.io/badge/platform-iOS-000.svg?style=flat&logo=apple)](https://developer.apple.com/ios) +[![Platform - Windows](https://img.shields.io/badge/platform-Windows-0067b8.svg?style=flat&logo=windows)](https://www.microsoft.com/en-us/windows) [![Platform - Web](https://img.shields.io/badge/platform-Web-1977f2.svg?style=flat&logo=html5&logoColor=fff)](https://developer.mozilla.org) @@ -91,6 +92,12 @@ public class MainApplication extends Application implements ReactApplication { } ``` +### Windows Support + +Because this RNW package targets React Native 0.63.0+, you probably won't need to link it manually. Otherwise if it's not the case, follow these additional instructions. You also need to manual link the module on Windows when using React Native Windows prior to 0.63: + +For more information about autolinking and manual linking. Follow the [official guide](https://microsoft.github.io/react-native-windows/docs/native-modules-autolinking) + ## Web support diff --git a/android/.project b/android/.project new file mode 100644 index 0000000..3964dd3 --- /dev/null +++ b/android/.project @@ -0,0 +1,17 @@ + + + android + Project android created by Buildship. + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/example/android/.project b/example/android/.project new file mode 100644 index 0000000..96fa994 --- /dev/null +++ b/example/android/.project @@ -0,0 +1,17 @@ + + + RNLocalizeExample + Project android_ created by Buildship. + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/example/android/app/.project b/example/android/app/.project new file mode 100644 index 0000000..ac485d7 --- /dev/null +++ b/example/android/app/.project @@ -0,0 +1,23 @@ + + + app + Project app created by Buildship. + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.buildship.core.gradleprojectbuilder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.buildship.core.gradleprojectnature + + diff --git a/example/android/app/bin/src/debug/java/com/rnlocalizeexample/ReactNativeFlipper.class b/example/android/app/bin/src/debug/java/com/rnlocalizeexample/ReactNativeFlipper.class new file mode 100644 index 0000000000000000000000000000000000000000..718da25d9ecfea1ae5b98d26b27be0b3d9da45ba GIT binary patch literal 3955 zcmeHKNpBM|6n^fOWGHl@?2AlKEr;X)5`rQmRH&$ww1}2U9G#ih#O=f$Y)@(VV@QDD z&W}Po&kT^N15GM%K{>>;`0aV$H_zX`fBXUf_u+O0#uz-XCTv95PCJb~aUdF@?lp{x zbtq!_9`R80k{BDWP=sznIC+3;u}l&)6_{W!o2kS?bsC%PJq#U#smD@D_k_Xt(((?2 ziB%n81!@dte#<^LMw=>}V^w^u3|bu@V8qFDB4hHQ6;F(A$Jn!vcu?E!B6mj#a&MsS zoz-(^JQPZ4$J@w%8maSj$ED>`Mbc0_@eyt9qCpjshh3w4^!zrZy@=PtSXj$h}*m@RtxvAW->?PVb zE>vW+q)ME~>zEi>8j0jhGpdW;?>d*m#*_xYMtL9De6++?787SlR<4&D~E@qd7^!}(_CaA4r&>dtWzX{ zFxe7{a7Lm1Ri&Vu*G|T^L^P-s0;{n^b(;UDImk{^32GFhhqN|@=*u|mNLAv$Kf7mW zLn9N?YKbI~s#79g)LUuJJ`HKLDQeHK}c3+|AB{Y9bJ*aJOCbs{A05(u-6-C(0Ah}LpFd_O@D2cY; zLxzZd2A%=a943fVDM6p-Q_>pH@fv-*Lp@CY46PAB70yq?BwS!{X{q^p5ZQ8ux@E-= zDl<*uwvDvcMzigcV=&+JL(q;e(mxk3CtO!r1`nHO9Gg}c%=rOHX5&?nHG{>aX3+pE z%`$?d5UX&RO?)0;UixR9R75+X;SmjwXgGAk%`gM9;r~p-41z74(l>F9j$90`WVs$Y zRAwio3S4JUDOjumHyJFHQ6husmb8}mdz%i27VZF@Iq6^vFh+NiFhy%6JLrzn9YF92 zs&D3l4>0{TlbNB_%K-gmX`RlcU=HT#sRkEef!=rvcggM;U2_YUN-W&WEO?nQxRR|` N;TBz|==mDl_yI%3PPhO7 literal 0 HcmV?d00001 diff --git a/example/android/app/bin/src/main/java/com/rnlocalizeexample/MainActivity.class b/example/android/app/bin/src/main/java/com/rnlocalizeexample/MainActivity.class new file mode 100644 index 0000000000000000000000000000000000000000..5463e47b7194187958f867e38dc93625daae46ec GIT binary patch literal 1161 zcmb_bTTfF#5T1oX+d~nk;0-SePw;YTj89@r2+`Q&00|(8kJ~*%yLis-ad+EL|B64v zL=%1YM;T{N+kl})O?=qv%+5Fa%{SkFeEtdmPhq19GYlR(D_glxx^*rFq9sk13F@XFRH(^pN{ufjk6=16X|Qt`(#UbEHmL8KT{dH5lV`56-s$NON_>W(YVZedZZDq$_rzCAYjUuqWTdE z=_kBT@!;NYQBoAu4+m(iO7RbFza{WWtO#nb*nl~>!C-AGxh&u4@lGi3Qlc~-^z#nd z6G0VY&`g48PK8zBJie^>o^lMHB>$?i9R{mi^g(!gBoCue`vZ{^PPDb1j1yt7e$>}q z<=EB(N?XU9GKOdht=kxKOfB*VB0DK9b1<)Yyh0#$z zWkU9!unFr&D(!2TsE8%vC(e&pnkBryi~ULB5%xl7xv{V}KZIOEh2^qft-?SvUaBPOM?^nlY7jvgIYDhw4e z78VOleD*jI|Qzhq+}v4-6+<#Pote{{8)n z*5!e@6-gyaIHnm7m$9NizMDw@=%OUMNXI& z43n$fs!19OV^3vsi8=MuchjtykKb9R4)ZL-bTyBemO_rIvUnDLzLQT)tU+4SH$$s& z5evLildGhq3rNp~u4zL3U>~Ybv6$-$D+{$sxgD#Rj<_vZ+TAFG*r}$M_0s-RD7JAy z;2^0m#<|!-OH}O^#=7N4wZd~Cjb*qG>@tbkUS;@f+?_3xPTP-W8BfFfkBjhA?kT&Y zav9${ig@NW_=;aPYv-OC=Fxc9|Gv6o21&w4EZK@8%7$-HywV@5G z9SGnefj7IM6Z^g|REk{ObXCV{C?wy@(*v&eoz@Xp3tiRoXsUhF#$`JehQL?hbCgL~ z>a5KNH-XFDjf$%1+QVF0k@A6@2qVyz+dNQ^^2xMSPHwUSNOVmClOi3HG%bRIMt`kA|y%@grVAm>!fkD zhT~odUAfku)vT9N=uj7iD%TO;!6OQRE2VwXpDR!T2QpI9V2#G5y)U?CIvO7baFf7= znKTNZOCXp=Q2@8_Jm;n1Kae{(i*GFjY5+ad)RL4C=#Ww?T0xInmysJEu5 zxA8g8_D%)c%}TawXwM?H_bS+KSFknV1NaavboSiBwKwottd3SN-1Q6&vjppSZ@>-s U2%i9bygKN!kKq&8fZOotKPs0aLjV8( literal 0 HcmV?d00001 diff --git a/example/package.json b/example/package.json index 4b868e7..88d5f9a 100644 --- a/example/package.json +++ b/example/package.json @@ -5,7 +5,7 @@ "scripts": { "clean-modules": "rimraf ./node_modules/react-native-localize/{example,node_modules}", "clean": "rimraf ./node_modules ./ios/Pods", - "postinstall": "yarn clean-modules", + "postinstall": "yarn clean-modules && yarn pod-update", "pod-update": "cd ./ios && pod update && cd ..", "start-metro": "react-native start", "start-webpack": "webpack serve", diff --git a/example/windows/.gitignore b/example/windows/.gitignore index 4ea0c7b..2da0ead 100644 --- a/example/windows/.gitignore +++ b/example/windows/.gitignore @@ -90,3 +90,4 @@ packages/ #Files generated by the VS build **/Generated Files/** +msbuild.binlog diff --git a/example/windows/RNLocalizeExampleApp.sln b/example/windows/RNLocalizeExampleApp.sln index 5c358d5..04e9dfd 100644 --- a/example/windows/RNLocalizeExampleApp.sln +++ b/example/windows/RNLocalizeExampleApp.sln @@ -35,7 +35,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Mso", "..\node_modules\reac EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Include", "..\node_modules\react-native-windows\include\Include.vcxitems", "{EF074BA1-2D54-4D49-A28E-5E040B47CD2E}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactNativeLocalize", "..\node_modules\react-native-localize\windows\ReactNativeLocalize\ReactNativeLocalize.vcxproj", "{10E2379C-4264-444A-8656-B3D7E83ACB44}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RNLocalize", "..\node_modules\react-native-localize\windows\RNLocalize\RNLocalize.vcxproj", "{10E2379C-4264-444A-8656-B3D7E83ACB44}" EndProject Global GlobalSection(SharedMSBuildProjectFiles) = preSolution diff --git a/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.cpp b/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.cpp index e394a6b..c7009b9 100644 --- a/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.cpp +++ b/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.cpp @@ -4,7 +4,7 @@ #include "AutolinkedNativeModules.g.h" // Includes from react-native-localize -#include +#include namespace winrt::Microsoft::ReactNative { @@ -12,7 +12,7 @@ namespace winrt::Microsoft::ReactNative void RegisterAutolinkedNativeModulePackages(winrt::Windows::Foundation::Collections::IVector const& packageProviders) { // IReactPackageProviders from react-native-localize - packageProviders.Append(winrt::ReactNativeLocalize::ReactPackageProvider()); + packageProviders.Append(winrt::RNLocalize::ReactPackageProvider()); } } diff --git a/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.targets b/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.targets index ca07546..ce87fe8 100644 --- a/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.targets +++ b/example/windows/RNLocalizeExampleApp/AutolinkedNativeModules.g.targets @@ -3,7 +3,7 @@ - + {10e2379c-4264-444a-8656-b3d7e83acb44} diff --git a/package.json b/package.json index 760f156..9983993 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "/android", "/dist", "/ios", + "/windows", "/src", "RNLocalize.podspec", "package.json" @@ -23,6 +24,7 @@ "keywords": [ "react-native-localize", "react-native", + "react-native-windows", "localize", "localization", "l20n" diff --git a/windows/.gitignore b/windows/.gitignore index 4ea0c7b..c7ba017 100644 --- a/windows/.gitignore +++ b/windows/.gitignore @@ -90,3 +90,18 @@ packages/ #Files generated by the VS build **/Generated Files/** +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ \ No newline at end of file diff --git a/windows/README.md b/windows/README.md new file mode 100644 index 0000000..7180c66 --- /dev/null +++ b/windows/README.md @@ -0,0 +1,26 @@ +# react-native-localize Windows Implementation + +## Module Installation + +You can either use autolinking on react-native-windows 0.63 and later or manually link the module on earlier realeases. + +## Automatic install with autolinking on RNW >= 0.63 + +RNLocalize supports autolinking. Just call: `npm i react-native-localize --save` + +## Manual installation on RNW >= 0.62 + +1. `npm install react-native-localize --save` +2. Open your solution in Visual Studio 2019 (eg. `windows\yourapp.sln`) +3. Right-click Solution icon in Solution Explorer > Add > Existing Project... +4. Add `node_modules\react-native-localize\windows\RNLocalize\RNLocalize.vcxproj` +5. Right-click main application project > Add > Reference... +6. Select `RNLocalize` in Solution Projects +7. In app `pch.h` add `#include "winrt/RNLocalize.h"` +8. In `App.cpp` add `PackageProviders().Append(winrt::RNLocalize::ReactPackageProvider());` before `InitializeComponent();` + +## Module development + +If you want to contribute to this module Windows implementation, first you must install the [Windows Development Dependencies](https://microsoft.github.io/react-native-windows/docs/rnw-dependencies). + +You must temporary install `react-native-windows` package. Versions of `react-native-windows` and `react-native` must match. E.g. if the module uses `react-native@0.62`, install `npm i react-native-windows@^0.62 --dev`. diff --git a/windows/ReactNativeLocalize.sln b/windows/RNLocalize.sln similarity index 98% rename from windows/ReactNativeLocalize.sln rename to windows/RNLocalize.sln index db7158a..19b3748 100644 --- a/windows/ReactNativeLocalize.sln +++ b/windows/RNLocalize.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29215.179 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ReactNativeLocalize", "ReactNativeLocalize\ReactNativeLocalize.vcxproj", "{10E2379C-4264-444A-8656-B3D7E83ACB44}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RNLocalize", "RNLocalize\RNLocalize.vcxproj", "{10E2379C-4264-444A-8656-B3D7E83ACB44}" ProjectSection(ProjectDependencies) = postProject {F7D32BD0-2749-483E-9A0D-1635EF7E3136} = {F7D32BD0-2749-483E-9A0D-1635EF7E3136} EndProjectSection diff --git a/windows/ReactNativeLocalize/PropertySheet.props b/windows/RNLocalize/PropertySheet.props similarity index 100% rename from windows/ReactNativeLocalize/PropertySheet.props rename to windows/RNLocalize/PropertySheet.props diff --git a/windows/ReactNativeLocalize/ReactNativeLocalize.def b/windows/RNLocalize/RNLocalize.def similarity index 100% rename from windows/ReactNativeLocalize/ReactNativeLocalize.def rename to windows/RNLocalize/RNLocalize.def diff --git a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters b/windows/RNLocalize/RNLocalize.filters similarity index 100% rename from windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj.filters rename to windows/RNLocalize/RNLocalize.filters diff --git a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj b/windows/RNLocalize/RNLocalize.vcxproj similarity index 98% rename from windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj rename to windows/RNLocalize/RNLocalize.vcxproj index 66bd983..f75eb49 100644 --- a/windows/ReactNativeLocalize/ReactNativeLocalize.vcxproj +++ b/windows/RNLocalize/RNLocalize.vcxproj @@ -6,8 +6,8 @@ true true {10e2379c-4264-444a-8656-b3d7e83acb44} - ReactNativeLocalize - ReactNativeLocalize + RNLocalize + RNLocalize en-US 16.0 true @@ -95,7 +95,7 @@ Console true - ReactNativeLocalize.def + RNLocalize.def diff --git a/windows/ReactNativeLocalize/RNLocalizeModule.cpp b/windows/RNLocalize/RNLocalizeModule.cpp similarity index 98% rename from windows/ReactNativeLocalize/RNLocalizeModule.cpp rename to windows/RNLocalize/RNLocalizeModule.cpp index 280a3a9..1a8b65d 100644 --- a/windows/ReactNativeLocalize/RNLocalizeModule.cpp +++ b/windows/RNLocalize/RNLocalizeModule.cpp @@ -6,7 +6,7 @@ using namespace winrt::Microsoft::ReactNative; -namespace winrt::ReactNativeLocalize +namespace winrt::RNLocalize { std::vector RNLocalizeModule::getLocaleNames() @@ -187,4 +187,4 @@ LocalizationConstants RNLocalizeModule::initialConstants() noexcept return constants; } -} // namespace winrt::ReactNativeLocalize +} // namespace winrt::RNLocalize diff --git a/windows/ReactNativeLocalize/RNLocalizeModule.h b/windows/RNLocalize/RNLocalizeModule.h similarity index 94% rename from windows/ReactNativeLocalize/RNLocalizeModule.h rename to windows/RNLocalize/RNLocalizeModule.h index 9e66778..f4c7f95 100644 --- a/windows/ReactNativeLocalize/RNLocalizeModule.h +++ b/windows/RNLocalize/RNLocalizeModule.h @@ -4,9 +4,10 @@ #include "NativeModules.h" #include "RNLocalizeModuleTypes.h" #include + using namespace winrt::Microsoft::ReactNative; -namespace winrt::ReactNativeLocalize +namespace winrt::RNLocalize { REACT_MODULE(RNLocalizeModule, L"RNLocalize"); @@ -40,4 +41,4 @@ struct RNLocalizeModule {"ar", "ckb", "fa", "he", "ks", "lrc", "mzn", "ps", "ug", "ur", "yi"}}; }; -} // namespace winrt::ReactNativeLocalize +} // namespace winrt::RNLocalize diff --git a/windows/ReactNativeLocalize/RNLocalizeModuleTypes.h b/windows/RNLocalize/RNLocalizeModuleTypes.h similarity index 100% rename from windows/ReactNativeLocalize/RNLocalizeModuleTypes.h rename to windows/RNLocalize/RNLocalizeModuleTypes.h diff --git a/windows/ReactNativeLocalize/ReactPackageProvider.cpp b/windows/RNLocalize/ReactPackageProvider.cpp similarity index 76% rename from windows/ReactNativeLocalize/ReactPackageProvider.cpp rename to windows/RNLocalize/ReactPackageProvider.cpp index 4297b19..5929c6b 100644 --- a/windows/ReactNativeLocalize/ReactPackageProvider.cpp +++ b/windows/RNLocalize/ReactPackageProvider.cpp @@ -8,7 +8,7 @@ using namespace winrt::Microsoft::ReactNative; -namespace winrt::ReactNativeLocalize::implementation +namespace winrt::RNLocalize::implementation { void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept @@ -16,4 +16,4 @@ void ReactPackageProvider::CreatePackage(IReactPackageBuilder const &packageBuil AddAttributedModules(packageBuilder); } -} // namespace winrt::ReactNativeLocalize::implementation +} // namespace winrt::RNLocalize::implementation diff --git a/windows/ReactNativeLocalize/ReactPackageProvider.h b/windows/RNLocalize/ReactPackageProvider.h similarity index 64% rename from windows/ReactNativeLocalize/ReactPackageProvider.h rename to windows/RNLocalize/ReactPackageProvider.h index 58e2c93..df92924 100644 --- a/windows/ReactNativeLocalize/ReactPackageProvider.h +++ b/windows/RNLocalize/ReactPackageProvider.h @@ -3,7 +3,7 @@ using namespace winrt::Microsoft::ReactNative; -namespace winrt::ReactNativeLocalize::implementation +namespace winrt::RNLocalize::implementation { struct ReactPackageProvider : ReactPackageProviderT { @@ -11,11 +11,11 @@ namespace winrt::ReactNativeLocalize::implementation void CreatePackage(IReactPackageBuilder const &packageBuilder) noexcept; }; -} // namespace winrt::ReactNativeLocalize::implementation +} // namespace winrt::RNLocalize::implementation -namespace winrt::ReactNativeLocalize::factory_implementation +namespace winrt::RNLocalize::factory_implementation { struct ReactPackageProvider : ReactPackageProviderT {}; -} // namespace winrt::ReactNativeLocalize::factory_implementation +} // namespace winrt::RNLocalize::factory_implementation diff --git a/windows/ReactNativeLocalize/ReactPackageProvider.idl b/windows/RNLocalize/ReactPackageProvider.idl similarity index 85% rename from windows/ReactNativeLocalize/ReactPackageProvider.idl rename to windows/RNLocalize/ReactPackageProvider.idl index cab9410..410e3bb 100644 --- a/windows/ReactNativeLocalize/ReactPackageProvider.idl +++ b/windows/RNLocalize/ReactPackageProvider.idl @@ -1,4 +1,4 @@ -namespace ReactNativeLocalize +namespace RNLocalize { [webhosthidden] [default_interface] diff --git a/windows/ReactNativeLocalize/packages.config b/windows/RNLocalize/packages.config similarity index 100% rename from windows/ReactNativeLocalize/packages.config rename to windows/RNLocalize/packages.config diff --git a/windows/ReactNativeLocalize/pch.cpp b/windows/RNLocalize/pch.cpp similarity index 100% rename from windows/ReactNativeLocalize/pch.cpp rename to windows/RNLocalize/pch.cpp diff --git a/windows/ReactNativeLocalize/pch.h b/windows/RNLocalize/pch.h similarity index 100% rename from windows/ReactNativeLocalize/pch.h rename to windows/RNLocalize/pch.h From 2e4c0d9dc2e5dd8415af2ace3dc27a91792ffb5e Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 31 Mar 2021 14:25:13 -0700 Subject: [PATCH 10/20] delete some generated files. Don't think they are supposed to be here. --- android/.project | 17 ----------------- example/android/.project | 17 ----------------- example/android/app/.project | 23 ----------------------- 3 files changed, 57 deletions(-) delete mode 100644 android/.project delete mode 100644 example/android/.project delete mode 100644 example/android/app/.project diff --git a/android/.project b/android/.project deleted file mode 100644 index 3964dd3..0000000 --- a/android/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - android - Project android created by Buildship. - - - - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - - org.eclipse.buildship.core.gradleprojectnature - - diff --git a/example/android/.project b/example/android/.project deleted file mode 100644 index 96fa994..0000000 --- a/example/android/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - RNLocalizeExample - Project android_ created by Buildship. - - - - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - - org.eclipse.buildship.core.gradleprojectnature - - diff --git a/example/android/app/.project b/example/android/app/.project deleted file mode 100644 index ac485d7..0000000 --- a/example/android/app/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - app - Project app created by Buildship. - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.buildship.core.gradleprojectbuilder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.buildship.core.gradleprojectnature - - From e59062ab68e662ba99e1334b985d476c41ae04e3 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 31 Mar 2021 14:26:31 -0700 Subject: [PATCH 11/20] delete accidentally checked in auto generated files --- .../rnlocalizeexample/ReactNativeFlipper.class | Bin 3955 -> 0 bytes .../com/rnlocalizeexample/MainActivity.class | Bin 1161 -> 0 bytes .../com/rnlocalizeexample/MainApplication.class | Bin 4038 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 example/android/app/bin/src/debug/java/com/rnlocalizeexample/ReactNativeFlipper.class delete mode 100644 example/android/app/bin/src/main/java/com/rnlocalizeexample/MainActivity.class delete mode 100644 example/android/app/bin/src/main/java/com/rnlocalizeexample/MainApplication.class diff --git a/example/android/app/bin/src/debug/java/com/rnlocalizeexample/ReactNativeFlipper.class b/example/android/app/bin/src/debug/java/com/rnlocalizeexample/ReactNativeFlipper.class deleted file mode 100644 index 718da25d9ecfea1ae5b98d26b27be0b3d9da45ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3955 zcmeHKNpBM|6n^fOWGHl@?2AlKEr;X)5`rQmRH&$ww1}2U9G#ih#O=f$Y)@(VV@QDD z&W}Po&kT^N15GM%K{>>;`0aV$H_zX`fBXUf_u+O0#uz-XCTv95PCJb~aUdF@?lp{x zbtq!_9`R80k{BDWP=sznIC+3;u}l&)6_{W!o2kS?bsC%PJq#U#smD@D_k_Xt(((?2 ziB%n81!@dte#<^LMw=>}V^w^u3|bu@V8qFDB4hHQ6;F(A$Jn!vcu?E!B6mj#a&MsS zoz-(^JQPZ4$J@w%8maSj$ED>`Mbc0_@eyt9qCpjshh3w4^!zrZy@=PtSXj$h}*m@RtxvAW->?PVb zE>vW+q)ME~>zEi>8j0jhGpdW;?>d*m#*_xYMtL9De6++?787SlR<4&D~E@qd7^!}(_CaA4r&>dtWzX{ zFxe7{a7Lm1Ri&Vu*G|T^L^P-s0;{n^b(;UDImk{^32GFhhqN|@=*u|mNLAv$Kf7mW zLn9N?YKbI~s#79g)LUuJJ`HKLDQeHK}c3+|AB{Y9bJ*aJOCbs{A05(u-6-C(0Ah}LpFd_O@D2cY; zLxzZd2A%=a943fVDM6p-Q_>pH@fv-*Lp@CY46PAB70yq?BwS!{X{q^p5ZQ8ux@E-= zDl<*uwvDvcMzigcV=&+JL(q;e(mxk3CtO!r1`nHO9Gg}c%=rOHX5&?nHG{>aX3+pE z%`$?d5UX&RO?)0;UixR9R75+X;SmjwXgGAk%`gM9;r~p-41z74(l>F9j$90`WVs$Y zRAwio3S4JUDOjumHyJFHQ6husmb8}mdz%i27VZF@Iq6^vFh+NiFhy%6JLrzn9YF92 zs&D3l4>0{TlbNB_%K-gmX`RlcU=HT#sRkEef!=rvcggM;U2_YUN-W&WEO?nQxRR|` N;TBz|==mDl_yI%3PPhO7 diff --git a/example/android/app/bin/src/main/java/com/rnlocalizeexample/MainActivity.class b/example/android/app/bin/src/main/java/com/rnlocalizeexample/MainActivity.class deleted file mode 100644 index 5463e47b7194187958f867e38dc93625daae46ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1161 zcmb_bTTfF#5T1oX+d~nk;0-SePw;YTj89@r2+`Q&00|(8kJ~*%yLis-ad+EL|B64v zL=%1YM;T{N+kl})O?=qv%+5Fa%{SkFeEtdmPhq19GYlR(D_glxx^*rFq9sk13F@XFRH(^pN{ufjk6=16X|Qt`(#UbEHmL8KT{dH5lV`56-s$NON_>W(YVZedZZDq$_rzCAYjUuqWTdE z=_kBT@!;NYQBoAu4+m(iO7RbFza{WWtO#nb*nl~>!C-AGxh&u4@lGi3Qlc~-^z#nd z6G0VY&`g48PK8zBJie^>o^lMHB>$?i9R{mi^g(!gBoCue`vZ{^PPDb1j1yt7e$>}q z<=EB(N?XU9GKOdht=kxKOfB*VB0DK9b1<)Yyh0#$z zWkU9!unFr&D(!2TsE8%vC(e&pnkBryi~ULB5%xl7xv{V}KZIOEh2^qft-?SvUaBPOM?^nlY7jvgIYDhw4e z78VOleD*jI|Qzhq+}v4-6+<#Pote{{8)n z*5!e@6-gyaIHnm7m$9NizMDw@=%OUMNXI& z43n$fs!19OV^3vsi8=MuchjtykKb9R4)ZL-bTyBemO_rIvUnDLzLQT)tU+4SH$$s& z5evLildGhq3rNp~u4zL3U>~Ybv6$-$D+{$sxgD#Rj<_vZ+TAFG*r}$M_0s-RD7JAy z;2^0m#<|!-OH}O^#=7N4wZd~Cjb*qG>@tbkUS;@f+?_3xPTP-W8BfFfkBjhA?kT&Y zav9${ig@NW_=;aPYv-OC=Fxc9|Gv6o21&w4EZK@8%7$-HywV@5G z9SGnefj7IM6Z^g|REk{ObXCV{C?wy@(*v&eoz@Xp3tiRoXsUhF#$`JehQL?hbCgL~ z>a5KNH-XFDjf$%1+QVF0k@A6@2qVyz+dNQ^^2xMSPHwUSNOVmClOi3HG%bRIMt`kA|y%@grVAm>!fkD zhT~odUAfku)vT9N=uj7iD%TO;!6OQRE2VwXpDR!T2QpI9V2#G5y)U?CIvO7baFf7= znKTNZOCXp=Q2@8_Jm;n1Kae{(i*GFjY5+ad)RL4C=#Ww?T0xInmysJEu5 zxA8g8_D%)c%}TawXwM?H_bS+KSFknV1NaavboSiBwKwottd3SN-1Q6&vjppSZ@>-s U2%i9bygKN!kKq&8fZOotKPs0aLjV8( From 0ec3db607babd37473b58ad1c1c5504b3c0b07cb Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 31 Mar 2021 20:30:30 -0700 Subject: [PATCH 12/20] remove unnecesary comment. --- windows/RNLocalize/RNLocalizeModule.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/windows/RNLocalize/RNLocalizeModule.cpp b/windows/RNLocalize/RNLocalizeModule.cpp index 1a8b65d..cb75b54 100644 --- a/windows/RNLocalize/RNLocalizeModule.cpp +++ b/windows/RNLocalize/RNLocalizeModule.cpp @@ -113,7 +113,7 @@ std::string RNLocalizeModule::getCalendar() std::string RNLocalizeModule::getTimeZone() { - // Use GetTimeZoneInformation to get the hour bias from GMT and then create a formatted string (KLUDGE) + // Use GetTimeZoneInformation to get the hour bias from GMT and then create a formatted string. TIME_ZONE_INFORMATION TimeZoneInfo; GetTimeZoneInformation(&TimeZoneInfo); @@ -136,7 +136,7 @@ NumberFormatSettings RNLocalizeModule::getNumberFormatSettings(std::string local NumberFormatSettings numberFormatSettings; - // Use GetNumberFormatEx to get number formatting based on the passed locale (KLUDGE) + // Use GetNumberFormatEx to get number formatting based on the passed locale. std::string num_s("1000.00"); std::wstring num_w = std::wstring(num_s.begin(), num_s.end()); LPCWSTR num_l = num_w.c_str(); From 6f92b592ebbd76ac842b3d96866618060b2df538 Mon Sep 17 00:00:00 2001 From: Adam Gorman Date: Mon, 5 Apr 2021 15:46:37 -0700 Subject: [PATCH 13/20] Apply suggestions from code review Co-authored-by: Alexander Sklar --- README.md | 4 ++-- windows/RNLocalize/RNLocalizeModule.cpp | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0c8a37a..fd4a0d6 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ A toolbox for your React Native app localization.
[![Platform - Android](https://img.shields.io/badge/platform-Android-3ddc84.svg?style=flat&logo=android)](https://www.android.com) [![Platform - iOS](https://img.shields.io/badge/platform-iOS-000.svg?style=flat&logo=apple)](https://developer.apple.com/ios) -[![Platform - Windows](https://img.shields.io/badge/platform-Windows-0067b8.svg?style=flat&logo=windows)](https://www.microsoft.com/en-us/windows) +[![Platform - Windows](https://img.shields.io/badge/platform-Windows-0067b8.svg?style=flat&logo=windows)](https://www.microsoft.com/windows) [![Platform - Web](https://img.shields.io/badge/platform-Web-1977f2.svg?style=flat&logo=html5&logoColor=fff)](https://developer.mozilla.org) @@ -94,7 +94,7 @@ public class MainApplication extends Application implements ReactApplication { ### Windows Support -Because this RNW package targets React Native 0.63.0+, you probably won't need to link it manually. Otherwise if it's not the case, follow these additional instructions. You also need to manual link the module on Windows when using React Native Windows prior to 0.63: +Because this RNW package targets React Native 0.63.0+, you probably won't need to link it manually. Otherwise if it's not the case, follow these additional instructions. You also need to manually link the module on Windows when using React Native Windows prior to 0.63: For more information about autolinking and manual linking. Follow the [official guide](https://microsoft.github.io/react-native-windows/docs/native-modules-autolinking) diff --git a/windows/RNLocalize/RNLocalizeModule.cpp b/windows/RNLocalize/RNLocalizeModule.cpp index cb75b54..ec71b4d 100644 --- a/windows/RNLocalize/RNLocalizeModule.cpp +++ b/windows/RNLocalize/RNLocalizeModule.cpp @@ -93,7 +93,7 @@ std::string RNLocalizeModule::getCalendar() { std::string calendar = to_string(winrt::Windows::Globalization::Calendar().GetCalendarSystem()); - // Window's Calendar system can return any of these values: + // The Windows calendar APIs can return any of these values: // "EastAsianLunisolarCalendar", "GregorianCalendar", "HebrewCalendar, "HijriCalendar", // "JapaneseCalendar", "JulianCalendar", "KoreanCalendar", "PersianCalendar", // "TaiwanCalendar", "ThaiBuddhistCalendar", "UmAlQuraCalendar" @@ -141,8 +141,8 @@ NumberFormatSettings RNLocalizeModule::getNumberFormatSettings(std::string local std::wstring num_w = std::wstring(num_s.begin(), num_s.end()); LPCWSTR num_l = num_w.c_str(); - LPWSTR numberFormatBuffer = new TCHAR[9]; - GetNumberFormatEx(locale_l, NULL, num_l, NULL, numberFormatBuffer, 9); + wchar_t numberFormatBuffer[9]={}; + GetNumberFormatEx(locale_l, nullptr, num_l, nullptr, numberFormatBuffer, ARRAYSIZE(numberFormatBuffer)); std::string formattedString = winrt::to_string(numberFormatBuffer); delete numberFormatBuffer; From 11092b5b306b9f951f465f2eec300ab18f234670 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 5 Apr 2021 16:31:37 -0700 Subject: [PATCH 14/20] PR feedback. --- windows/RNLocalize/RNLocalizeModule.cpp | 220 +++++++++++---------- windows/RNLocalize/RNLocalizeModule.h | 4 +- windows/RNLocalize/RNLocalizeModuleTypes.h | 6 +- 3 files changed, 125 insertions(+), 105 deletions(-) diff --git a/windows/RNLocalize/RNLocalizeModule.cpp b/windows/RNLocalize/RNLocalizeModule.cpp index ec71b4d..b7bd1f7 100644 --- a/windows/RNLocalize/RNLocalizeModule.cpp +++ b/windows/RNLocalize/RNLocalizeModule.cpp @@ -2,7 +2,11 @@ #include "RNLocalizeModule.h" -#include "winrt/Windows.Globalization.h" +#include +#include +#include +#include +#include using namespace winrt::Microsoft::ReactNative; @@ -11,180 +15,198 @@ namespace winrt::RNLocalize std::vector RNLocalizeModule::getLocaleNames() { - std::vector locales; - for (winrt::hstring locale : winrt::Windows::Globalization::ApplicationLanguages::Languages()) - { - locales.push_back(locale); - } - return locales; + std::vector locales; + for (winrt::hstring locale : winrt::Windows::Globalization::ApplicationLanguages::Languages()) + { + locales.push_back(locale); + } + return locales; } std::vector RNLocalizeModule::getLocales(std::vector localeStrings) { - std::vector localesArray; - for (winrt::hstring localeString : localeStrings) - { - Locale locale; - std::string languageCode = getLanguageCode(to_string(localeString)); - locale.languageCode = languageCode; + std::vector localesArray; + for (winrt::hstring localeString : localeStrings) + { + winrt::Windows::Globalization::Language currentLanguage(localeString); - std::string countryCode = getCountryCode(to_string(localeString)); - locale.countryCode = countryCode; + std::string localeStdString = winrt::to_string(localeString); + Locale locale; + std::string languageCode = getLanguageCode(localeStdString); + locale.languageCode = languageCode; - locale.isRTL = getIsRTL(languageCode); + std::string countryCode = getCountryCode(localeStdString); + locale.countryCode = countryCode; - std::string scriptCode = getScriptCode(localeString); - locale.scriptCode = scriptCode; + locale.isRTL = getIsRTL(currentLanguage.LayoutDirection()); - std::string languageTag = languageCode + "-" + scriptCode + "-" + countryCode; - locale.languageTag = languageTag; + std::string scriptCode = getScriptCode(localeString); + locale.scriptCode = scriptCode; - localesArray.push_back(locale); - } - return localesArray; + std::string languageTag = languageCode + "-" + scriptCode + "-" + countryCode; + locale.languageTag = languageTag; + + localesArray.push_back(locale); + } + return localesArray; } std::string RNLocalizeModule::getCountryCode(std::string locale) { - return locale.substr(locale.find("-") + 1, locale.length()); + + winrt::Windows::Globalization::GeographicRegion geographicRegion{}; + return winrt::to_string(geographicRegion.CodeTwoLetter()); } std::string RNLocalizeModule::getLanguageCode(std::string locale) { - return locale.substr(0, locale.find("-")); + return locale.substr(0, locale.find("-")); } -bool RNLocalizeModule::getIsRTL(std::string languageCode) +bool RNLocalizeModule::getIsRTL(winrt::Windows::Globalization::LanguageLayoutDirection layoutDirection) { - return std::find(USES_RTL_LAYOUT.begin(), USES_RTL_LAYOUT.end(), languageCode) != USES_RTL_LAYOUT.end(); + switch (layoutDirection) + { + case winrt::Windows::Globalization::LanguageLayoutDirection::Ltr: + case winrt::Windows::Globalization::LanguageLayoutDirection::TtbLtr: + { + return false; + } + case winrt::Windows::Globalization::LanguageLayoutDirection::Rtl: + case winrt::Windows::Globalization::LanguageLayoutDirection::TtbRtl: + default: + { + return true; + } + } } bool RNLocalizeModule::getUsesMetricSystem(std::string countryCode) { - return std::find(USES_IMPERIAL.begin(), USES_IMPERIAL.end(), countryCode) == USES_IMPERIAL.end(); + return std::find(USES_IMPERIAL.begin(), USES_IMPERIAL.end(), countryCode) == USES_IMPERIAL.end(); } std::string RNLocalizeModule::getTemperatureUnit(std::string countryCode) { - return std::find(USES_FAHRENHEIT.begin(), USES_FAHRENHEIT.end(), countryCode) != USES_FAHRENHEIT.end() ? "fahrenheit" : "celsius"; + return std::find(USES_FAHRENHEIT.begin(), USES_FAHRENHEIT.end(), countryCode) != USES_FAHRENHEIT.end() ? "fahrenheit" : "celsius"; } bool RNLocalizeModule::getUses24HourClock() { - return !to_string(winrt::Windows::Globalization::Calendar().GetClock()).compare("24HourClock"); + return !winrt::to_string(winrt::Windows::Globalization::Calendar().GetClock()).compare("24HourClock"); } std::vector RNLocalizeModule::getCurrencies() { - std::vector currencies; - for (winrt::hstring currency : winrt::Windows::Globalization::GeographicRegion().CurrenciesInUse()) - { - currencies.push_back(winrt::to_string(currency)); - } - return currencies; + std::vector currencies; + for (winrt::hstring currency : winrt::Windows::Globalization::GeographicRegion().CurrenciesInUse()) + { + currencies.push_back(winrt::to_string(currency)); + } + return currencies; } std::string RNLocalizeModule::getScriptCode(winrt::hstring locale) { - return winrt::to_string(winrt::Windows::Globalization::Language(locale).Script()); + return winrt::to_string(winrt::Windows::Globalization::Language(locale).Script()); } std::string RNLocalizeModule::getCalendar() { - std::string calendar = to_string(winrt::Windows::Globalization::Calendar().GetCalendarSystem()); + std::string calendar = to_string(winrt::Windows::Globalization::Calendar().GetCalendarSystem()); - // The Windows calendar APIs can return any of these values: - // "EastAsianLunisolarCalendar", "GregorianCalendar", "HebrewCalendar, "HijriCalendar", - // "JapaneseCalendar", "JulianCalendar", "KoreanCalendar", "PersianCalendar", - // "TaiwanCalendar", "ThaiBuddhistCalendar", "UmAlQuraCalendar" - // In all cases they end in "Calendar" and RNL doesn't expect this, so we must truncate it. - calendar = calendar.substr(0, calendar.size() - 8); + // Window's Calendar system can return any of these values: + // "EastAsianLunisolarCalendar", "GregorianCalendar", "HebrewCalendar, "HijriCalendar", + // "JapaneseCalendar", "JulianCalendar", "KoreanCalendar", "PersianCalendar", + // "TaiwanCalendar", "ThaiBuddhistCalendar", "UmAlQuraCalendar" + // In all cases they end in "Calendar" and RNL doesn't expect this, so we must truncate it. + calendar = calendar.substr(0, calendar.size() - 8); - // Special edge case: RNL expects "buddhist" not "thaibuddhist" - // see https://github.com/zoontek/react-native-localize/blob/master/src/types.ts - if (calendar == "ThaiBuddhist") - { - return "buddhist"; - } + // Special edge case: RNL expects "buddhist" not "thaibuddhist" + // see https://github.com/zoontek/react-native-localize/blob/master/src/types.ts + if (calendar == "ThaiBuddhist") + { + return "buddhist"; + } - std::transform(calendar.begin(), calendar.end(), calendar.begin(), ::tolower); - return calendar; + std::transform(calendar.begin(), calendar.end(), calendar.begin(), ::tolower); + return calendar; } std::string RNLocalizeModule::getTimeZone() { - // Use GetTimeZoneInformation to get the hour bias from GMT and then create a formatted string. - TIME_ZONE_INFORMATION TimeZoneInfo; - GetTimeZoneInformation(&TimeZoneInfo); + // Use GetTimeZoneInformation to get the hour bias from GMT and then create a formatted string. + TIME_ZONE_INFORMATION TimeZoneInfo; + GetTimeZoneInformation(&TimeZoneInfo); - int hourBias = -TimeZoneInfo.Bias / 60; - char timeZoneBuffer[10]; - snprintf( - timeZoneBuffer, - sizeof(timeZoneBuffer), - "GMT%s%02d:00", - hourBias < 0 ? "-" : "+", - hourBias < 0 ? -hourBias : hourBias); - std::string timeZoneString(timeZoneBuffer); + int hourBias = -TimeZoneInfo.Bias / 60; + char timeZoneBuffer[10]; + snprintf( + timeZoneBuffer, + sizeof(timeZoneBuffer), + "GMT%s%02d:00", + hourBias < 0 ? "-" : "+", + hourBias < 0 ? -hourBias : hourBias); + std::string timeZoneString(timeZoneBuffer); - return timeZoneString; + return timeZoneString; } NumberFormatSettings RNLocalizeModule::getNumberFormatSettings(std::string locale) { - LPCWSTR locale_l = std::wstring(locale.begin(), locale.end()).c_str(); + LPCWSTR locale_l = std::wstring(locale.begin(), locale.end()).c_str(); - NumberFormatSettings numberFormatSettings; + NumberFormatSettings numberFormatSettings; - // Use GetNumberFormatEx to get number formatting based on the passed locale. - std::string num_s("1000.00"); - std::wstring num_w = std::wstring(num_s.begin(), num_s.end()); - LPCWSTR num_l = num_w.c_str(); + // Use GetNumberFormatEx to get number formatting based on the passed locale. + std::string num_s("1000.00"); + std::wstring num_w = std::wstring(num_s.begin(), num_s.end()); + LPCWSTR num_l = num_w.c_str(); - wchar_t numberFormatBuffer[9]={}; - GetNumberFormatEx(locale_l, nullptr, num_l, nullptr, numberFormatBuffer, ARRAYSIZE(numberFormatBuffer)); - std::string formattedString = winrt::to_string(numberFormatBuffer); - delete numberFormatBuffer; + LPWSTR numberFormatBuffer = new TCHAR[9]; + GetNumberFormatEx(locale_l, NULL, num_l, NULL, numberFormatBuffer, 9); + std::string formattedString = winrt::to_string(numberFormatBuffer); + delete numberFormatBuffer; - numberFormatSettings.decimalSeparator = formattedString.substr(5, 1); - numberFormatSettings.groupingSeparator = formattedString.substr(1, 1); + numberFormatSettings.decimalSeparator = formattedString.substr(5, 1); + numberFormatSettings.groupingSeparator = formattedString.substr(1, 1); - return numberFormatSettings; + return numberFormatSettings; } LocalizationConstants RNLocalizeModule::getExported() { - std::vector deviceLocales = getLocaleNames(); - std::string currentLocale = winrt::to_string(deviceLocales[0]); - std::string currentCountryCode = getCountryCode(currentLocale); + std::vector deviceLocales = getLocaleNames(); + std::string currentLocale = winrt::to_string(deviceLocales[0]); + std::string currentCountryCode = getCountryCode(currentLocale); - LocalizationConstants constants; - constants.calendar = getCalendar(); - constants.country = currentCountryCode; - constants.currencies = getCurrencies(); - constants.locales = getLocales(deviceLocales); - constants.numberFormatSettings = getNumberFormatSettings(currentLocale); - constants.temperatureUnit = getTemperatureUnit(currentCountryCode); - constants.timeZone = getTimeZone(); - constants.uses24HourClock = getUses24HourClock(); - constants.usesMetricSystem = getUsesMetricSystem(currentCountryCode); - return constants; + LocalizationConstants constants; + constants.calendar = getCalendar(); + constants.country = currentCountryCode; + constants.currencies = getCurrencies(); + constants.locales = getLocales(deviceLocales); + constants.numberFormatSettings = getNumberFormatSettings(currentLocale); + constants.temperatureUnit = getTemperatureUnit(currentCountryCode); + constants.timeZone = getTimeZone(); + constants.uses24HourClock = getUses24HourClock(); + constants.usesMetricSystem = getUsesMetricSystem(currentCountryCode); + return constants; } void RNLocalizeModule::GetConstants(winrt::Microsoft::ReactNative::ReactConstantProvider &provider) noexcept { - provider.Add(L"initialConstants", getExported()); + provider.Add(L"initialConstants", getExported()); } LocalizationConstants RNLocalizeModule::initialConstants() noexcept { - std::vector deviceLocales = getLocaleNames(); - std::string currentLocale = winrt::to_string(deviceLocales[0]); - std::string currentCountryCode = getCountryCode(currentLocale); + std::vector deviceLocales = getLocaleNames(); + std::string currentLocale = winrt::to_string(deviceLocales[0]); + std::string currentCountryCode = getCountryCode(currentLocale); - LocalizationConstants constants; - constants.locales = getLocales(deviceLocales); - return constants; + LocalizationConstants constants; + constants.locales = getLocales(deviceLocales); + return constants; } } // namespace winrt::RNLocalize diff --git a/windows/RNLocalize/RNLocalizeModule.h b/windows/RNLocalize/RNLocalizeModule.h index f4c7f95..2b8c66b 100644 --- a/windows/RNLocalize/RNLocalizeModule.h +++ b/windows/RNLocalize/RNLocalizeModule.h @@ -24,7 +24,7 @@ struct RNLocalizeModule std::vector getLocales(std::vector); std::string getCountryCode(std::string); std::string getLanguageCode(std::string); - bool getIsRTL(std::string); + bool getIsRTL(winrt::Windows::Globalization::LanguageLayoutDirection); bool getUsesMetricSystem(std::string); std::string getTemperatureUnit(std::string); bool getUses24HourClock(); @@ -37,8 +37,6 @@ struct RNLocalizeModule const std::array USES_FAHRENHEIT{{"BS", "BZ", "KY", "PR", "PW", "US"}}; const std::array USES_IMPERIAL{{"LR", "MM", "US"}}; - const std::array USES_RTL_LAYOUT{ - {"ar", "ckb", "fa", "he", "ks", "lrc", "mzn", "ps", "ug", "ur", "yi"}}; }; } // namespace winrt::RNLocalize diff --git a/windows/RNLocalize/RNLocalizeModuleTypes.h b/windows/RNLocalize/RNLocalizeModuleTypes.h index 1f163af..f8668e1 100644 --- a/windows/RNLocalize/RNLocalizeModuleTypes.h +++ b/windows/RNLocalize/RNLocalizeModuleTypes.h @@ -24,7 +24,7 @@ struct Locale std::string languageTag; REACT_FIELD(isRTL, L"isRTL") - bool isRTL; + bool isRTL = true; }; REACT_STRUCT(NumberFormatSettings) @@ -62,10 +62,10 @@ struct LocalizationConstants std::string timeZone; REACT_FIELD(uses24HourClock, L"uses24HourClock") - bool uses24HourClock; + bool uses24HourClock = false; REACT_FIELD(usesMetricSystem, L"usesMetricSystem") - bool usesMetricSystem; + bool usesMetricSystem = true; REACT_FIELD(usesAutoDateAndTime, L"usesAutoDateAndTime") std::optional usesAutoDateAndTime; From baf120867e8a886e6fd9a6d0656cf6dc6e447bd2 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 5 Apr 2021 16:55:38 -0700 Subject: [PATCH 15/20] switch off macro types --- windows/RNLocalize/RNLocalizeModule.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/windows/RNLocalize/RNLocalizeModule.cpp b/windows/RNLocalize/RNLocalizeModule.cpp index b7bd1f7..c47e124 100644 --- a/windows/RNLocalize/RNLocalizeModule.cpp +++ b/windows/RNLocalize/RNLocalizeModule.cpp @@ -154,17 +154,18 @@ std::string RNLocalizeModule::getTimeZone() NumberFormatSettings RNLocalizeModule::getNumberFormatSettings(std::string locale) { - LPCWSTR locale_l = std::wstring(locale.begin(), locale.end()).c_str(); + const wchar_t *locale_l = std::wstring(locale.begin(), locale.end()).c_str(); NumberFormatSettings numberFormatSettings; // Use GetNumberFormatEx to get number formatting based on the passed locale. std::string num_s("1000.00"); std::wstring num_w = std::wstring(num_s.begin(), num_s.end()); - LPCWSTR num_l = num_w.c_str(); + const wchar_t *num_l = num_w.c_str(); - LPWSTR numberFormatBuffer = new TCHAR[9]; - GetNumberFormatEx(locale_l, NULL, num_l, NULL, numberFormatBuffer, 9); + int numberFormatBufferLength = 9; + wchar_t *numberFormatBuffer = new wchar_t[numberFormatBufferLength]; + GetNumberFormatEx(locale_l, 0, num_l, nullptr, numberFormatBuffer, numberFormatBufferLength); std::string formattedString = winrt::to_string(numberFormatBuffer); delete numberFormatBuffer; From e283d3f49d91b3a73989c81e4d293d4fc8bfc923 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 5 Apr 2021 17:14:27 -0700 Subject: [PATCH 16/20] no more dynamic allocation --- windows/RNLocalize/RNLocalizeModule.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/windows/RNLocalize/RNLocalizeModule.cpp b/windows/RNLocalize/RNLocalizeModule.cpp index c47e124..8ce382b 100644 --- a/windows/RNLocalize/RNLocalizeModule.cpp +++ b/windows/RNLocalize/RNLocalizeModule.cpp @@ -163,11 +163,10 @@ NumberFormatSettings RNLocalizeModule::getNumberFormatSettings(std::string local std::wstring num_w = std::wstring(num_s.begin(), num_s.end()); const wchar_t *num_l = num_w.c_str(); - int numberFormatBufferLength = 9; - wchar_t *numberFormatBuffer = new wchar_t[numberFormatBufferLength]; + const int numberFormatBufferLength = 9; + wchar_t numberFormatBuffer[numberFormatBufferLength]; GetNumberFormatEx(locale_l, 0, num_l, nullptr, numberFormatBuffer, numberFormatBufferLength); std::string formattedString = winrt::to_string(numberFormatBuffer); - delete numberFormatBuffer; numberFormatSettings.decimalSeparator = formattedString.substr(5, 1); numberFormatSettings.groupingSeparator = formattedString.substr(1, 1); From 3ec4c886800e4572c1c670416be3613f69930c05 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 5 Apr 2021 17:59:08 -0700 Subject: [PATCH 17/20] eliminate additional warnings and unnecesary intermediate. --- windows/RNLocalize/RNLocalizeModule.cpp | 14 +++++++------- windows/RNLocalize/RNLocalizeModuleTypes.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/windows/RNLocalize/RNLocalizeModule.cpp b/windows/RNLocalize/RNLocalizeModule.cpp index 8ce382b..bccb302 100644 --- a/windows/RNLocalize/RNLocalizeModule.cpp +++ b/windows/RNLocalize/RNLocalizeModule.cpp @@ -3,8 +3,6 @@ #include "RNLocalizeModule.h" #include -#include -#include #include #include @@ -129,7 +127,11 @@ std::string RNLocalizeModule::getCalendar() return "buddhist"; } - std::transform(calendar.begin(), calendar.end(), calendar.begin(), ::tolower); + std::transform(calendar.begin(), calendar.end(), calendar.begin(), + [](char c) { + return static_cast(std::tolower(c)); + }); + return calendar; } @@ -154,18 +156,16 @@ std::string RNLocalizeModule::getTimeZone() NumberFormatSettings RNLocalizeModule::getNumberFormatSettings(std::string locale) { - const wchar_t *locale_l = std::wstring(locale.begin(), locale.end()).c_str(); - NumberFormatSettings numberFormatSettings; // Use GetNumberFormatEx to get number formatting based on the passed locale. std::string num_s("1000.00"); std::wstring num_w = std::wstring(num_s.begin(), num_s.end()); - const wchar_t *num_l = num_w.c_str(); + const wchar_t *locale_l = std::wstring(locale.begin(), locale.end()).c_str(); const int numberFormatBufferLength = 9; wchar_t numberFormatBuffer[numberFormatBufferLength]; - GetNumberFormatEx(locale_l, 0, num_l, nullptr, numberFormatBuffer, numberFormatBufferLength); + GetNumberFormatEx(locale_l, 0, num_w.c_str(), nullptr, numberFormatBuffer, numberFormatBufferLength); std::string formattedString = winrt::to_string(numberFormatBuffer); numberFormatSettings.decimalSeparator = formattedString.substr(5, 1); diff --git a/windows/RNLocalize/RNLocalizeModuleTypes.h b/windows/RNLocalize/RNLocalizeModuleTypes.h index f8668e1..5d4ae6b 100644 --- a/windows/RNLocalize/RNLocalizeModuleTypes.h +++ b/windows/RNLocalize/RNLocalizeModuleTypes.h @@ -24,7 +24,7 @@ struct Locale std::string languageTag; REACT_FIELD(isRTL, L"isRTL") - bool isRTL = true; + bool isRTL = false; }; REACT_STRUCT(NumberFormatSettings) From cc1c3a7e455b7d2abdc04ec5b4f342db7f20d308 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 14 Apr 2021 16:19:07 -0700 Subject: [PATCH 18/20] PR feedback --- windows/RNLocalize/RNLocalizeModule.cpp | 17 +++++++++-------- windows/RNLocalize/RNLocalizeModule.h | 4 ++-- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/windows/RNLocalize/RNLocalizeModule.cpp b/windows/RNLocalize/RNLocalizeModule.cpp index bccb302..870a804 100644 --- a/windows/RNLocalize/RNLocalizeModule.cpp +++ b/windows/RNLocalize/RNLocalizeModule.cpp @@ -118,7 +118,7 @@ std::string RNLocalizeModule::getCalendar() // "JapaneseCalendar", "JulianCalendar", "KoreanCalendar", "PersianCalendar", // "TaiwanCalendar", "ThaiBuddhistCalendar", "UmAlQuraCalendar" // In all cases they end in "Calendar" and RNL doesn't expect this, so we must truncate it. - calendar = calendar.substr(0, calendar.size() - 8); + calendar = calendar.substr(0, calendar.size() - (ARRAYSIZE("Calendar") - 1)); // Special edge case: RNL expects "buddhist" not "thaibuddhist" // see https://github.com/zoontek/react-native-localize/blob/master/src/types.ts @@ -139,14 +139,16 @@ std::string RNLocalizeModule::getTimeZone() { // Use GetTimeZoneInformation to get the hour bias from GMT and then create a formatted string. TIME_ZONE_INFORMATION TimeZoneInfo; - GetTimeZoneInformation(&TimeZoneInfo); - + if (GetTimeZoneInformation(&TimeZoneInfo) == TIME_ZONE_ID_INVALID) + { + return std::string(); + } int hourBias = -TimeZoneInfo.Bias / 60; char timeZoneBuffer[10]; snprintf( timeZoneBuffer, sizeof(timeZoneBuffer), - "GMT%s%02d:00", + "UTC%s%02d:00", hourBias < 0 ? "-" : "+", hourBias < 0 ? -hourBias : hourBias); std::string timeZoneString(timeZoneBuffer); @@ -159,13 +161,12 @@ NumberFormatSettings RNLocalizeModule::getNumberFormatSettings(std::string local NumberFormatSettings numberFormatSettings; // Use GetNumberFormatEx to get number formatting based on the passed locale. - std::string num_s("1000.00"); - std::wstring num_w = std::wstring(num_s.begin(), num_s.end()); + std::wstring num1000(L"1000.00"); - const wchar_t *locale_l = std::wstring(locale.begin(), locale.end()).c_str(); + std::wstring wStrLocale = std::wstring(locale.begin(), locale.end()); const int numberFormatBufferLength = 9; wchar_t numberFormatBuffer[numberFormatBufferLength]; - GetNumberFormatEx(locale_l, 0, num_w.c_str(), nullptr, numberFormatBuffer, numberFormatBufferLength); + GetNumberFormatEx(wStrLocale.c_str(), 0, num1000.c_str(), nullptr, numberFormatBuffer, numberFormatBufferLength); std::string formattedString = winrt::to_string(numberFormatBuffer); numberFormatSettings.decimalSeparator = formattedString.substr(5, 1); diff --git a/windows/RNLocalize/RNLocalizeModule.h b/windows/RNLocalize/RNLocalizeModule.h index 2b8c66b..07134a2 100644 --- a/windows/RNLocalize/RNLocalizeModule.h +++ b/windows/RNLocalize/RNLocalizeModule.h @@ -35,8 +35,8 @@ struct RNLocalizeModule NumberFormatSettings getNumberFormatSettings(std::string); LocalizationConstants getExported(); - const std::array USES_FAHRENHEIT{{"BS", "BZ", "KY", "PR", "PW", "US"}}; - const std::array USES_IMPERIAL{{"LR", "MM", "US"}}; + const static std::array USES_FAHRENHEIT{{"BS", "BZ", "KY", "PR", "PW", "US"}}; + const static std::array USES_IMPERIAL{{"LR", "MM", "US"}}; }; } // namespace winrt::RNLocalize From 2cf0e1ba6dbfa5171f8cac141afb865686748712 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 14 Apr 2021 16:40:15 -0700 Subject: [PATCH 19/20] add comment of why 5 --- windows/RNLocalize/RNLocalizeModule.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/windows/RNLocalize/RNLocalizeModule.cpp b/windows/RNLocalize/RNLocalizeModule.cpp index 870a804..4e75c52 100644 --- a/windows/RNLocalize/RNLocalizeModule.cpp +++ b/windows/RNLocalize/RNLocalizeModule.cpp @@ -169,6 +169,7 @@ NumberFormatSettings RNLocalizeModule::getNumberFormatSettings(std::string local GetNumberFormatEx(wStrLocale.c_str(), 0, num1000.c_str(), nullptr, numberFormatBuffer, numberFormatBufferLength); std::string formattedString = winrt::to_string(numberFormatBuffer); + // Note: The index is intentionally 5 because the output is expected to be something like "1,000.00" and not the original input of "1000.00" numberFormatSettings.decimalSeparator = formattedString.substr(5, 1); numberFormatSettings.groupingSeparator = formattedString.substr(1, 1); From 18840794c446289aa501195cb349e751068e267d Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 17 May 2021 03:08:19 -0700 Subject: [PATCH 20/20] pr comment --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 9983993..7f2af50 100644 --- a/package.json +++ b/package.json @@ -31,8 +31,7 @@ ], "scripts": { "format": "prettier '**/*.{js,json,md,ts,tsx}' --write", - "prepare": "bob build", - "windows": "react-native run-windows" + "prepare": "bob build" }, "@react-native-community/bob": { "source": "src",