CH-J SM Mobilequản lý máy chủ qua SSH
Menu
Mã nguồn đã công bố

CH-J SM Mobile

Duyệt thư mục và tệp của một bản phát hành ứng dụng cụ thể.

Tải mã nguồn dạng ZIP
CH-J / SM Mobile 175 tệp
sm-mobile-20261016T185235Z-8e93ecc1b59a Ngày thêm: · Ngày dựng:
app_localizations_en.dart Ngày thêm: Chưa ghi nhận ngày 30,2 KB · 1277 dòng
Mã Tải tệp xuống
1// ignore: unused_import
2import 'package:intl/intl.dart' as intl;
3import 'app_localizations.dart';
5// ignore_for_file: type=lint
7/// The translations for English (`en`).
8class AppLocalizationsEn extends AppLocalizations {
9 AppLocalizationsEn([String locale = 'en']) : super(locale);
11 @override
12 String get servers => 'Servers';
14 @override
15 String get terminal => 'Terminal';
17 @override
18 String get files => 'Files';
20 @override
21 String get monitor => 'Monitor';
23 @override
24 String get diagnostics => 'Diagnostics';
26 @override
27 String get settings => 'Settings';
29 @override
30 String get addServer => 'Add server';
32 @override
33 String get editServer => 'Edit server';
35 @override
36 String get name => 'Name';
38 @override
39 String get host => 'Hostname / IP address';
41 @override
42 String get username => 'SSH username';
44 @override
45 String get port => 'SSH port';
47 @override
48 String get password => 'Password';
50 @override
51 String get privateKey => 'Private key';
53 @override
54 String get passphrase => 'Key passphrase (never saved)';
56 @override
57 String get savePassword => 'Save SSH password in Vault';
59 @override
60 String get chooseKey => 'Choose private key';
62 @override
63 String get keyStored => 'Private key stored securely';
65 @override
66 String get connect => 'Connect';
68 @override
69 String get disconnect => 'Disconnect';
71 @override
72 String get connecting => 'Connecting…';
74 @override
75 String get connected => 'Connected';
77 @override
78 String get disconnected => 'Disconnected';
80 @override
81 String get reconnect => 'Reconnect';
83 @override
84 String get search => 'Search servers';
86 @override
87 String get emptyServers =>
88 'Add your first server. Profiles stay on this device.';
90 @override
91 String get selectServer => 'Connect to a server from Servers.';
93 @override
94 String get save => 'Save';
96 @override
97 String get cancel => 'Cancel';
99 @override
100 String get delete => 'Delete';
102 @override
103 String get duplicate => 'Duplicate';
105 @override
106 String get edit => 'Edit';
108 @override
109 String get confirmDelete => 'Delete this item? This action cannot be undone.';
111 @override
112 String get confirmRename => 'Rename the selected remote item?';
114 @override
115 String get hostTrustTitle => 'Verify server identity';
117 @override
118 String get hostTrustBody =>
119 'Compare this SHA-256 fingerprint through a separate trusted channel before trusting this server.';
121 @override
122 String get trust => 'Trust this key';
124 @override
125 String get hostChanged =>
126 'SECURITY: The saved SSH host key has changed. Connection blocked. Verify the server independently.';
128 @override
129 String get hostRejected => 'The SSH host key was not trusted.';
131 @override
132 String get language => 'Language';
134 @override
135 String get system => 'System';
137 @override
138 String get light => 'Light';
140 @override
141 String get dark => 'Dark';
143 @override
144 String get theme => 'Appearance';
146 @override
147 String get welcome => 'Welcome to SM Mobile';
149 @override
150 String get localOnly => 'Direct SSH / SFTP. No account, cloud or telemetry.';
152 @override
153 String get guidance => 'Operational safety and backups';
155 @override
156 String get continueAction => 'Continue';
158 @override
159 String get license => 'Software license';
161 @override
162 String get consent =>
163 'I accept CH-J Proprietary Software License 1.14. I acknowledge the risk of data loss or corruption and the need for appropriate backups before risky operations. The app does not guarantee that backups exist or are recoverable.';
165 @override
166 String get accept => 'Accept and continue';
168 @override
169 String get decline => 'Decline';
171 @override
172 String get licenseDeclined =>
173 'The license was declined. Server functions remain locked.';
175 @override
176 String get vault => 'Local Vault';
178 @override
179 String get createVault => 'Create secure Vault';
181 @override
182 String get masterPassword => 'Master password';
184 @override
185 String get confirmPassword => 'Confirm password';
187 @override
188 String get vaultAdvice =>
189 'Use 4–64 characters: a PIN, a word or a long passphrase. Longer passwords are much harder to guess. This password cannot be recovered; store it safely.';
191 @override
192 String get unlock => 'Unlock';
194 @override
195 String get lock => 'Lock Vault';
197 @override
198 String get biometric => 'Biometric unlock (Face ID, Touch ID, fingerprint)';
200 @override
201 String get unlockBiometric => 'Unlock with device security';
203 @override
204 String get biometricReason => 'Unlock the SM Mobile Vault';
206 @override
207 String get lockBackground => 'Lock when leaving the app';
209 @override
210 String get idleTimeout => 'Auto-lock after inactivity (minutes)';
212 @override
213 String get weakPassword => 'Use a master password with 4–64 characters.';
215 @override
216 String get passwordMismatch => 'Passwords do not match.';
218 @override
219 String get locked => 'Vault locked. Unlock it to continue.';
221 @override
222 String get unlockFailed =>
223 'Unable to unlock. Check your password or use the master-password fallback.';
225 @override
226 String get storageError =>
227 'Secure storage is unavailable or damaged. Your stored data was not reset.';
229 @override
230 String get invalidProfile =>
231 'Check the name, hostname/IP, username and port (1–65535).';
233 @override
234 String get invalidImport =>
235 'Invalid profile file. Use CH-J JSON format version 1, up to 5 MiB and 10,000 profiles.';
237 @override
238 String get networkError =>
239 'Network connection failed. Check the address, VPN and local-network permission.';
241 @override
242 String get authFailed =>
243 'SSH authentication failed. Check the username, password or private key.';
245 @override
246 String get invalidKey => 'Invalid private key or passphrase.';
248 @override
249 String get timeout => 'The operation timed out.';
251 @override
252 String get operationFailed =>
253 'Operation failed. Check the connection and permissions.';
255 @override
256 String get permissionDenied => 'The server denied file access.';
258 @override
259 String get fileError =>
260 'SFTP operation failed. The item may be missing, the directory nonempty, or access denied.';
262 @override
263 String get fileExists =>
264 'The destination already exists. Choose another name.';
266 @override
267 String get unsafePath =>
268 'Unsafe path, unsupported file type or symbolic link. Symbolic links are not followed.';
270 @override
271 String get cancelled => 'Transfer cancelled.';
273 @override
274 String get upload => 'Upload file';
276 @override
277 String get download => 'Download and save / share';
279 @override
280 String get rename => 'Rename';
282 @override
283 String get newFolder => 'New folder';
285 @override
286 String get refresh => 'Refresh';
288 @override
289 String get parent => 'Parent directory';
291 @override
292 String get size => 'Size';
294 @override
295 String get modified => 'Modified';
297 @override
298 String get symlink => 'Symbolic link (blocked)';
300 @override
301 String get emptyDirectory => 'This directory is empty.';
303 @override
304 String get importProfiles => 'Import profiles';
306 @override
307 String get exportProfiles => 'Export profiles';
309 @override
310 String get profileTransfer => 'Import and export profiles';
312 @override
313 String get importPreview => 'Review imported profiles';
315 @override
316 String get importAdvice =>
317 'Only connection details are imported. Assign authentication before connecting. Duplicate matching uses host, port and username.';
319 @override
320 String get skipDuplicates => 'Skip duplicates';
322 @override
323 String get updateDuplicates => 'Update duplicates (clear saved credentials)';
325 @override
326 String get createDuplicates => 'Create separate copies';
328 @override
329 String get importAction => 'Import reviewed profiles';
331 @override
332 String get done => 'Done';
334 @override
335 String get copy => 'Copy selection';
337 @override
338 String get paste => 'Paste';
340 @override
341 String get keyboard => 'Show keyboard';
343 @override
344 String get hideKeyboard => 'Hide keyboard';
346 @override
347 String get monitorInterval => 'Refresh interval (seconds)';
349 @override
350 String get cpu => 'CPU';
352 @override
353 String get ram => 'RAM';
355 @override
356 String get disk => 'Root filesystem';
358 @override
359 String get uptime => 'Uptime';
361 @override
362 String get load => 'Load average (1 / 5 / 15 min)';
364 @override
365 String get release => 'OS version';
367 @override
368 String get rtt => 'SSH command response time';
370 @override
371 String get handshake => 'SSH connection and authentication';
373 @override
374 String get unsupportedSystem =>
375 'Monitoring requires a Linux server with /proc and standard POSIX utilities.';
377 @override
378 String get runDiagnostics => 'Run test';
380 @override
381 String get icmpNote =>
382 'Ping and traceroute send real ICMP / ICMPv6 echo packets directly from this device, without a server or cloud. TCP connect measures connection setup to the selected port and is not a ping.';
384 @override
385 String get dnsResults => 'DNS addresses (not saved to profiles)';
387 @override
388 String get tcpConnect => 'TCP connection time';
390 @override
391 String get backgroundNote =>
392 'Monitoring stops outside this screen and while the app is inactive. The OS may suspend SSH sessions in the background.';
394 @override
395 String get componentLicenses => 'Third-party licenses';
397 @override
398 String get clearPassword => 'Remove saved password';
400 @override
401 String get biometricUnavailable =>
402 'Biometrics are not available. Enroll Face ID, Touch ID or a strong fingerprint/face biometric first.';
404 @override
405 String get licenseError =>
406 'License or guidance could not be loaded. Application access is blocked.';
408 @override
409 String get loadNote =>
410 'Load average is the average number of waiting processes, not a CPU percentage.';
412 @override
413 String get addressFamily => 'IP version';
415 @override
416 String get automatic => 'Automatic';
418 @override
419 String get testType => 'Test';
421 @override
422 String get target => 'Target';
424 @override
425 String get duration => 'Duration';
427 @override
428 String get resultOk => 'Succeeded';
430 @override
431 String get resultFailed => 'Failed';
433 @override
434 String get dnsLookup => 'DNS lookup';
436 @override
437 String get tcpConnectTest => 'TCP connect';
439 @override
440 String get notTested => 'Not run';
442 @override
443 String get commandRtt => 'SSH command response';
445 @override
446 String get sshLatency => 'SSH response times';
448 @override
449 String uptimeDays(int count) {
450 String _temp0 = intl.Intl.pluralLogic(
451 count,
452 locale: localeName,
453 other: '$count days',
454 one: '1 day',
455 );
456 return '$_temp0';
457 }
459 @override
460 String uptimeHours(int count) {
461 String _temp0 = intl.Intl.pluralLogic(
462 count,
463 locale: localeName,
464 other: '$count hours',
465 one: '1 hour',
466 );
467 return '$_temp0';
468 }
470 @override
471 String uptimeMinutes(int count) {
472 String _temp0 = intl.Intl.pluralLogic(
473 count,
474 locale: localeName,
475 other: '$count minutes',
476 one: '1 minute',
477 );
478 return '$_temp0';
479 }
481 @override
482 String usedOf(String used, String total) {
483 return '$used of $total';
484 }
486 @override
487 String autoRefresh(String seconds) {
488 return 'Automatically every $seconds s';
489 }
491 @override
492 String updatedAt(String time) {
493 return 'Updated $time';
494 }
496 @override
497 String get ping => 'Ping (ICMP)';
499 @override
500 String get traceroute => 'Traceroute';
502 @override
503 String get packetCount => 'Packet count';
505 @override
506 String get intervalSeconds => 'Interval (s)';
508 @override
509 String get timeoutSeconds => 'Timeout (s)';
511 @override
512 String get payloadBytes => 'Payload size (B)';
514 @override
515 String get maxHops => 'Max hops';
517 @override
518 String get probesPerHop => 'Probes per hop';
520 @override
521 String get testOptions => 'Test options';
523 @override
524 String get stop => 'Stop';
526 @override
527 String get packetsSent => 'Sent';
529 @override
530 String get packetsReceived => 'Received';
532 @override
533 String get packetLoss => 'Loss';
535 @override
536 String get rttStats => 'min / avg / max';
538 @override
539 String get hop => 'Hop';
541 @override
542 String get traceReached => 'Destination reached';
544 @override
545 String get traceUnreachable =>
546 'Destination unreachable (ICMP error, see the code)';
548 @override
549 String get traceLimit =>
550 'Hop limit reached without a reply from the destination';
552 @override
553 String get stoppedByUser => 'Stopped by user';
555 @override
556 String get timeoutStar =>
557 '* = no reply within the timeout. It does not mean the node does not exist; many routers do not answer ICMP.';
559 @override
560 String get icmpNotPermitted =>
561 'The system does not allow an unprivileged ICMP socket, so ping and traceroute cannot run.';
563 @override
564 String get icmpUnsupported => 'ICMP is not available on this device.';
566 @override
567 String get invalidSetting => 'Invalid value in the test options.';
569 @override
570 String get replyFrom => 'Reply';
572 @override
573 String get probeTimeout => 'No reply';
575 @override
576 String get probeUnreachable => 'Unreachable';
578 @override
579 String get probeSendFailed => 'Send failed';
581 @override
582 String get protocolUsed => 'Protocol';
584 @override
585 String get resolvedAddress => 'Address used';
587 @override
588 String get passwordLength => 'The master password must have 4–64 characters.';
590 @override
591 String get biometricNote =>
592 'Only enrolled biometrics release the Vault key. The device passcode cannot open the Vault; without biometrics use the master password.';
594 @override
595 String get usePassword => 'Use master password';
597 @override
598 String get showPassword => 'Show password';
600 @override
601 String get hidePassword => 'Hide password';
603 @override
604 String get strength0 => 'Very weak';
606 @override
607 String get strength1 => 'Weak';
609 @override
610 String get strength2 => 'Fair';
612 @override
613 String get strength3 => 'Good';
615 @override
616 String get strength4 => 'Strong';
618 @override
619 String get passwordStrength => 'Password strength';
621 @override
622 String get shortPasswordWarning =>
623 'Short passwords and PINs are allowed but easier to guess if someone obtains a copy of this device\'s data. Encryption is not weakened.';
625 @override
626 String get changePassword => 'Change Vault password';
628 @override
629 String get currentPassword => 'Current master password';
631 @override
632 String get newPassword => 'New master password';
634 @override
635 String get confirmNewPassword => 'Confirm new password';
637 @override
638 String get passwordChanged =>
639 'The Vault password was changed. All servers, credentials and keys are still available.';
641 @override
642 String get passwordChangedBiometricOff =>
643 'The password was changed, but biometric unlock could not be renewed and was turned off. Turn it on again in Settings.';
645 @override
646 String get wrongCurrentPassword => 'The current password is not correct.';
648 @override
649 String get samePassword => 'The new password is the same as the current one.';
651 @override
652 String get biometricCancelled =>
653 'Biometric check cancelled. Enter the master password or try again.';
655 @override
656 String get biometricFailed =>
657 'Biometric check failed. Enter the master password.';
659 @override
660 String get biometricLockout =>
661 'Biometrics are temporarily locked by the system after too many attempts. Enter the master password.';
663 @override
664 String get biometricInvalid =>
665 'The biometric key is no longer valid (biometrics on this device changed). Unlock with the master password and turn biometric unlock on again.';
667 @override
668 String get biometricUpgrade =>
669 'Biometric unlock was improved and no longer accepts the device passcode. Unlock once with the master password to renew it.';
671 @override
672 String get biometricReenable =>
673 'Biometric unlock is off. Turn it on again in Settings.';
675 @override
676 String get tryBiometricAgain => 'Try biometrics again';
678 @override
679 String get securitySection => 'Security';
681 @override
682 String get kdfInfo => 'Key derivation';
684 @override
685 String get tcpPing => 'TCP ping';
687 @override
688 String get icmpPing => 'ICMP ping';
690 @override
691 String get tcpPort => 'TCP port';
693 @override
694 String get tcpNote =>
695 'TCP ping measures how long the TCP connection setup (SYN → SYN-ACK) to a port takes. It is not an ICMP echo: a closed port answers with a reset (refused), a filtered one usually not at all (timeout).';
697 @override
698 String get icmpPingNote =>
699 'Real ICMP / ICMPv6 echo request and reply sent directly from this device, without a server or cloud. Many hosts and firewalls do not answer ICMP.';
701 @override
702 String get traceNote =>
703 'Traceroute sends probes with increasing TTL / hop limit directly from this device. Routers that do not answer are shown as * and the trace continues.';
705 @override
706 String get attemptCount => 'Number of attempts';
708 @override
709 String get customCount => 'Custom number';
711 @override
712 String get customValue => 'Custom…';
714 @override
715 String get continuous => 'Continuous until stopped';
717 @override
718 String get ttlHopLimit => 'TTL / hop limit';
720 @override
721 String get systemDefault => 'System default';
723 @override
724 String get dontFragment => 'Don\'t fragment (DF)';
726 @override
727 String get traceMethod => 'Probe method';
729 @override
730 String get tcpTraceUnsupported =>
731 'Not available on Android: without root privileges the system does not tell apps which router answered a TCP probe.';
733 @override
734 String get firstTtl => 'First TTL / hop limit';
736 @override
737 String get probeInterval => 'Pause between probes (s)';
739 @override
740 String get tracePort => 'Destination port';
742 @override
743 String get repetitions => 'Repetitions';
745 @override
746 String get reverseDns => 'Reverse DNS (host names)';
748 @override
749 String get resolveAddresses => 'Find addresses and choose one';
751 @override
752 String get noAddressFamily =>
753 'No address of this IP version (no A / AAAA record).';
755 @override
756 String get literalOtherFamily =>
757 'The target is an address of the other IP version.';
759 @override
760 String get dnsFailed => 'DNS lookup failed. Check the name and the network.';
762 @override
763 String get outcomeOk => 'OK';
765 @override
766 String get outcomeTimeout => 'Timeout';
768 @override
769 String get outcomeRefused => 'Refused (TCP reset)';
771 @override
772 String get outcomeUnreachable => 'Unreachable';
774 @override
775 String get outcomeTtlExceeded => 'TTL exceeded';
777 @override
778 String get outcomeError => 'Network error';
780 @override
781 String get attempts => 'Attempts';
783 @override
784 String get successful => 'Successful';
786 @override
787 String get failedCount => 'Failed';
789 @override
790 String get successRate => 'Success';
792 @override
793 String get rttMin => 'Min';
795 @override
796 String get rttMax => 'Max';
798 @override
799 String get rttAvg => 'Average';
801 @override
802 String get rttMedian => 'Median';
804 @override
805 String get rttStddev => 'Std. deviation';
807 @override
808 String get jitter => 'Jitter';
810 @override
811 String get elapsedTime => 'Duration';
813 @override
814 String get statsNote =>
815 'RTT statistics use successful attempts only; failures are counted separately. Std. deviation: population. Jitter: mean absolute difference between consecutive successful RTTs. Median and P95: nearest rank; P95 from 20 successful samples. Very long runs keep the newest 5000 attempts in the list and compute median/P95 from the newest 10000.';
817 @override
818 String get chartTitle => 'RTT over time';
820 @override
821 String get chartFailures => 'Failed attempt';
823 @override
824 String get olderOmitted =>
825 'Older attempts not shown (statistics still include them)';
827 @override
828 String get copyResults => 'Copy';
830 @override
831 String get exportResults => 'Export';
833 @override
834 String get clearResults => 'Clear';
836 @override
837 String get copied => 'Copied to the clipboard.';
839 @override
840 String get saveToDevice => 'Save to device';
842 @override
843 String get shareFile => 'Share';
845 @override
846 String get savedToDevice => 'Saved.';
848 @override
849 String get combinedSummary => 'IPv4 and IPv6 overview';
851 @override
852 String get statusColumn => 'Status';
854 @override
855 String get statusRunning => 'Running…';
857 @override
858 String get statusFinished => 'Finished';
860 @override
861 String get compareRuns => 'Compare with the previous measurement';
863 @override
864 String get previousRun => 'Previous';
866 @override
867 String get pathChanged => 'Route changed';
869 @override
870 String get tcpOpenNote => 'Port open: the destination answered with SYN-ACK.';
872 @override
873 String get tcpRefusedNote =>
874 'Port closed: the destination answered with a reset; it was reached.';
876 @override
877 String get answeredOtherAddress =>
878 'The final answer came from another address than the target (anycast or a filtering device).';
880 @override
881 String get icmpCodeLegend =>
882 '!N network, !H host, !P protocol, !F fragmentation needed, !X administratively prohibited (ICMP destination unreachable).';
884 @override
885 String get messageTooLong =>
886 'Packet too large to send without fragmentation.';
888 @override
889 String get ttlUnsupported =>
890 'The system did not accept this TTL / hop limit.';
892 @override
893 String get dontFragmentUnsupported =>
894 'This platform does not allow setting Don\'t Fragment for ICMP.';
896 @override
897 String get unsupportedPlatform => 'Not available on this platform.';
899 @override
900 String get archiveDamaged =>
901 'The archive is damaged or not in a supported format.';
903 @override
904 String get archiveListOnly =>
905 'Contents are only listed; nothing is extracted or run.';
907 @override
908 String get archiveTooLarge =>
909 'The archive is too large to list on this device.';
911 @override
912 String get archiveUnsupported =>
913 'Listing this archive format is not supported';
915 @override
916 String get atomicNotPossible =>
917 'A temporary file cannot be created in this folder, so the file cannot be replaced safely in one step.';
919 @override
920 String get ownerWouldChange =>
921 'Saving through a temporary file would change the owner of this file on the server.';
923 @override
924 String get inPlaceAdvice =>
925 'You can overwrite the file directly instead. Owner and permissions stay, but if the connection drops during the write, the file may be left incomplete.';
927 @override
928 String get binaryFile => 'This looks like a binary file.';
930 @override
931 String get chooseEncodingAdvice =>
932 'The encoding could not be detected. Choose the one the file was written in; nothing is converted until you save.';
934 @override
935 String get unknownEncoding => 'Unknown text encoding';
937 @override
938 String get wrongEncoding => 'The file is not valid in the chosen encoding.';
940 @override
941 String get reopenEncoding => 'Reopen with encoding…';
943 @override
944 String get saveEncoding => 'Save with encoding';
946 @override
947 String get openAsTextWith => 'Open as text with encoding…';
949 @override
950 String get unencodableTitle => 'Characters cannot be saved in this encoding';
952 @override
953 String get unencodableBody =>
954 'Some characters do not exist in the file\'s encoding. Continue to save as UTF-8 instead; Cancel keeps the text unsaved.';
956 @override
957 String get mixedLineBreaks =>
958 'This file mixes line endings (LF/CRLF/CR). On save they all become the shown type; change it in the status bar.';
960 @override
961 String get notExactRoundTrip =>
962 'This file would not be saved byte-for-byte as it was read. Check the encoding before saving.';
964 @override
965 String get close => 'Close';
967 @override
968 String get line => 'Line';
970 @override
971 String get column => 'Column';
973 @override
974 String get lineShort => 'Ln';
976 @override
977 String get columnShort => 'Col';
979 @override
980 String get conflictAdvice =>
981 'The file was changed elsewhere after you opened it. Overwrite replaces that change with your text.';
983 @override
984 String get remoteChanged => 'The file on the server has changed';
986 @override
987 String get remoteDeleted => 'The file on the server no longer exists';
989 @override
990 String get documentChanged => 'The file on the device has changed';
992 @override
993 String get connectToOpen => 'Connect to that server first to open this file.';
995 @override
996 String get connectToSave =>
997 'Not connected to the file\'s server. Your text stays here.';
999 @override
1000 String get offlineAdvice =>
1001 'Nothing was lost. Reconnect and save again, or keep a copy on this device now.';
1003 @override
1004 String get saveCopyToDevice => 'Save a copy on the device';
1006 @override
1007 String get cryptoNote =>
1008 'Basic information only. Private key material is never displayed or exported here.';
1010 @override
1011 String get cryptoUnreadable => 'No certificate or key could be read.';
1013 @override
1014 String get privateKeyHidden =>
1015 'Contains a private key. Keep this file secret.';
1017 @override
1018 String get remoteFiles => 'Server (SFTP)';
1020 @override
1021 String get deviceFiles => 'Device';
1023 @override
1024 String get recentFiles => 'Recent';
1026 @override
1027 String get favoriteFiles => 'Favorites';
1029 @override
1030 String get deviceFilesNote =>
1031 'Files are opened through the system file picker (Files / storage providers). SM Mobile only accesses what you choose.';
1033 @override
1034 String get openFiles => 'Open files';
1036 @override
1037 String get openFolder => 'Open folder';
1039 @override
1040 String get openedFiles => 'Opened files';
1042 @override
1043 String get newFile => 'New file';
1045 @override
1046 String get open => 'Open';
1048 @override
1049 String get openAsText => 'Open as text';
1051 @override
1052 String get openInSystemViewer => 'Open in system viewer';
1054 @override
1055 String get systemViewerTitle => 'Shown by the system viewer';
1057 @override
1058 String get systemViewerIos =>
1059 'Quick Look shows this file inside SM Mobile from a private temporary copy. It cannot be edited here.';
1061 @override
1062 String get systemViewerAndroid =>
1063 'An app on this device that you choose opens a private temporary copy. It cannot be edited here.';
1065 @override
1066 String get noViewer => 'No app on this device can show this file.';
1068 @override
1069 String get draftsRecovered =>
1070 'Unsaved changes were kept when the Vault locked';
1072 @override
1073 String get discardDrafts => 'Discard all recovered drafts?';
1075 @override
1076 String get discard => 'Discard';
1078 @override
1079 String get discardChanges => 'Discard unsaved changes?';
1081 @override
1082 String get unsavedChanges => 'Unsaved changes';
1084 @override
1085 String get editorSettings => 'Editor settings';
1087 @override
1088 String get fontSize => 'Font size';
1090 @override
1091 String get wordWrap => 'Wrap lines';
1093 @override
1094 String get lineNumbers => 'Line numbers and folding';
1096 @override
1097 String get indentWithTabs => 'Indent with tabs';
1099 @override
1100 String get indentWidth => 'Indent width';
1102 @override
1103 String get syntaxHighlight => 'Syntax highlighting';
1105 @override
1106 String get largeFileHighlight =>
1107 'Off by default for files over 1 MB to keep editing smooth.';
1109 @override
1110 String get syntax => 'Syntax';
1112 @override
1113 String get noGrammar => 'No highlighting grammar available (plain text)';
1115 @override
1116 String get tabs => 'Tabs';
1118 @override
1119 String get spaces => 'Spaces';
1121 @override
1122 String get readOnly => 'Read-only';
1124 @override
1125 String get readOnlyDevice =>
1126 'This file can only be read here (the storage provider does not allow writing). Use Save as to keep your changes.';
1128 @override
1129 String get readOnlyRemote => 'This file is read-only.';
1131 @override
1132 String get modifiedState => 'Modified';
1134 @override
1135 String get findHint => 'Find';
1137 @override
1138 String get replaceHint => 'Replace with';
1140 @override
1141 String get invalidRegex => 'Invalid regular expression';
1143 @override
1144 String get matchCase => 'Match case';
1146 @override
1147 String get regularExpression => 'Regular expression';
1149 @override
1150 String get previousMatch => 'Previous match';
1152 @override
1153 String get nextMatch => 'Next match';
1155 @override
1156 String get replace => 'Replace';
1158 @override
1159 String get replaceAll => 'Replace all';
1161 @override
1162 String get goToLine => 'Go to line';
1164 @override
1165 String get lineBreaks => 'Line endings';
1167 @override
1168 String get undo => 'Undo';
1170 @override
1171 String get redo => 'Redo';
1173 @override
1174 String get selectAll => 'Select all';
1176 @override
1177 String get reload => 'Reload from source';
1179 @override
1180 String get reloadDiscard => 'Reload (discard mine)';
1182 @override
1183 String get overwrite => 'Overwrite';
1185 @override
1186 String get overwriteExisting => 'A file with this name exists. Overwrite it?';
1188 @override
1189 String get saveAs => 'Save as…';
1191 @override
1192 String get saveAsRequired => 'Choose where to save this new file.';
1194 @override
1195 String get saveToServer => 'Save to the server';
1197 @override
1198 String get remotePath => 'Path on the server';
1200 @override
1201 String get saved => 'Saved.';
1203 @override
1204 String get validate => 'Check syntax';
1206 @override
1207 String get validOk => 'No syntax errors found.';
1209 @override
1210 String get validationProblem => 'Syntax error';
1212 @override
1213 String get formatDocument => 'Format document';
1215 @override
1216 String get formatAdvice =>
1217 'Rewrites indentation and layout (JSON numbers may be written differently). The change can be undone.';
1219 @override
1220 String get formatFailed =>
1221 'The document cannot be formatted until its syntax errors are fixed.';
1223 @override
1224 String get fileTooLarge => 'The file is too large to open here.';
1226 @override
1227 String get filesCount => 'files';
1229 @override
1230 String get uncompressed => 'unpacked';
1232 @override
1233 String get imageUnsupported =>
1234 'This image format cannot be shown on this device.';
1236 @override
1237 String get svgSafe =>
1238 'SVG is drawn as a static picture: scripts, links and external resources are not used.';
1240 @override
1241 String get notebookUnreadable =>
1242 'The notebook cannot be read; open it as JSON.';
1244 @override
1245 String get uploadToServer => 'Copy to the server';
1247 @override
1248 String get uploadedTo => 'Copied to';
1250 @override
1251 String get addFavorite => 'Add to favorites';
1253 @override
1254 String get removeFavorite => 'Remove from favorites';
1256 @override
1257 String get removeFromList => 'Remove from list';
1259 @override
1260 String get noFavorites => 'No favorite files yet.';
1262 @override
1263 String get noRecentFiles => 'No recently opened files.';
1265 @override
1266 String get documentStale =>
1267 'Access to this file has expired. Open it again from the file picker.';
1269 @override
1270 String get fileNotFound => 'The file was not found.';
1272 @override
1273 String get noSpace => 'Not enough free storage space.';
1275 @override
1276 String get readOnlyError => 'Writing is not allowed here.';
SHA-256de8664872c46139e0730c56b996ab35a5878f5e467de9bc582f355e28d6b8ef3

CH-J Proprietary Software License 1.14 · Mã nguồn được cung cấp theo CH-J Proprietary Software License 1.14. Việc công khai mã nguồn không thay đổi các điều khoản giấy phép và không cấp thêm quyền nào.

SHA-256 của tệp nén46e427a43e87af091004f36145590bda8fe90086dfb0f631afeb5029fb0b5655
Tệp