forked from Ivasoft/mattermost-mobile
Added localization into iOS share extension (#7351)
This commit is contained in:
@@ -495,11 +495,14 @@ export const hasWriteStoragePermission = async (intl: IntlShape) => {
|
||||
},
|
||||
{applicationName},
|
||||
);
|
||||
const text = intl.formatMessage({
|
||||
id: 'mobile.write_storage_permission_denied_description',
|
||||
defaultMessage:
|
||||
'Save files to your device. Open Settings to grant {applicationName} write access to files on this device.',
|
||||
});
|
||||
const text = intl.formatMessage(
|
||||
{
|
||||
id: 'mobile.write_storage_permission_denied_description',
|
||||
defaultMessage:
|
||||
'Save files to your device. Open Settings to grant {applicationName} write access to files on this device.',
|
||||
},
|
||||
{applicationName},
|
||||
);
|
||||
|
||||
Alert.alert(title, text, [
|
||||
{
|
||||
|
||||
@@ -952,7 +952,11 @@
|
||||
"settings.save": "Save",
|
||||
"share_extension.channel_error": "You are not a member of a team on the selected server. Select another server or open Mattermost to join a team.",
|
||||
"share_extension.channel_label": "Channel",
|
||||
"share_extension.channels_screen.title": "Select channel",
|
||||
"share_extension.count_limit": "You can only share {count, number} {count, plural, one {file} other {files}} on this server",
|
||||
"share_extension.error_screen.description": "There was an error when attempting to share the content to {applicationName}.",
|
||||
"share_extension.error_screen.label": "An error ocurred",
|
||||
"share_extension.error_screen.reason": "Reason: {reason}",
|
||||
"share_extension.file_limit.multiple": "Each file must be less than {size}",
|
||||
"share_extension.file_limit.single": "File must be less than {size}",
|
||||
"share_extension.max_resolution": "Image exceeds maximum dimensions of 7680 x 4320 px",
|
||||
@@ -960,7 +964,7 @@
|
||||
"share_extension.multiple_label": "{count, number} attachments",
|
||||
"share_extension.server_label": "Server",
|
||||
"share_extension.servers_screen.title": "Select server",
|
||||
"share_extension.share_screen.title": "Share to Mattermost",
|
||||
"share_extension.share_screen.title": "Share to {applicationName}",
|
||||
"share_extension.upload_disabled": "File uploads are disabled for the selected server",
|
||||
"share_feedback.button.no": "No, thanks",
|
||||
"share_feedback.button.yes": "Yes",
|
||||
|
||||
@@ -415,7 +415,7 @@ platform :ios do
|
||||
end
|
||||
|
||||
lane :update_identifiers do
|
||||
# Set the name for the app
|
||||
# Set the name for the app and share extension
|
||||
app_name = ENV['APP_NAME'] || 'Mattermost Beta'
|
||||
update_info_plist(
|
||||
xcodeproj: './ios/Mattermost.xcodeproj',
|
||||
@@ -423,6 +423,12 @@ platform :ios do
|
||||
display_name: app_name
|
||||
)
|
||||
|
||||
update_info_plist(
|
||||
xcodeproj: './ios/Mattermost.xcodeproj',
|
||||
plist_path: 'MattermostShare/Info.plist',
|
||||
display_name: app_name
|
||||
)
|
||||
|
||||
# Set the notification service extension bundle identifier
|
||||
notification_bundle_id = ENV['NOTIFICATION_SERVICE_IDENTIFIER'] || 'com.mattermost.rnbeta.NotificationService'
|
||||
update_app_identifier(
|
||||
@@ -563,20 +569,27 @@ platform :ios do
|
||||
json = JSON.parse(localization_file)
|
||||
|
||||
plist_strings = ''
|
||||
localized_strings = ''
|
||||
json.each do |key, value|
|
||||
if key.match?('mobile.ios.plist')
|
||||
unless value.nil? || value.empty?
|
||||
unless value.nil? || value.empty?
|
||||
if key.match?('mobile.ios.plist')
|
||||
plist_strings.concat("#{key.split('.').last} = \"#{value}\";\n")
|
||||
else
|
||||
value.gsub!('\\', '\\\\\\\\') # How to replace backslash with double backslash https://stackoverflow.com/a/6209532
|
||||
value.gsub!('"', '\"')
|
||||
localized_strings.concat("\"#{key}\" = \"#{value}\";\n")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
plist_strings.gsub!('{applicationName}', "#{app_name}")
|
||||
localized_strings.gsub!('{applicationName}', "#{app_name}")
|
||||
|
||||
language = item.split('.').first
|
||||
project_localization_path = "../ios/Mattermost/i18n/#{language}.lproj"
|
||||
FileUtils.mkdir_p project_localization_path
|
||||
File.write("#{project_localization_path}/InfoPlist.strings", plist_strings)
|
||||
File.write("#{project_localization_path}/Localizable.strings", localized_strings)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -62,6 +62,29 @@
|
||||
672D98B029F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D988229F1927F004228D6 /* InfoPlist.strings */; };
|
||||
672D98B129F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D988529F1927F004228D6 /* InfoPlist.strings */; };
|
||||
672D98B229F1927F004228D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 672D988529F1927F004228D6 /* InfoPlist.strings */; };
|
||||
67AE0FC52A0556A500810C56 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67AE0FC32A0556A500810C56 /* Localizable.strings */; };
|
||||
67FEADD92A0E96DD00DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADD62A0E96DD00DDF4AE /* Localizable.strings */; };
|
||||
67FEADDD2A12602A00DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADDA2A12602A00DDF4AE /* Localizable.strings */; };
|
||||
67FEADE12A12603600DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADDE2A12603600DDF4AE /* Localizable.strings */; };
|
||||
67FEADE52A12603F00DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADE22A12603F00DDF4AE /* Localizable.strings */; };
|
||||
67FEADE92A12604900DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADE62A12604900DDF4AE /* Localizable.strings */; };
|
||||
67FEADED2A12608900DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADEA2A12608900DDF4AE /* Localizable.strings */; };
|
||||
67FEADF12A12609300DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADEE2A12609300DDF4AE /* Localizable.strings */; };
|
||||
67FEADF52A1260A900DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADF22A1260A900DDF4AE /* Localizable.strings */; };
|
||||
67FEADF92A1260B200DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADF62A1260B200DDF4AE /* Localizable.strings */; };
|
||||
67FEAE012A1260C200DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADFE2A1260C200DDF4AE /* Localizable.strings */; };
|
||||
67FEAE052A1260CA00DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE022A1260C900DDF4AE /* Localizable.strings */; };
|
||||
67FEAE092A12611B00DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE062A12611B00DDF4AE /* Localizable.strings */; };
|
||||
67FEAE0D2A12612500DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE0A2A12612500DDF4AE /* Localizable.strings */; };
|
||||
67FEAE112A12613000DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE0E2A12613000DDF4AE /* Localizable.strings */; };
|
||||
67FEAE152A12614F00DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE122A12614F00DDF4AE /* Localizable.strings */; };
|
||||
67FEAE192A12615900DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE162A12615900DDF4AE /* Localizable.strings */; };
|
||||
67FEAE1D2A12616500DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE1A2A12616500DDF4AE /* Localizable.strings */; };
|
||||
67FEAE212A12616F00DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE1E2A12616F00DDF4AE /* Localizable.strings */; };
|
||||
67FEAE252A12618000DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE222A12618000DDF4AE /* Localizable.strings */; };
|
||||
67FEAE292A1261A000DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEAE262A1261A000DDF4AE /* Localizable.strings */; };
|
||||
67FEAE2A2A1261EA00DDF4AE /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 67FEADFA2A1260B900DDF4AE /* Localizable.strings */; };
|
||||
67FEAE2C2A127C3600DDF4AE /* NumberFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67FEAE2B2A127C3600DDF4AE /* NumberFormatter.swift */; };
|
||||
6C9B1EFD6561083917AF06CF /* libPods-Mattermost.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DEEFB3ED6175724A2653247 /* libPods-Mattermost.a */; };
|
||||
7F0F4B0A24BA173900E14C60 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 7F0F4B0924BA173900E14C60 /* LaunchScreen.storyboard */; };
|
||||
7F151D3E221B062700FAD8F3 /* RuntimeUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */; };
|
||||
@@ -246,6 +269,29 @@
|
||||
672D988029F1927F004228D6 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = InfoPlist.strings; sourceTree = "<group>"; };
|
||||
672D988329F1927F004228D6 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = InfoPlist.strings; sourceTree = "<group>"; };
|
||||
672D988629F1927F004228D6 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = InfoPlist.strings; sourceTree = "<group>"; };
|
||||
67AE0FC42A0556A500810C56 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADD72A0E96DD00DDF4AE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADDB2A12602A00DDF4AE /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADDF2A12603600DDF4AE /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADE32A12603F00DDF4AE /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADE72A12604900DDF4AE /* en_AU */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en_AU; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADEB2A12608900DDF4AE /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADEF2A12609300DDF4AE /* fa */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fa; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADF32A1260A900DDF4AE /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADF72A1260B200DDF4AE /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADFB2A1260B900DDF4AE /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEADFF2A1260C200DDF4AE /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE032A1260C900DDF4AE /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE072A12611B00DDF4AE /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE0B2A12612500DDF4AE /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE0F2A12613000DDF4AE /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE132A12614F00DDF4AE /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE172A12615900DDF4AE /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE1B2A12616500DDF4AE /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE1F2A12616F00DDF4AE /* zh-CN */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-CN"; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE232A12618000DDF4AE /* zh-TW */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-TW"; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE272A1261A000DDF4AE /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = Localizable.strings; sourceTree = "<group>"; };
|
||||
67FEAE2B2A127C3600DDF4AE /* NumberFormatter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NumberFormatter.swift; sourceTree = "<group>"; };
|
||||
6BAF8296411D4657B5A0E8F8 /* libRNReactNativeDocViewer.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNReactNativeDocViewer.a; sourceTree = "<group>"; };
|
||||
7F0F4B0924BA173900E14C60 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = SplashScreenResource/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
7F151D3D221B062700FAD8F3 /* RuntimeUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = RuntimeUtils.swift; path = Mattermost/RuntimeUtils.swift; sourceTree = "<group>"; };
|
||||
@@ -512,6 +558,7 @@
|
||||
672D984529F1927E004228D6 /* de.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADE22A12603F00DDF4AE /* Localizable.strings */,
|
||||
672D984629F1927E004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = de.lproj;
|
||||
@@ -521,6 +568,7 @@
|
||||
672D984829F1927E004228D6 /* ja.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADFE2A1260C200DDF4AE /* Localizable.strings */,
|
||||
672D984929F1927E004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = ja.lproj;
|
||||
@@ -530,6 +578,7 @@
|
||||
672D984B29F1927E004228D6 /* fa.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADEE2A12609300DDF4AE /* Localizable.strings */,
|
||||
672D984C29F1927E004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = fa.lproj;
|
||||
@@ -539,6 +588,7 @@
|
||||
672D984E29F1927F004228D6 /* pl.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE0A2A12612500DDF4AE /* Localizable.strings */,
|
||||
672D984F29F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = pl.lproj;
|
||||
@@ -548,6 +598,7 @@
|
||||
672D985129F1927F004228D6 /* ar.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADDA2A12602A00DDF4AE /* Localizable.strings */,
|
||||
672D985229F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = ar.lproj;
|
||||
@@ -557,6 +608,7 @@
|
||||
672D985429F1927F004228D6 /* sv.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE122A12614F00DDF4AE /* Localizable.strings */,
|
||||
672D985529F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = sv.lproj;
|
||||
@@ -566,6 +618,7 @@
|
||||
672D985729F1927F004228D6 /* ru.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67AE0FC32A0556A500810C56 /* Localizable.strings */,
|
||||
672D985829F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = ru.lproj;
|
||||
@@ -575,6 +628,7 @@
|
||||
672D985A29F1927F004228D6 /* ro.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE262A1261A000DDF4AE /* Localizable.strings */,
|
||||
672D985B29F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = ro.lproj;
|
||||
@@ -584,6 +638,7 @@
|
||||
672D985D29F1927F004228D6 /* bg.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADDE2A12603600DDF4AE /* Localizable.strings */,
|
||||
672D985E29F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = bg.lproj;
|
||||
@@ -593,6 +648,7 @@
|
||||
672D986029F1927F004228D6 /* tr.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE162A12615900DDF4AE /* Localizable.strings */,
|
||||
672D986129F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = tr.lproj;
|
||||
@@ -602,6 +658,7 @@
|
||||
672D986329F1927F004228D6 /* zh-TW.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE222A12618000DDF4AE /* Localizable.strings */,
|
||||
672D986429F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = "zh-TW.lproj";
|
||||
@@ -611,6 +668,7 @@
|
||||
672D986629F1927F004228D6 /* en.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADD62A0E96DD00DDF4AE /* Localizable.strings */,
|
||||
672D986729F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = en.lproj;
|
||||
@@ -620,6 +678,7 @@
|
||||
672D986929F1927F004228D6 /* en_AU.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADE62A12604900DDF4AE /* Localizable.strings */,
|
||||
672D986A29F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = en_AU.lproj;
|
||||
@@ -629,6 +688,7 @@
|
||||
672D986C29F1927F004228D6 /* hu.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADF62A1260B200DDF4AE /* Localizable.strings */,
|
||||
672D986D29F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = hu.lproj;
|
||||
@@ -638,6 +698,7 @@
|
||||
672D986F29F1927F004228D6 /* fr.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADF22A1260A900DDF4AE /* Localizable.strings */,
|
||||
672D987029F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = fr.lproj;
|
||||
@@ -647,6 +708,7 @@
|
||||
672D987229F1927F004228D6 /* ko.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE022A1260C900DDF4AE /* Localizable.strings */,
|
||||
672D987329F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = ko.lproj;
|
||||
@@ -656,6 +718,7 @@
|
||||
672D987529F1927F004228D6 /* zh-CN.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE1E2A12616F00DDF4AE /* Localizable.strings */,
|
||||
672D987629F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = "zh-CN.lproj";
|
||||
@@ -665,6 +728,7 @@
|
||||
672D987829F1927F004228D6 /* es.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADEA2A12608900DDF4AE /* Localizable.strings */,
|
||||
672D987929F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = es.lproj;
|
||||
@@ -674,6 +738,7 @@
|
||||
672D987B29F1927F004228D6 /* it.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEADFA2A1260B900DDF4AE /* Localizable.strings */,
|
||||
672D987C29F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = it.lproj;
|
||||
@@ -683,6 +748,7 @@
|
||||
672D987E29F1927F004228D6 /* nl.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE062A12611B00DDF4AE /* Localizable.strings */,
|
||||
672D987F29F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = nl.lproj;
|
||||
@@ -692,6 +758,7 @@
|
||||
672D988129F1927F004228D6 /* pt-BR.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE0E2A12613000DDF4AE /* Localizable.strings */,
|
||||
672D988229F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = "pt-BR.lproj";
|
||||
@@ -701,6 +768,7 @@
|
||||
672D988429F1927F004228D6 /* uk.lproj */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE1A2A12616500DDF4AE /* Localizable.strings */,
|
||||
672D988529F1927F004228D6 /* InfoPlist.strings */,
|
||||
);
|
||||
name = uk.lproj;
|
||||
@@ -784,6 +852,7 @@
|
||||
7F7E9F432864E6AF0064BFAF /* Extensions */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
67FEAE2B2A127C3600DDF4AE /* NumberFormatter.swift */,
|
||||
7F7E9F442864E6C60064BFAF /* Color.swift */,
|
||||
7F7E9F452864E6C60064BFAF /* View.swift */,
|
||||
7F93AAAD287725660047B89F /* Int64.swift */,
|
||||
@@ -1197,8 +1266,17 @@
|
||||
672D98AA29F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
672D989029F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
672D989A29F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
67FEADF52A1260A900DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEADD92A0E96DD00DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEAE092A12611B00DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEADE52A12603F00DDF4AE /* Localizable.strings in Resources */,
|
||||
7FD4825E2864DC5800A5B18B /* Metropolis-Regular.ttf in Resources */,
|
||||
67FEAE252A12618000DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEADF92A1260B200DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEAE1D2A12616500DDF4AE /* Localizable.strings in Resources */,
|
||||
7FD4825F2864DC5800A5B18B /* Metropolis-SemiBold.ttf in Resources */,
|
||||
67FEAE0D2A12612500DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEADE92A12604900DDF4AE /* Localizable.strings in Resources */,
|
||||
7FD482602864DC5800A5B18B /* OpenSans-Bold.ttf in Resources */,
|
||||
7FD482612864DC5800A5B18B /* OpenSans-BoldItalic.ttf in Resources */,
|
||||
672D988829F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
@@ -1207,21 +1285,34 @@
|
||||
672D989429F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
672D98A029F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
672D989229F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
67FEAE292A1261A000DDF4AE /* Localizable.strings in Resources */,
|
||||
7FD482632864DC5900A5B18B /* OpenSans-ExtraBoldItalic.ttf in Resources */,
|
||||
672D988E29F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
7FD482642864DC5900A5B18B /* OpenSans-Italic.ttf in Resources */,
|
||||
672D989C29F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
672D98A229F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
672D988C29F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
67FEADF12A12609300DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEAE112A12613000DDF4AE /* Localizable.strings in Resources */,
|
||||
67AE0FC52A0556A500810C56 /* Localizable.strings in Resources */,
|
||||
67FEAE152A12614F00DDF4AE /* Localizable.strings in Resources */,
|
||||
7FD482652864DC5900A5B18B /* OpenSans-Light.ttf in Resources */,
|
||||
672D98AE29F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
67FEAE052A1260CA00DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEAE2A2A1261EA00DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEAE012A1260C200DDF4AE /* Localizable.strings in Resources */,
|
||||
7FD482662864DC5900A5B18B /* OpenSans-LightItalic.ttf in Resources */,
|
||||
7FD482672864DC5900A5B18B /* OpenSans-Regular.ttf in Resources */,
|
||||
672D98B229F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
672D989829F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
67FEADE12A12603600DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEAE192A12615900DDF4AE /* Localizable.strings in Resources */,
|
||||
67FEADDD2A12602A00DDF4AE /* Localizable.strings in Resources */,
|
||||
7FD482682864DC5900A5B18B /* OpenSans-SemiBold.ttf in Resources */,
|
||||
672D98AC29F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
67FEAE212A12616F00DDF4AE /* Localizable.strings in Resources */,
|
||||
7FD482692864DC5900A5B18B /* OpenSans-SemiBoldItalic.ttf in Resources */,
|
||||
67FEADED2A12608900DDF4AE /* Localizable.strings in Resources */,
|
||||
7FD4825C2864DC4200A5B18B /* compass-icons.ttf in Resources */,
|
||||
7FD482292864D69700A5B18B /* Assets.xcassets in Resources */,
|
||||
672D98A829F1927F004228D6 /* InfoPlist.strings in Resources */,
|
||||
@@ -1413,6 +1504,7 @@
|
||||
7F1EBFCE286F2AE200824AF1 /* MultipleAttachmentView.swift in Sources */,
|
||||
7F7E9F792864E8160064BFAF /* SearchBarView.swift in Sources */,
|
||||
7FB50D222856E1AB0035ACB5 /* ShareUIView.swift in Sources */,
|
||||
67FEAE2C2A127C3600DDF4AE /* NumberFormatter.swift in Sources */,
|
||||
7F93AAA828761FA10047B89F /* NoMembershipView.swift in Sources */,
|
||||
7F7E9F772864E8160064BFAF /* LinkPreview.swift in Sources */,
|
||||
7F7E9F782864E8160064BFAF /* OptionView.swift in Sources */,
|
||||
@@ -1634,6 +1726,182 @@
|
||||
name = InfoPlist.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67AE0FC32A0556A500810C56 /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67AE0FC42A0556A500810C56 /* ru */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADD62A0E96DD00DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADD72A0E96DD00DDF4AE /* en */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADDA2A12602A00DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADDB2A12602A00DDF4AE /* ar */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADDE2A12603600DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADDF2A12603600DDF4AE /* bg */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADE22A12603F00DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADE32A12603F00DDF4AE /* de */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADE62A12604900DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADE72A12604900DDF4AE /* en_AU */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADEA2A12608900DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADEB2A12608900DDF4AE /* es */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADEE2A12609300DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADEF2A12609300DDF4AE /* fa */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADF22A1260A900DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADF32A1260A900DDF4AE /* fr */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADF62A1260B200DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADF72A1260B200DDF4AE /* hu */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADFA2A1260B900DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADFB2A1260B900DDF4AE /* it */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEADFE2A1260C200DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEADFF2A1260C200DDF4AE /* ja */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEAE022A1260C900DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEAE032A1260C900DDF4AE /* ko */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEAE062A12611B00DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEAE072A12611B00DDF4AE /* nl */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEAE0A2A12612500DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEAE0B2A12612500DDF4AE /* pl */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEAE0E2A12613000DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEAE0F2A12613000DDF4AE /* pt-BR */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEAE122A12614F00DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEAE132A12614F00DDF4AE /* sv */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEAE162A12615900DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEAE172A12615900DDF4AE /* tr */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEAE1A2A12616500DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEAE1B2A12616500DDF4AE /* uk */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEAE1E2A12616F00DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEAE1F2A12616F00DDF4AE /* zh-CN */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEAE222A12618000DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEAE232A12618000DDF4AE /* zh-TW */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
67FEAE262A1261A000DDF4AE /* Localizable.strings */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
67FEAE272A1261A000DDF4AE /* ro */,
|
||||
);
|
||||
name = Localizable.strings;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
7FC5698A28563FDB000B0905 /* MainInterface.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
@@ -1848,8 +2116,6 @@
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = MattermostShare/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = MattermostShare;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -1899,8 +2165,6 @@
|
||||
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
INFOPLIST_FILE = MattermostShare/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = MattermostShare;
|
||||
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
|
||||
0
ios/Mattermost/i18n/ar.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/ar.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/bg.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/bg.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/de.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/de.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/en.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/en.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/en_AU.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/en_AU.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/es.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/es.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/fa.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/fa.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/fr.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/fr.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/hu.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/hu.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/it.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/it.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/ja.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/ja.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/ko.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/ko.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/nl.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/nl.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/pl.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/pl.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/pt-BR.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/pt-BR.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/ro.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/ro.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/ru.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/ru.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/sv.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/sv.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/tr.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/tr.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/uk.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/uk.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/zh-CN.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/zh-CN.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/zh-TW.lproj/Localizable.strings
Normal file
0
ios/Mattermost/i18n/zh-TW.lproj/Localizable.strings
Normal file
@@ -22,10 +22,7 @@ extension Int64 {
|
||||
let i = floor(log(size) / log(k))
|
||||
|
||||
// Format number with thousands separator and everything below 1 giga with no decimal places.
|
||||
let numberFormatter = NumberFormatter()
|
||||
numberFormatter.maximumFractionDigits = i < 3 ? 0 : 1
|
||||
numberFormatter.numberStyle = .decimal
|
||||
|
||||
let numberFormatter = i < 3 ? NumberFormatter.noFractionDigitsDecimalFormatter : NumberFormatter.oneFractionDigitDecimalFormatter
|
||||
let numberString = numberFormatter.string(from: NSNumber(value: size / pow(k, i))) ?? "Unknown"
|
||||
let suffix = suffixes[Int(i)]
|
||||
return "\(numberString) \(suffix)"
|
||||
|
||||
25
ios/MattermostShare/Extensions/NumberFormatter.swift
Normal file
25
ios/MattermostShare/Extensions/NumberFormatter.swift
Normal file
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// NumberFormatter.swift
|
||||
// MattermostShare
|
||||
//
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension NumberFormatter {
|
||||
static let noFractionDigitsDecimalFormatter: NumberFormatter = {
|
||||
let numberFormatter = NumberFormatter()
|
||||
numberFormatter.maximumFractionDigits = 0
|
||||
numberFormatter.numberStyle = .decimal
|
||||
return numberFormatter
|
||||
}()
|
||||
|
||||
static let oneFractionDigitDecimalFormatter: NumberFormatter = {
|
||||
let numberFormatter = NumberFormatter()
|
||||
numberFormatter.maximumFractionDigits = 1
|
||||
numberFormatter.numberStyle = .decimal
|
||||
return numberFormatter
|
||||
}()
|
||||
}
|
||||
@@ -77,5 +77,7 @@
|
||||
<string>$(SENTRY_DSN_IOS)</string>
|
||||
<key>SENTRY_ENABLED</key>
|
||||
<string>$(SENTRY_ENABLED)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@@ -15,16 +15,30 @@ struct AttachmentsView: View {
|
||||
var error: String? {
|
||||
if let server = shareViewModel.server {
|
||||
if server.uploadsDisabled {
|
||||
return "File uploads are disabled for the selected server"
|
||||
return NSLocalizedString("share_extension.upload_disabled",
|
||||
value: "File uploads are disabled for the selected server",
|
||||
comment: ""
|
||||
)
|
||||
}
|
||||
let sizeError = attachments.contains { $0.sizeError(server: server)}
|
||||
let resolutionError = attachments.contains { $0.resolutionError(server: server)}
|
||||
if sizeError && attachments.count == 1 {
|
||||
return "File must be less than \(server.maxFileSize.formattedFileSize)"
|
||||
return NSLocalizedString("share_extension.file_limit.single",
|
||||
value: "File must be less than {size}",
|
||||
comment: ""
|
||||
)
|
||||
.replacingOccurrences(of: "{size}", with: server.maxFileSize.formattedFileSize)
|
||||
} else if sizeError {
|
||||
return "Each file must be less than \(server.maxFileSize.formattedFileSize)"
|
||||
return NSLocalizedString("share_extension.file_limit.multiple",
|
||||
value: "Each file must be less than {size}",
|
||||
comment: ""
|
||||
)
|
||||
.replacingOccurrences(of: "{size}", with: server.maxFileSize.formattedFileSize)
|
||||
} else if resolutionError {
|
||||
return "Image exceeds maximum dimensions of 7680 x 4320 px"
|
||||
return NSLocalizedString("share_extension.max_resolution",
|
||||
value: "Image exceeds maximum dimensions of 7680 x 4320 px",
|
||||
comment: ""
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -65,10 +65,16 @@ struct MultipleAttachmentView: View {
|
||||
}
|
||||
|
||||
if (attachments.count > 1) {
|
||||
Text("\(attachments.count) attachments")
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.64))
|
||||
.font(Font.custom("OpenSans", size: 12))
|
||||
.padding(.leading, 20)
|
||||
Text(
|
||||
NSLocalizedString("share_extension.multiple_label",
|
||||
value: "{count, number} attachments",
|
||||
comment: ""
|
||||
)
|
||||
.replacingOccurrences(of: "{count, number}", with: "\(attachments.count)")
|
||||
)
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.64))
|
||||
.font(Font.custom("OpenSans", size: 12))
|
||||
.padding(.leading, 20)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,12 @@ struct ChannelListView: View {
|
||||
SearchBarView()
|
||||
if shareViewModel.search.isEmpty {
|
||||
HStack {
|
||||
Text("RECENT")
|
||||
.font(Font.custom("OpenSans-SemiBold", size: 12))
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.64))
|
||||
Text(
|
||||
NSLocalizedString("mobile.channel_list.recent", value: "Recent", comment: "")
|
||||
.uppercased()
|
||||
)
|
||||
.font(Font.custom("OpenSans-SemiBold", size: 12))
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.64))
|
||||
Spacer()
|
||||
}
|
||||
.padding(.top, 20)
|
||||
|
||||
@@ -16,8 +16,10 @@ struct SearchBarView: View {
|
||||
HStack {
|
||||
TextField("", text: $shareViewModel.search)
|
||||
.placeholder(when: shareViewModel.search.isEmpty) {
|
||||
Text("Find channels...")
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.64))
|
||||
Text(
|
||||
NSLocalizedString("channel_list.find_channels", value: "Find channels...", comment: "")
|
||||
)
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.64))
|
||||
}
|
||||
.padding(.leading, 40)
|
||||
.padding(.trailing, 30)
|
||||
@@ -59,9 +61,11 @@ struct SearchBarView: View {
|
||||
|
||||
if isEditing {
|
||||
Button(action: dismissKeyboard) {
|
||||
Text("Cancel")
|
||||
.foregroundColor(Color.theme.centerChannelColor)
|
||||
.font(Font.custom("OpenSans", size: 14))
|
||||
Text(
|
||||
NSLocalizedString("mobile.post.cancel", value: "Cancel", comment: "")
|
||||
)
|
||||
.foregroundColor(Color.theme.centerChannelColor)
|
||||
.font(Font.custom("OpenSans", size: 14))
|
||||
}
|
||||
.transition(.move(edge: .trailing))
|
||||
.animation(.linear(duration: 0.15))
|
||||
|
||||
@@ -41,8 +41,8 @@ struct ContentView: View {
|
||||
VStack (spacing: 0) {
|
||||
if shareViewModel.allServers.count > 1 {
|
||||
OptionView(
|
||||
navigationTitle: "Select server",
|
||||
label: "Server",
|
||||
navigationTitle: NSLocalizedString("share_extension.servers_screen.title", value: "Select server", comment: ""),
|
||||
label: NSLocalizedString("share_extension.server_label", value: "Server", comment: ""),
|
||||
value: shareViewModel.server!.displayName
|
||||
) {
|
||||
ServerListView()
|
||||
@@ -51,8 +51,8 @@ struct ContentView: View {
|
||||
}
|
||||
if hasChannels {
|
||||
OptionView(
|
||||
navigationTitle: "Select channel",
|
||||
label: "Channel",
|
||||
navigationTitle: NSLocalizedString("share_extension.channels_screen.title", value: "Select channel", comment: ""),
|
||||
label: NSLocalizedString("share_extension.channel_label", value: "Channel", comment: ""),
|
||||
value: "\(shareViewModel.channel!.displayName) \(shareViewModel.channel!.formattedTeamName)"
|
||||
) {
|
||||
ChannelListView()
|
||||
@@ -66,10 +66,16 @@ struct ContentView: View {
|
||||
.padding(.bottom, 10)
|
||||
|
||||
if hasChannels {
|
||||
FloatingTextField(placeholderText: "Enter a message (optional)", text: $message)
|
||||
FloatingTextField(
|
||||
placeholderText: NSLocalizedString("share_extension.message", value: "Enter a message (optional)", comment: ""),
|
||||
text: $message
|
||||
)
|
||||
} else {
|
||||
ErrorLabelView(
|
||||
error: "You are not a member of a team on the selected server. Select another server or open Mattermost to join a team."
|
||||
error: NSLocalizedString("share_extension.channel_error",
|
||||
value: "You are not a member of a team on the selected server. Select another server or open Mattermost to join a team.",
|
||||
comment: ""
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -53,9 +53,7 @@ struct FloatingTextField: View {
|
||||
}
|
||||
|
||||
func formatLength(_ value: Int64) -> String {
|
||||
let formatter = NumberFormatter()
|
||||
formatter.numberStyle = .decimal
|
||||
formatter.maximumFractionDigits = 0
|
||||
let formatter = NumberFormatter.noFractionDigitsDecimalFormatter
|
||||
let number = NSNumber(value: value)
|
||||
return formatter.string(from: number)!
|
||||
}
|
||||
@@ -64,7 +62,12 @@ struct FloatingTextField: View {
|
||||
VStack (alignment: .leading) {
|
||||
if (error) {
|
||||
ErrorLabelView(
|
||||
error: "Message must be less than \(formatLength(shareViewModel.server!.maxMessageLength)) characters"
|
||||
error: NSLocalizedString("mobile.message_length.message",
|
||||
value: "Your current message is too long. Current character count: {count}/{max}",
|
||||
comment: ""
|
||||
)
|
||||
.replacingOccurrences(of: "{count}", with: formatLength(Int64(text.count)))
|
||||
.replacingOccurrences(of: "{max}", with: formatLength(shareViewModel.server!.maxMessageLength))
|
||||
)
|
||||
}
|
||||
ZStack(alignment: .topLeading) {
|
||||
|
||||
@@ -22,21 +22,40 @@ struct ErrorSharingView: View {
|
||||
NotificationCenter.default.post(name: Notification.Name("submit"), object: nil, userInfo: nil)
|
||||
}
|
||||
} else {
|
||||
Text("An error ocurred")
|
||||
.font(Font.custom("Metropolis-SemiBold", size: 20))
|
||||
.foregroundColor(Color.theme.centerChannelColor)
|
||||
Text("There was an error when attempting to share the content to Mattermost.")
|
||||
.font(Font.custom("OpenSans", size: 16))
|
||||
Text(
|
||||
NSLocalizedString("share_extension.error_screen.label", value: "An error ocurred", comment: "")
|
||||
)
|
||||
.font(Font.custom("Metropolis-SemiBold", size: 20))
|
||||
.foregroundColor(Color.theme.centerChannelColor)
|
||||
Text(
|
||||
NSLocalizedString("share_extension.error_screen.description",
|
||||
value: "There was an error when attempting to share the content to {applicationName}.",
|
||||
comment: ""
|
||||
)
|
||||
.replacingOccurrences(
|
||||
of: "{applicationName}",
|
||||
with: Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String ?? "Mattermost Beta"
|
||||
)
|
||||
)
|
||||
.font(Font.custom("OpenSans", size: 16))
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.72))
|
||||
Text("Reason: \(error)")
|
||||
.font(Font.custom("OpenSans", size: 12))
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.60))
|
||||
Text(
|
||||
NSLocalizedString("share_extension.error_screen.reason",
|
||||
value: "Reason: {reason}",
|
||||
comment: ""
|
||||
)
|
||||
.replacingOccurrences(of: "{reason}", with: error)
|
||||
)
|
||||
.font(Font.custom("OpenSans", size: 12))
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.60))
|
||||
Button {
|
||||
retrying = true
|
||||
} label: {
|
||||
Text("Try again")
|
||||
.font(Font.custom("OpenSans", size: 16))
|
||||
.foregroundColor(Color.theme.buttonColor)
|
||||
Text(
|
||||
NSLocalizedString("mobile.post.failed_retry", value: "Try again", comment: "")
|
||||
)
|
||||
.font(Font.custom("OpenSans", size: 16))
|
||||
.foregroundColor(Color.theme.buttonColor)
|
||||
}
|
||||
.buttonStyle(.borderedProminent)
|
||||
.tint(Color.theme.buttonBg)
|
||||
|
||||
@@ -11,12 +11,22 @@ import SwiftUI
|
||||
struct NoMembershipView: View {
|
||||
var body: some View {
|
||||
VStack (spacing: 8) {
|
||||
Text("Not a member of any team yet")
|
||||
.font(Font.custom("Metropolis-SemiBold", size: 20))
|
||||
.foregroundColor(Color.theme.centerChannelColor)
|
||||
Text("To share content, you'll need to be a member of a team on a Mattermost server.")
|
||||
.font(Font.custom("OpenSans", size: 16))
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.72))
|
||||
Text(
|
||||
NSLocalizedString("extension.no_memberships.title",
|
||||
value: "Not a member of any team yet",
|
||||
comment: ""
|
||||
)
|
||||
)
|
||||
.font(Font.custom("Metropolis-SemiBold", size: 20))
|
||||
.foregroundColor(Color.theme.centerChannelColor)
|
||||
Text(
|
||||
NSLocalizedString("extension.no_memberships.description",
|
||||
value: "To share content, you'll need to be a member of a team on a Mattermost server.",
|
||||
comment: ""
|
||||
)
|
||||
)
|
||||
.font(Font.custom("OpenSans", size: 16))
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.72))
|
||||
}
|
||||
.padding(.horizontal, 12)
|
||||
}
|
||||
|
||||
@@ -11,12 +11,22 @@ import SwiftUI
|
||||
struct NoServersView: View {
|
||||
var body: some View {
|
||||
VStack (spacing: 8) {
|
||||
Text("Not connected to any servers")
|
||||
.font(Font.custom("Metropolis-SemiBold", size: 20))
|
||||
.foregroundColor(Color.theme.centerChannelColor)
|
||||
Text("To share content, you'll need to be logged in to a Mattermost server.")
|
||||
.font(Font.custom("OpenSans", size: 16))
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.72))
|
||||
Text(
|
||||
NSLocalizedString("extension.no_servers.title",
|
||||
value: "Not connected to any servers",
|
||||
comment: ""
|
||||
)
|
||||
)
|
||||
.font(Font.custom("Metropolis-SemiBold", size: 20))
|
||||
.foregroundColor(Color.theme.centerChannelColor)
|
||||
Text(
|
||||
NSLocalizedString("extension.no_servers.description",
|
||||
value: "To share content, you'll need to be logged in to a Mattermost server.",
|
||||
comment: ""
|
||||
)
|
||||
)
|
||||
.font(Font.custom("OpenSans", size: 16))
|
||||
.foregroundColor(Color.theme.centerChannelColor.opacity(0.72))
|
||||
}
|
||||
.padding(.horizontal, 12)
|
||||
}
|
||||
|
||||
@@ -61,7 +61,17 @@ struct InitialView: View {
|
||||
}
|
||||
}
|
||||
.accentColor(.white)
|
||||
.navigationBarTitle("Share to Mattermost", displayMode: .inline)
|
||||
.navigationBarTitle(
|
||||
NSLocalizedString("share_extension.share_screen.title",
|
||||
value: "Share to {applicationName}",
|
||||
comment: ""
|
||||
)
|
||||
.replacingOccurrences(
|
||||
of: "{applicationName}",
|
||||
with: Bundle.main.infoDictionary?["CFBundleDisplayName"] as? String ?? "Mattermost Beta"
|
||||
),
|
||||
displayMode: .inline
|
||||
)
|
||||
.navigationBarItems(
|
||||
leading: CancelButton(attachments: attachments),
|
||||
trailing: PostButton(
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import React, {useMemo, useState} from 'react';
|
||||
import {useNavigation} from '@react-navigation/native';
|
||||
import React, {useEffect, useMemo, useState} from 'react';
|
||||
import {useIntl} from 'react-intl';
|
||||
import {View} from 'react-native';
|
||||
|
||||
import SearchBar from '@components/search';
|
||||
@@ -39,6 +41,14 @@ const Channels = ({theme}: Props) => {
|
||||
const styles = getStyles(theme);
|
||||
const [term, setTerm] = useState('');
|
||||
const color = useMemo(() => changeOpacity(theme.centerChannelColor, 0.72), [theme]);
|
||||
const navigator = useNavigation();
|
||||
const intl = useIntl();
|
||||
|
||||
useEffect(() => {
|
||||
navigator.setOptions({
|
||||
title: intl.formatMessage({id: 'share_extension.channels_screen.title', defaultMessage: 'Select channel'}),
|
||||
});
|
||||
}, [intl.locale]);
|
||||
|
||||
const cancelButtonProps = useMemo(() => ({
|
||||
color,
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
import withObservables from '@nozbe/with-observables';
|
||||
import {useNavigation} from '@react-navigation/native';
|
||||
import React, {useEffect, useMemo} from 'react';
|
||||
import {useIntl} from 'react-intl';
|
||||
import {defineMessages, useIntl} from 'react-intl';
|
||||
import {StyleSheet, View} from 'react-native';
|
||||
import DeviceInfo from 'react-native-device-info';
|
||||
import {from as from$} from 'rxjs';
|
||||
|
||||
import DatabaseManager from '@database/manager';
|
||||
@@ -18,6 +19,21 @@ import PostButton from '@share/components/header/post_button';
|
||||
import {hasChannels} from '@share/queries';
|
||||
import {setShareExtensionState, useShareExtensionServerUrl} from '@share/state';
|
||||
|
||||
export const errorScreenMessages = defineMessages({
|
||||
label: {
|
||||
id: 'share_extension.error_screen.label',
|
||||
defaultMessage: 'An error ocurred',
|
||||
},
|
||||
description: {
|
||||
id: 'share_extension.error_screen.description',
|
||||
defaultMessage: 'There was an error when attempting to share the content to {applicationName}.',
|
||||
},
|
||||
reason: {
|
||||
id: 'share_extension.error_screen.reason',
|
||||
defaultMessage: 'Reason: {reason}',
|
||||
},
|
||||
});
|
||||
|
||||
type Props = {
|
||||
hasChannelMemberships: boolean;
|
||||
initialServerUrl: string;
|
||||
@@ -52,8 +68,14 @@ const ShareScreen = ({hasChannelMemberships, initialServerUrl, files, linkPrevie
|
||||
}, [serverUrl]);
|
||||
|
||||
useEffect(() => {
|
||||
const applicationName = DeviceInfo.getApplicationName();
|
||||
navigator.setOptions({
|
||||
title: intl.formatMessage({id: 'share_extension.share_screen.title', defaultMessage: 'Share to Mattermost'}),
|
||||
title: intl.formatMessage({
|
||||
id: 'share_extension.share_screen.title',
|
||||
defaultMessage: 'Share to {applicationName}',
|
||||
},
|
||||
{applicationName},
|
||||
),
|
||||
});
|
||||
}, [intl.locale]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user