Version Description
(2020-07-29) = Added - A link in the New/Edit Feed Source page on how to find an RSS feed.
Changed - The "Force feed" option turns off SSL verification. - Improved wording on the Help page. - Dates in templates can now be translated. - The link to the article on how to find an RSS feed now links to an article from the plugin's knowledge base. - The "Unique Titles" feed option can now be set to default to the global setting.
Fixed - Rewrite rules would always get flushed when plugins tamper with them, such as Polylang Pro. - The "Delete All Imported Items" reset option was deleting all posts on the site. - Image options would not show up when using Feed to Post to import Feed Items.
Download this release
Release Info
Developer | Mekku |
Plugin | WP RSS Aggregator |
Version | 4.17.6 |
Comparing to | |
See all releases |
Code changes from version 4.17.5 to 4.17.6
- CHANGELOG.md +19 -0
- css/admin-editor.css +3 -1
- css/admin-general-styles.css +5 -0
- includes/Aventura/Wprss/Core/Licensing/Settings.php +3 -3
- includes/admin-display.php +0 -16
- includes/admin-help.php +2 -3
- includes/admin-metaboxes.php +31 -13
- includes/admin-options.php +2 -2
- includes/feed-access.php +6 -1
- includes/feed-importing.php +3 -0
- includes/feed-processing.php +5 -0
- js/admin-custom.js +14 -2
- languages/{default.mo → wprss-en.mo} +0 -0
- languages/{default.po → wprss-en.po} +251 -195
- readme.txt +17 -1
- src/Handlers/CustomFeed/RegisterCustomFeedHandler.php +2 -7
- src/Modules/FeedSourcesModule.php +1 -1
- src/Modules/ImagesModule.php +2 -4
- src/Modules/TwigModule.php +3 -1
- src/Twig/Extensions/Date/TwigDateTranslator.php +115 -0
- templates/admin/tools/bulk_add.twig +1 -1
- templates/admin/tools/export.twig +1 -1
- templates/admin/tools/import.twig +1 -1
- templates/admin/tools/logs.twig +1 -1
- templates/admin/tools/reset.twig +2 -2
- vendor/composer/autoload_classmap.php +54 -0
- vendor/composer/autoload_files.php +1 -0
- vendor/composer/autoload_psr4.php +2 -0
- vendor/composer/autoload_static.php +65 -0
- vendor/composer/installed.json +149 -2
- vendor/symfony/polyfill-mbstring/LICENSE +19 -0
- vendor/symfony/polyfill-mbstring/Mbstring.php +847 -0
- vendor/symfony/polyfill-mbstring/README.md +13 -0
- vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1397 -0
- vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -0
- vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1414 -0
- vendor/symfony/polyfill-mbstring/bootstrap.php +141 -0
- vendor/symfony/polyfill-mbstring/composer.json +38 -0
- vendor/symfony/translation/.gitignore +3 -0
- vendor/symfony/translation/Catalogue/AbstractOperation.php +155 -0
- vendor/symfony/translation/Catalogue/DiffOperation.php +33 -0
- vendor/symfony/translation/Catalogue/MergeOperation.php +55 -0
- vendor/symfony/translation/Catalogue/OperationInterface.php +77 -0
- vendor/symfony/translation/Catalogue/TargetOperation.php +69 -0
- vendor/symfony/translation/DataCollector/TranslationDataCollector.php +144 -0
- vendor/symfony/translation/DataCollectorTranslator.php +163 -0
- vendor/symfony/translation/Dumper/CsvFileDumper.php +73 -0
- vendor/symfony/translation/Dumper/DumperInterface.php +31 -0
- vendor/symfony/translation/Dumper/FileDumper.php +145 -0
- vendor/symfony/translation/Dumper/IcuResFileDumper.php +116 -0
- vendor/symfony/translation/Dumper/IniFileDumper.php +55 -0
- vendor/symfony/translation/Dumper/JsonFileDumper.php +54 -0
- vendor/symfony/translation/Dumper/MoFileDumper.php +92 -0
- vendor/symfony/translation/Dumper/PhpFileDumper.php +48 -0
- vendor/symfony/translation/Dumper/PoFileDumper.php +71 -0
- vendor/symfony/translation/Dumper/QtFileDumper.php +60 -0
- vendor/symfony/translation/Dumper/XliffFileDumper.php +193 -0
- vendor/symfony/translation/Dumper/YamlFileDumper.php +64 -0
- vendor/symfony/translation/Exception/ExceptionInterface.php +21 -0
- vendor/symfony/translation/Exception/InvalidResourceException.php +21 -0
- vendor/symfony/translation/Exception/NotFoundResourceException.php +21 -0
- vendor/symfony/translation/Extractor/AbstractFileExtractor.php +83 -0
- vendor/symfony/translation/Extractor/ChainExtractor.php +60 -0
- vendor/symfony/translation/Extractor/ExtractorInterface.php +38 -0
- vendor/symfony/translation/IdentityTranslator.php +63 -0
- vendor/symfony/translation/Interval.php +107 -0
- vendor/symfony/translation/LICENSE +19 -0
- vendor/symfony/translation/Loader/ArrayLoader.php +66 -0
- vendor/symfony/translation/Loader/CsvFileLoader.php +65 -0
- vendor/symfony/translation/Loader/FileLoader.php +65 -0
- vendor/symfony/translation/Loader/IcuDatFileLoader.php +62 -0
- vendor/symfony/translation/Loader/IcuResFileLoader.php +92 -0
- vendor/symfony/translation/Loader/IniFileLoader.php +28 -0
- vendor/symfony/translation/Loader/JsonFileLoader.php +64 -0
- vendor/symfony/translation/Loader/LoaderInterface.php +38 -0
- vendor/symfony/translation/Loader/MoFileLoader.php +148 -0
- vendor/symfony/translation/Loader/PhpFileLoader.php +28 -0
- vendor/symfony/translation/Loader/PoFileLoader.php +148 -0
- vendor/symfony/translation/Loader/QtFileLoader.php +77 -0
- vendor/symfony/translation/Loader/XliffFileLoader.php +326 -0
- vendor/symfony/translation/Loader/YamlFileLoader.php +48 -0
- vendor/symfony/translation/Loader/schema/dic/xliff-core/xliff-core-1.2-strict.xsd +2223 -0
- vendor/symfony/translation/Loader/schema/dic/xliff-core/xliff-core-2.0.xsd +411 -0
- vendor/symfony/translation/Loader/schema/dic/xliff-core/xml.xsd +309 -0
- vendor/symfony/translation/LoggingTranslator.php +135 -0
- vendor/symfony/translation/MessageCatalogue.php +270 -0
- vendor/symfony/translation/MessageCatalogueInterface.php +136 -0
- vendor/symfony/translation/MessageSelector.php +86 -0
- vendor/symfony/translation/MetadataAwareInterface.php +54 -0
- vendor/symfony/translation/PluralizationRules.php +216 -0
- vendor/symfony/translation/Translator.php +476 -0
- vendor/symfony/translation/TranslatorBagInterface.php +31 -0
- vendor/symfony/translation/TranslatorInterface.php +65 -0
- vendor/symfony/translation/Util/ArrayConverter.php +99 -0
- vendor/symfony/translation/Writer/TranslationWriter.php +84 -0
- vendor/symfony/translation/composer.json +48 -0
- wp-rss-aggregator.php +2 -2
CHANGELOG.md
CHANGED
@@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file.
|
|
4 |
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
5 |
and this project adheres to [Semantic Versioning](http://semver.org/).
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
## [4.17.5] - 2020-04-22
|
8 |
### Changed
|
9 |
* Now showing a case study of a site using the Pro Plan in the on-boarding wizard.
|
4 |
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
5 |
and this project adheres to [Semantic Versioning](http://semver.org/).
|
6 |
|
7 |
+
## [4.17.6] - 2020-07-29
|
8 |
+
### Added
|
9 |
+
* A link in the New/Edit Feed Source page on how to find an RSS feed.
|
10 |
+
|
11 |
+
### Changed
|
12 |
+
* The "Force feed" option turns off SSL verification.
|
13 |
+
* Improved wording on the Help page.
|
14 |
+
* Dates in templates can now be translated.
|
15 |
+
* The link to the article on how to find an RSS feed now links to an article from the plugin's knowledge base.
|
16 |
+
* The "Unique Titles" feed option can now be set to default to the global setting.
|
17 |
+
|
18 |
+
### Fixed
|
19 |
+
* Rewrite rules would always get flushed when plugins tamper with them, such as Polylang Pro.
|
20 |
+
* The "Delete All Imported Items" reset option was deleting all posts on the site.
|
21 |
+
* Image options would not show up when using Feed to Post to import Feed Items.
|
22 |
+
|
23 |
+
### Removed
|
24 |
+
* A `gettext` filter that changes the text for saving feeds, for performance reasons.
|
25 |
+
|
26 |
## [4.17.5] - 2020-04-22
|
27 |
### Changed
|
28 |
* Now showing a case study of a site using the Pro Plan in the on-boarding wizard.
|
css/admin-editor.css
CHANGED
@@ -109,9 +109,11 @@
|
|
109 |
vertical-align: top;
|
110 |
}
|
111 |
|
112 |
-
|
113 |
font-size: 0.85em;
|
114 |
text-decoration: none;
|
|
|
|
|
115 |
margin-left: 3px;
|
116 |
}
|
117 |
|
109 |
vertical-align: top;
|
110 |
}
|
111 |
|
112 |
+
.wprss-after-url-link {
|
113 |
font-size: 0.85em;
|
114 |
text-decoration: none;
|
115 |
+
}
|
116 |
+
#validate-feed-link {
|
117 |
margin-left: 3px;
|
118 |
}
|
119 |
|
css/admin-general-styles.css
CHANGED
@@ -22,3 +22,8 @@ table.plugins tbody tr.wprss-et-plugin-row-msg > td > div > p::before {
|
|
22 |
content: "\f348";
|
23 |
color: #00a0d2;
|
24 |
}
|
|
|
|
|
|
|
|
|
|
22 |
content: "\f348";
|
23 |
color: #00a0d2;
|
24 |
}
|
25 |
+
|
26 |
+
/* Hide the image options in the new/edit page */
|
27 |
+
.postbox-container #wpra-images {
|
28 |
+
display: none;
|
29 |
+
}
|
includes/Aventura/Wprss/Core/Licensing/Settings.php
CHANGED
@@ -180,7 +180,7 @@ class Settings {
|
|
180 |
// License key field
|
181 |
add_settings_field(
|
182 |
sprintf( 'wprss_settings_%s_license', $_addonId ),
|
183 |
-
__( 'License
|
184 |
array( $this, 'renderLicenseKeyField' ),
|
185 |
'wprss_settings_license_keys',
|
186 |
sprintf( 'wprss_settings_%s_licenses_section', $_addonId ),
|
@@ -189,7 +189,7 @@ class Settings {
|
|
189 |
// Activate license button
|
190 |
add_settings_field(
|
191 |
sprintf( 'wprss_settings_%s_activate_license', $_addonId ),
|
192 |
-
__( 'Activate
|
193 |
array( $this, 'renderActivateLicenseButton' ),
|
194 |
'wprss_settings_license_keys',
|
195 |
sprintf( 'wprss_settings_%s_licenses_section', $_addonId ),
|
@@ -297,7 +297,7 @@ class Settings {
|
|
297 |
if ( $status === 'item_name_mismatch' ) $status = 'invalid';
|
298 |
|
299 |
$valid = $status == 'valid';
|
300 |
-
$btnText = $valid ? 'Deactivate
|
301 |
$btnName = "wprss_{$addonId}_license_" . ( $valid? 'deactivate' : 'activate' );
|
302 |
$btnClass = "button-" . ( $valid ? 'deactivate' : 'activate' ) . "-license";
|
303 |
wp_nonce_field( "wprss_{$addonId}_license_nonce", "wprss_{$addonId}_license_nonce", false ); ?>
|
180 |
// License key field
|
181 |
add_settings_field(
|
182 |
sprintf( 'wprss_settings_%s_license', $_addonId ),
|
183 |
+
__( 'License key', WPRSS_TEXT_DOMAIN ),
|
184 |
array( $this, 'renderLicenseKeyField' ),
|
185 |
'wprss_settings_license_keys',
|
186 |
sprintf( 'wprss_settings_%s_licenses_section', $_addonId ),
|
189 |
// Activate license button
|
190 |
add_settings_field(
|
191 |
sprintf( 'wprss_settings_%s_activate_license', $_addonId ),
|
192 |
+
__( 'Activate license', WPRSS_TEXT_DOMAIN ),
|
193 |
array( $this, 'renderActivateLicenseButton' ),
|
194 |
'wprss_settings_license_keys',
|
195 |
sprintf( 'wprss_settings_%s_licenses_section', $_addonId ),
|
297 |
if ( $status === 'item_name_mismatch' ) $status = 'invalid';
|
298 |
|
299 |
$valid = $status == 'valid';
|
300 |
+
$btnText = $valid ? 'Deactivate license' : 'Activate license';
|
301 |
$btnName = "wprss_{$addonId}_license_" . ( $valid? 'deactivate' : 'activate' );
|
302 |
$btnClass = "button-" . ( $valid ? 'deactivate' : 'activate' ) . "-license";
|
303 |
wp_nonce_field( "wprss_{$addonId}_license_nonce", "wprss_{$addonId}_license_nonce", false ); ?>
|
includes/admin-display.php
CHANGED
@@ -664,22 +664,6 @@
|
|
664 |
}
|
665 |
|
666 |
|
667 |
-
add_filter( 'gettext', 'wprss_change_publish_button_text', 10, 2 );
|
668 |
-
/**
|
669 |
-
* Modify 'Publish' button text when adding a new feed source
|
670 |
-
*
|
671 |
-
* @since 2.0
|
672 |
-
*/
|
673 |
-
function wprss_change_publish_button_text( $translation, $text ) {
|
674 |
-
if ( 'wprss_feed' == get_post_type()) {
|
675 |
-
if ( $text == 'Publish' )
|
676 |
-
return __( 'Publish Feed', WPRSS_TEXT_DOMAIN );
|
677 |
-
}
|
678 |
-
return apply_filters( 'wprss_change_publish_button_text', $translation );
|
679 |
-
}
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
add_action( 'wp_before_admin_bar_render', 'wprss_modify_admin_bar' );
|
684 |
/**
|
685 |
* Removes the old "View Source" menu item from the admin bar and adds a new
|
664 |
}
|
665 |
|
666 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
667 |
add_action( 'wp_before_admin_bar_render', 'wprss_modify_admin_bar' );
|
668 |
/**
|
669 |
* Removes the old "View Source" menu item from the admin bar and adds a new
|
includes/admin-help.php
CHANGED
@@ -60,11 +60,10 @@
|
|
60 |
<form method="POST">
|
61 |
<p>
|
62 |
<?php _e('The help beacon is an interactive button that appears on the bottom-right section of WP RSS Aggregator admin pages.', WPRSS_TEXT_DOMAIN); ?>
|
63 |
-
<?php _e('It provides access to our
|
64 |
</p>
|
65 |
<p>
|
66 |
-
<?php _e('The beacon
|
67 |
-
<?php _e('The beacon only works on WP RSS Aggregator admin pages and does not track your mouse clicks and keyboard input.', WPRSS_TEXT_DOMAIN); ?>
|
68 |
</p>
|
69 |
<?php if (wprss_is_help_beacon_enabled()): ?>
|
70 |
<p><?php _e('The support beacon is currently <b>enabled</b>.', WPRSS_TEXT_DOMAIN); ?></p>
|
60 |
<form method="POST">
|
61 |
<p>
|
62 |
<?php _e('The help beacon is an interactive button that appears on the bottom-right section of WP RSS Aggregator admin pages.', WPRSS_TEXT_DOMAIN); ?>
|
63 |
+
<?php _e('It provides access to our extensive knowledge base where you can find the answers to the most commonly asked questions.', WPRSS_TEXT_DOMAIN); ?>
|
64 |
</p>
|
65 |
<p>
|
66 |
+
<?php _e('The beacon only works on WP RSS Aggregator admin pages and does not track your mouse clicks and/or keyboard input.', WPRSS_TEXT_DOMAIN); ?>
|
|
|
67 |
</p>
|
68 |
<?php if (wprss_is_help_beacon_enabled()): ?>
|
69 |
<p><?php _e('The support beacon is currently <b>enabled</b>.', WPRSS_TEXT_DOMAIN); ?></p>
|
includes/admin-metaboxes.php
CHANGED
@@ -93,7 +93,7 @@
|
|
93 |
'label' => __( 'URL', WPRSS_TEXT_DOMAIN ),
|
94 |
'id' => $prefix .'url',
|
95 |
'type' => 'url',
|
96 |
-
'after' => '
|
97 |
'placeholder' => 'https://'
|
98 |
);
|
99 |
|
@@ -103,15 +103,20 @@
|
|
103 |
'type' => 'number'
|
104 |
);
|
105 |
|
106 |
-
$wprss_meta_fields[ 'enclosure' ] = array(
|
107 |
-
'label' => __( 'Link to enclosure', WPRSS_TEXT_DOMAIN ),
|
108 |
-
'id' => $prefix . 'enclosure',
|
109 |
-
'type' => 'checkbox'
|
110 |
-
);
|
111 |
-
|
112 |
$wprss_meta_fields[ 'unique_titles' ] = array(
|
113 |
'label' => __( 'Unique titles only', WPRSS_TEXT_DOMAIN ),
|
114 |
'id' => $prefix . 'unique_titles',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
'type' => 'checkbox'
|
116 |
);
|
117 |
|
@@ -284,14 +289,22 @@
|
|
284 |
|
285 |
|
286 |
/**
|
287 |
-
*
|
|
|
288 |
* @since 3.9.5
|
289 |
*/
|
290 |
-
function
|
291 |
?>
|
292 |
<i id="wprss-url-spinner" class="fa fa-fw fa-refresh fa-spin wprss-updating-feed-icon" title="<?php _e( 'Updating feed source', WPRSS_TEXT_DOMAIN ) ?>"></i>
|
293 |
<div id="wprss-url-error" style="color:red"></div>
|
294 |
-
<a href="#" id="validate-feed-link">Validate feed</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
295 |
<script type="text/javascript">
|
296 |
(function($){
|
297 |
// When the DOM is ready
|
@@ -378,9 +391,9 @@
|
|
378 |
foreach ( $meta_fields as $field ) {
|
379 |
$old = get_post_meta( $post_id, $field[ 'id' ], true );
|
380 |
$new = trim( $_POST[ $field[ 'id' ] ] );
|
381 |
-
if ( $new !==
|
382 |
update_post_meta( $post_id, $field[ 'id' ], $new );
|
383 |
-
} elseif (
|
384 |
delete_post_meta( $post_id, $field[ 'id' ], $old );
|
385 |
}
|
386 |
} // end foreach
|
@@ -485,7 +498,12 @@
|
|
485 |
<?php wprss_log_obj( 'Failed to preview feed.', $feed->get_error_message(), NULL, WPRSS_LOG_LEVEL_INFO ); ?>
|
486 |
</span>
|
487 |
<?php
|
488 |
-
echo wpautop(
|
|
|
|
|
|
|
|
|
|
|
489 |
}
|
490 |
|
491 |
}
|
93 |
'label' => __( 'URL', WPRSS_TEXT_DOMAIN ),
|
94 |
'id' => $prefix .'url',
|
95 |
'type' => 'url',
|
96 |
+
'after' => 'wprss_after_url',
|
97 |
'placeholder' => 'https://'
|
98 |
);
|
99 |
|
103 |
'type' => 'number'
|
104 |
);
|
105 |
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
$wprss_meta_fields[ 'unique_titles' ] = array(
|
107 |
'label' => __( 'Unique titles only', WPRSS_TEXT_DOMAIN ),
|
108 |
'id' => $prefix . 'unique_titles',
|
109 |
+
'type' => 'select',
|
110 |
+
'options' => [
|
111 |
+
['value' => '', 'label' => 'Default'],
|
112 |
+
['value' => '1', 'label' => 'Yes'],
|
113 |
+
['value' => '0', 'label' => 'No'],
|
114 |
+
]
|
115 |
+
);
|
116 |
+
|
117 |
+
$wprss_meta_fields[ 'enclosure' ] = array(
|
118 |
+
'label' => __( 'Link to enclosure', WPRSS_TEXT_DOMAIN ),
|
119 |
+
'id' => $prefix . 'enclosure',
|
120 |
'type' => 'checkbox'
|
121 |
);
|
122 |
|
289 |
|
290 |
|
291 |
/**
|
292 |
+
* Renders content after the URL field
|
293 |
+
*
|
294 |
* @since 3.9.5
|
295 |
*/
|
296 |
+
function wprss_after_url() {
|
297 |
?>
|
298 |
<i id="wprss-url-spinner" class="fa fa-fw fa-refresh fa-spin wprss-updating-feed-icon" title="<?php _e( 'Updating feed source', WPRSS_TEXT_DOMAIN ) ?>"></i>
|
299 |
<div id="wprss-url-error" style="color:red"></div>
|
300 |
+
<a href="#" id="validate-feed-link" class="wprss-after-url-link">Validate feed</a>
|
301 |
+
<span> | </span>
|
302 |
+
<a href="https://kb.wprssaggregator.com/article/55-how-to-find-an-rss-feed"
|
303 |
+
class="wprss-after-url-link"
|
304 |
+
target="_blank">
|
305 |
+
<?= __('How to find an RSS feed', 'wprss') ?>
|
306 |
+
</a>
|
307 |
+
<script type="text/javascript">
|
308 |
<script type="text/javascript">
|
309 |
(function($){
|
310 |
// When the DOM is ready
|
391 |
foreach ( $meta_fields as $field ) {
|
392 |
$old = get_post_meta( $post_id, $field[ 'id' ], true );
|
393 |
$new = trim( $_POST[ $field[ 'id' ] ] );
|
394 |
+
if ( $new !== $old || empty($old) ) {
|
395 |
update_post_meta( $post_id, $field[ 'id' ], $new );
|
396 |
+
} elseif ( empty($new) && !empty($old) ) {
|
397 |
delete_post_meta( $post_id, $field[ 'id' ], $old );
|
398 |
}
|
399 |
} // end foreach
|
498 |
<?php wprss_log_obj( 'Failed to preview feed.', $feed->get_error_message(), NULL, WPRSS_LOG_LEVEL_INFO ); ?>
|
499 |
</span>
|
500 |
<?php
|
501 |
+
echo wpautop(
|
502 |
+
sprintf(
|
503 |
+
__('Not sure where to find the RSS feed on a website? <a target="_blank" href="%1$s">Click here</a> for a visual guide.', 'wprss'),
|
504 |
+
'https://kb.wprssaggregator.com/article/55-how-to-find-an-rss-feed'
|
505 |
+
)
|
506 |
+
);
|
507 |
}
|
508 |
|
509 |
}
|
includes/admin-options.php
CHANGED
@@ -195,7 +195,7 @@
|
|
195 |
|
196 |
$settings['styles'] = array(
|
197 |
'styles-disable' => array(
|
198 |
-
'label' => __( 'Disable
|
199 |
'callback' => 'wprss_setting_styles_disable_callback'
|
200 |
)
|
201 |
);
|
@@ -890,7 +890,7 @@
|
|
890 |
}
|
891 |
|
892 |
if ( isset($input['unique_titles']) ) {
|
893 |
-
$output['unique_titles'] =
|
894 |
}
|
895 |
|
896 |
if ( isset($input['cron_interval']) && $input['cron_interval'] != $current_cron_interval ) {
|
195 |
|
196 |
$settings['styles'] = array(
|
197 |
'styles-disable' => array(
|
198 |
+
'label' => __( 'Disable styles', 'wprss' ),
|
199 |
'callback' => 'wprss_setting_styles_disable_callback'
|
200 |
)
|
201 |
);
|
890 |
}
|
891 |
|
892 |
if ( isset($input['unique_titles']) ) {
|
893 |
+
$output['unique_titles'] = $input['unique_titles'];
|
894 |
}
|
895 |
|
896 |
if ( isset($input['cron_interval']) && $input['cron_interval'] != $current_cron_interval ) {
|
includes/feed-access.php
CHANGED
@@ -228,7 +228,7 @@ class WPRSS_Feed_Access
|
|
228 |
|
229 |
$fields[self::SETTING_KEY_FEED_REQUEST_USERAGENT] = array(
|
230 |
'id' => self::SETTING_KEY_FEED_REQUEST_USERAGENT,
|
231 |
-
'label' => $wprss->__('Feed
|
232 |
'placeholder' => $wprss->__('Leave blank to inherit general setting')
|
233 |
);
|
234 |
|
@@ -424,6 +424,11 @@ class WPRSS_SimplePie_File extends SimplePie_File {
|
|
424 |
curl_setopt( $fp, CURLOPT_MAXREDIRS, $redirects );
|
425 |
}
|
426 |
|
|
|
|
|
|
|
|
|
|
|
427 |
$this->_before_curl_exec( $fp, $url );
|
428 |
|
429 |
$this->headers = curl_exec( $fp );
|
228 |
|
229 |
$fields[self::SETTING_KEY_FEED_REQUEST_USERAGENT] = array(
|
230 |
'id' => self::SETTING_KEY_FEED_REQUEST_USERAGENT,
|
231 |
+
'label' => $wprss->__('Feed request useragent'),
|
232 |
'placeholder' => $wprss->__('Leave blank to inherit general setting')
|
233 |
);
|
234 |
|
424 |
curl_setopt( $fp, CURLOPT_MAXREDIRS, $redirects );
|
425 |
}
|
426 |
|
427 |
+
global $wpraNoSslVerification;
|
428 |
+
if ($wpraNoSslVerification) {
|
429 |
+
curl_setopt( $fp, CURLOPT_SSL_VERIFYPEER, 0 );
|
430 |
+
}
|
431 |
+
|
432 |
$this->_before_curl_exec( $fp, $url );
|
433 |
|
434 |
$this->headers = curl_exec( $fp );
|
includes/feed-importing.php
CHANGED
@@ -344,6 +344,9 @@ function wprss_get_feed_cache_dir()
|
|
344 |
// If turned on, force the feed
|
345 |
if ($force_feed == 'true' || $param_force_feed) {
|
346 |
$feed->force_feed(true);
|
|
|
|
|
|
|
347 |
}
|
348 |
}
|
349 |
|
344 |
// If turned on, force the feed
|
345 |
if ($force_feed == 'true' || $param_force_feed) {
|
346 |
$feed->force_feed(true);
|
347 |
+
|
348 |
+
global $wpraNoSslVerification;
|
349 |
+
$wpraNoSslVerification = true;
|
350 |
}
|
351 |
}
|
352 |
|
includes/feed-processing.php
CHANGED
@@ -92,6 +92,11 @@
|
|
92 |
'value' => (string) $source_id,
|
93 |
'compare' => '=',
|
94 |
];
|
|
|
|
|
|
|
|
|
|
|
95 |
}
|
96 |
|
97 |
return apply_filters('wprss_get_feed_items_for_source_args', $args, $source_id);
|
92 |
'value' => (string) $source_id,
|
93 |
'compare' => '=',
|
94 |
];
|
95 |
+
} else {
|
96 |
+
$args['meta_query'][] = [
|
97 |
+
'key' => 'wprss_feed_id',
|
98 |
+
'compare' => 'EXISTS',
|
99 |
+
];
|
100 |
}
|
101 |
|
102 |
return apply_filters('wprss_get_feed_items_for_source_args', $args, $source_id);
|
js/admin-custom.js
CHANGED
@@ -604,17 +604,23 @@ if ( !String.prototype.trim ) {
|
|
604 |
// Image options in feed source edit page
|
605 |
(function($) {
|
606 |
function update() {
|
|
|
|
|
|
|
607 |
var ftImage = $('#wpra_ft_image').val();
|
608 |
var downloadImages = $('#wpra_download_images').prop('checked') === true;
|
609 |
var ftImagesEnabled = (ftImage !== '');
|
610 |
-
var
|
|
|
|
|
|
|
611 |
|
612 |
// Only show the "must have ft image" and "remove ft image" options if featured images are enabled
|
613 |
$('#wpra_siphon_ft_image').toggle(ftImagesEnabled);
|
614 |
$('#wpra_must_have_ft_image').toggle(ftImagesEnabled);
|
615 |
|
616 |
// Show the image minimum size options if either featured images or image downloading are enabled
|
617 |
-
$('#wpra_image_min_size_row').toggle( (ftImagesEnabled || downloadImages) && !
|
618 |
}
|
619 |
|
620 |
$(document).ready(function () {
|
@@ -624,6 +630,12 @@ if ( !String.prototype.trim ) {
|
|
624 |
$('#wpra_ft_image').on('change', update);
|
625 |
$('#wpra_download_images').on('change', update);
|
626 |
|
|
|
|
|
|
|
|
|
|
|
|
|
627 |
update();
|
628 |
|
629 |
var gallery = new WpraGallery({
|
604 |
// Image options in feed source edit page
|
605 |
(function($) {
|
606 |
function update() {
|
607 |
+
var f2pTypeSelector = $('select#wprss_ftp_post_type');
|
608 |
+
var showMetaBox = (f2pTypeSelector.length === 0) || (f2pTypeSelector.val() === 'wprss_feed_item');
|
609 |
+
|
610 |
var ftImage = $('#wpra_ft_image').val();
|
611 |
var downloadImages = $('#wpra_download_images').prop('checked') === true;
|
612 |
var ftImagesEnabled = (ftImage !== '');
|
613 |
+
var useDefaultFtImage = (ftImage === 'default');
|
614 |
+
|
615 |
+
// Only show the meta box when F2P is not active, or it is and the Post Type is "Feed Item"
|
616 |
+
$('#wpra-images').toggle(showMetaBox);
|
617 |
|
618 |
// Only show the "must have ft image" and "remove ft image" options if featured images are enabled
|
619 |
$('#wpra_siphon_ft_image').toggle(ftImagesEnabled);
|
620 |
$('#wpra_must_have_ft_image').toggle(ftImagesEnabled);
|
621 |
|
622 |
// Show the image minimum size options if either featured images or image downloading are enabled
|
623 |
+
$('#wpra_image_min_size_row').toggle( (ftImagesEnabled || downloadImages) && !useDefaultFtImage );
|
624 |
}
|
625 |
|
626 |
$(document).ready(function () {
|
630 |
$('#wpra_ft_image').on('change', update);
|
631 |
$('#wpra_download_images').on('change', update);
|
632 |
|
633 |
+
// If the F2P Post Type selector is on the page, update the image options when the post type selection changes
|
634 |
+
var f2pTypeSelector = $('select#wprss_ftp_post_type');
|
635 |
+
if (f2pTypeSelector.length) {
|
636 |
+
f2pTypeSelector.on('change', update);
|
637 |
+
}
|
638 |
+
|
639 |
update();
|
640 |
|
641 |
var gallery = new WpraGallery({
|
languages/{default.mo → wprss-en.mo}
RENAMED
Binary file
|
languages/{default.po → wprss-en.po}
RENAMED
@@ -1,15 +1,15 @@
|
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: WP RSS Aggregator\n"
|
4 |
-
"POT-Creation-Date: 2020-
|
5 |
-
"PO-Revision-Date: 2020-
|
6 |
"Last-Translator: \n"
|
7 |
"Language-Team: RebelCode\n"
|
8 |
"Language: en_US\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
-
"X-Generator: Poedit 2.
|
13 |
"X-Poedit-Basepath: ..\n"
|
14 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
15 |
"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
|
@@ -26,6 +26,8 @@ msgstr ""
|
|
26 |
"X-Poedit-SearchPathExcluded-4: fonts\n"
|
27 |
"X-Poedit-SearchPathExcluded-5: webpack\n"
|
28 |
"X-Poedit-SearchPathExcluded-6: test\n"
|
|
|
|
|
29 |
|
30 |
#: includes/Aventura/Wprss/Core/Licensing/AjaxController.php:93
|
31 |
msgid "No nonce"
|
@@ -57,11 +59,11 @@ msgid "License"
|
|
57 |
msgstr ""
|
58 |
|
59 |
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:183
|
60 |
-
msgid "License
|
61 |
msgstr ""
|
62 |
|
63 |
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:192
|
64 |
-
msgid "Activate
|
65 |
msgstr ""
|
66 |
|
67 |
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:221
|
@@ -337,22 +339,18 @@ msgstr ""
|
|
337 |
msgid "ID: %1$s"
|
338 |
msgstr ""
|
339 |
|
340 |
-
#: includes/admin-display.php:
|
341 |
msgid "Could not schedule fetch: source ID must be specified"
|
342 |
msgstr ""
|
343 |
|
344 |
-
#: includes/admin-display.php:
|
345 |
msgid "Failed to schedule cron"
|
346 |
msgstr ""
|
347 |
|
348 |
-
#: includes/admin-display.php:
|
349 |
msgid "Source ID was not specified"
|
350 |
msgstr ""
|
351 |
|
352 |
-
#: includes/admin-display.php:698
|
353 |
-
msgid "Publish Feed"
|
354 |
-
msgstr ""
|
355 |
-
|
356 |
#: includes/admin-editor.php:117
|
357 |
msgid ""
|
358 |
"To select more than one feed source, click and drag with your mouse pointer "
|
@@ -669,7 +667,7 @@ msgstr ""
|
|
669 |
msgid "The maximum number of feed items in the custom feed."
|
670 |
msgstr ""
|
671 |
|
672 |
-
#: includes/admin-help-settings.php:93 src/Modules/FeedTemplatesModule.php:
|
673 |
msgid ""
|
674 |
"Check this box to make the feed item titles link to the original article."
|
675 |
msgstr ""
|
@@ -682,7 +680,7 @@ msgid ""
|
|
682 |
"<em>Leave empty for no limit.</em>"
|
683 |
msgstr ""
|
684 |
|
685 |
-
#: includes/admin-help-settings.php:100 src/Modules/FeedTemplatesModule.php:
|
686 |
msgid ""
|
687 |
"Check this box to show the author for each feed item, if it is available."
|
688 |
msgstr ""
|
@@ -713,7 +711,7 @@ msgid ""
|
|
713 |
"to be displayed."
|
714 |
msgstr ""
|
715 |
|
716 |
-
#: includes/admin-help-settings.php:114 src/Modules/FeedTemplatesModule.php:
|
717 |
msgid ""
|
718 |
"Choose how you want links to be opened. This applies to the feed item title "
|
719 |
"and the source link."
|
@@ -728,33 +726,33 @@ msgid ""
|
|
728 |
"certain links, such as links to feed items in this case."
|
729 |
msgstr ""
|
730 |
|
731 |
-
#: includes/admin-help-settings.php:125 src/Modules/FeedTemplatesModule.php:
|
732 |
msgid "Enable this option to show the feed source name for each feed item."
|
733 |
msgstr ""
|
734 |
|
735 |
-
#: includes/admin-help-settings.php:127 src/Modules/FeedTemplatesModule.php:
|
736 |
msgid ""
|
737 |
"Enter the text that you want to show before the source name. A space is "
|
738 |
"automatically added between this text and the feed source name."
|
739 |
msgstr ""
|
740 |
|
741 |
-
#: includes/admin-help-settings.php:129 src/Modules/FeedTemplatesModule.php:
|
742 |
msgid ""
|
743 |
"Enable this option to link the feed source name to the RSS feed's source "
|
744 |
"site."
|
745 |
msgstr ""
|
746 |
|
747 |
-
#: includes/admin-help-settings.php:135 src/Modules/FeedTemplatesModule.php:
|
748 |
msgid "Enable this to show the feed item's date."
|
749 |
msgstr ""
|
750 |
|
751 |
-
#: includes/admin-help-settings.php:137 src/Modules/FeedTemplatesModule.php:
|
752 |
msgid ""
|
753 |
"Enter the text that you want to show before the feed item date. A space is "
|
754 |
"automatically added between this text and the date."
|
755 |
msgstr ""
|
756 |
|
757 |
-
#: includes/admin-help-settings.php:139 src/Modules/FeedTemplatesModule.php:
|
758 |
msgid "The format to use for the feed item dates, as a PHP date format."
|
759 |
msgstr ""
|
760 |
|
@@ -853,116 +851,109 @@ msgstr ""
|
|
853 |
|
854 |
#: includes/admin-help.php:63
|
855 |
msgid ""
|
856 |
-
"It provides access to our
|
857 |
-
"
|
858 |
msgstr ""
|
859 |
|
860 |
#: includes/admin-help.php:66
|
861 |
msgid ""
|
862 |
-
"The beacon tracks what pages you were on before clicking it. This helps it "
|
863 |
-
"provide relevant help results and also helps the support team better "
|
864 |
-
"understand the problem you are facing."
|
865 |
-
msgstr ""
|
866 |
-
|
867 |
-
#: includes/admin-help.php:67
|
868 |
-
msgid ""
|
869 |
"The beacon only works on WP RSS Aggregator admin pages and does not track "
|
870 |
-
"your mouse clicks and keyboard input."
|
871 |
msgstr ""
|
872 |
|
873 |
-
#: includes/admin-help.php:
|
874 |
msgid "The support beacon is currently <b>enabled</b>."
|
875 |
msgstr ""
|
876 |
|
877 |
-
#: includes/admin-help.php:
|
878 |
msgid "Disable support beacon"
|
879 |
msgstr ""
|
880 |
|
881 |
-
#: includes/admin-help.php:
|
882 |
msgid ""
|
883 |
"By enabling the help beacon, you are consenting to this data collection."
|
884 |
msgstr ""
|
885 |
|
886 |
-
#: includes/admin-help.php:
|
887 |
msgid "Enable support beacon"
|
888 |
msgstr ""
|
889 |
|
890 |
-
#: includes/admin-help.php:
|
891 |
msgid "Premium Support"
|
892 |
msgstr ""
|
893 |
|
894 |
-
#: includes/admin-help.php:
|
895 |
#, php-format
|
896 |
msgid ""
|
897 |
"Contact us <a href=\"%s\" target=\"%s=\">here</a> for pre-sales and premium "
|
898 |
"support."
|
899 |
msgstr ""
|
900 |
|
901 |
-
#: includes/admin-help.php:
|
902 |
msgid "Email Support"
|
903 |
msgstr ""
|
904 |
|
905 |
-
#: includes/admin-help.php:
|
906 |
msgid ""
|
907 |
"If you still can't find an answer to your query after reading the "
|
908 |
"documentation and going through the FAQ, just fill out the support request "
|
909 |
"form below. We'll be happy to help you out."
|
910 |
msgstr ""
|
911 |
|
912 |
-
#: includes/admin-help.php:
|
913 |
msgid "From: "
|
914 |
msgstr ""
|
915 |
|
916 |
-
#: includes/admin-help.php:
|
917 |
msgid "Replies will be sent to this email address."
|
918 |
msgstr ""
|
919 |
|
920 |
-
#: includes/admin-help.php:
|
921 |
msgid "Attachments"
|
922 |
msgstr ""
|
923 |
|
924 |
-
#: includes/admin-help.php:
|
925 |
msgid "WP RSS Aggregator log file"
|
926 |
msgstr ""
|
927 |
|
928 |
-
#: includes/admin-help.php:
|
929 |
msgid "WordPress debugging information"
|
930 |
msgstr ""
|
931 |
|
932 |
-
#: includes/admin-help.php:
|
933 |
msgid "Send Message"
|
934 |
msgstr ""
|
935 |
|
936 |
-
#: includes/admin-help.php:
|
937 |
msgid "Support Forums"
|
938 |
msgstr ""
|
939 |
|
940 |
-
#: includes/admin-help.php:
|
941 |
#, php-format
|
942 |
msgid ""
|
943 |
"Users of the free version of WP RSS Aggregator can ask questions on the <a "
|
944 |
"href=\"%s\">support forum</a>."
|
945 |
msgstr ""
|
946 |
|
947 |
-
#: includes/admin-help.php:
|
948 |
#, php-format
|
949 |
msgid ""
|
950 |
"There was an error sending the form. Please use the <a href=\"%s\" target="
|
951 |
"\"_blank\">contact form on our site.</a>"
|
952 |
msgstr ""
|
953 |
|
954 |
-
#: includes/admin-help.php:
|
955 |
#, php-format
|
956 |
msgid ""
|
957 |
"Please fill out all the fields in the form, including the <strong>%s</"
|
958 |
"strong> field."
|
959 |
msgstr ""
|
960 |
|
961 |
-
#: includes/admin-help.php:
|
962 |
msgid "Please enter a valid email address."
|
963 |
msgstr ""
|
964 |
|
965 |
-
#: includes/admin-help.php:
|
966 |
msgid ""
|
967 |
"Could not enqueue tooltip content: the queue method is not a valid callable."
|
968 |
msgstr ""
|
@@ -971,29 +962,29 @@ msgstr ""
|
|
971 |
msgid "Welcome to WP RSS Aggregator"
|
972 |
msgstr ""
|
973 |
|
974 |
-
#: includes/admin-intro-page.php:
|
975 |
#, php-format
|
976 |
msgid "Missing intro step param \"%s\""
|
977 |
msgstr ""
|
978 |
|
979 |
-
#: includes/admin-intro-page.php:
|
980 |
msgid "Missing feed URL parameter"
|
981 |
msgstr ""
|
982 |
|
983 |
-
#: includes/admin-intro-page.php:
|
984 |
msgid "The given feed URL is invalid"
|
985 |
msgstr ""
|
986 |
|
987 |
-
#: includes/admin-intro-page.php:
|
988 |
msgid "Failed to retrieve items"
|
989 |
msgstr ""
|
990 |
|
991 |
-
#: includes/admin-intro-page.php:
|
992 |
#, php-format
|
993 |
msgid "Failed to import the feed source \"%s\" with URL \"%s\""
|
994 |
msgstr ""
|
995 |
|
996 |
-
#: includes/admin-intro-page.php:
|
997 |
msgctxt "default name of shortcode page"
|
998 |
msgid "Feeds"
|
999 |
msgstr ""
|
@@ -1027,100 +1018,104 @@ msgstr ""
|
|
1027 |
msgid "Limit"
|
1028 |
msgstr ""
|
1029 |
|
1030 |
-
#: includes/admin-metaboxes.php:107
|
1031 |
-
msgid "
|
1032 |
msgstr ""
|
1033 |
|
1034 |
-
#: includes/admin-metaboxes.php:
|
1035 |
-
msgid "
|
1036 |
msgstr ""
|
1037 |
|
1038 |
-
#: includes/admin-metaboxes.php:
|
1039 |
msgid "Link source"
|
1040 |
msgstr ""
|
1041 |
|
1042 |
-
#: includes/admin-metaboxes.php:
|
1043 |
msgid "Use source info"
|
1044 |
msgstr ""
|
1045 |
|
1046 |
-
#: includes/admin-metaboxes.php:
|
1047 |
-
#: includes/admin-metaboxes.php:
|
1048 |
-
#: includes/admin-options.php:
|
1049 |
-
#: includes/feed-access.php:263 src/Modules/FeedTemplatesModule.php:
|
1050 |
msgid "Default"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
-
#: includes/admin-metaboxes.php:
|
1054 |
msgid "Updating feed source"
|
1055 |
msgstr ""
|
1056 |
|
1057 |
-
#: includes/admin-metaboxes.php:
|
|
|
|
|
|
|
|
|
1058 |
#, php-format
|
1059 |
msgid "Latest %1$s feed items out of %2$s available from %3$s"
|
1060 |
msgstr ""
|
1061 |
|
1062 |
-
#: includes/admin-metaboxes.php:
|
1063 |
msgid "ago"
|
1064 |
msgstr ""
|
1065 |
|
1066 |
-
#: includes/admin-metaboxes.php:
|
1067 |
msgid "No Date"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
-
#: includes/admin-metaboxes.php:
|
1071 |
msgid ""
|
1072 |
"<strong>Invalid feed URL</strong> - Double check the feed source URL setting "
|
1073 |
"above."
|
1074 |
msgstr ""
|
1075 |
|
1076 |
-
#: includes/admin-metaboxes.php:
|
1077 |
#, php-format
|
1078 |
msgid ""
|
1079 |
"Not sure where to find the RSS feed on a website? <a target=\"_blank\" href="
|
1080 |
-
"\"%1$s\">Click here</a> for a visual guide.
|
1081 |
msgstr ""
|
1082 |
|
1083 |
-
#: includes/admin-metaboxes.php:
|
1084 |
msgid "No feed URL defined yet"
|
1085 |
msgstr ""
|
1086 |
|
1087 |
-
#: includes/admin-metaboxes.php:
|
1088 |
msgid "Force the feed"
|
1089 |
msgstr ""
|
1090 |
|
1091 |
-
#: includes/admin-metaboxes.php:
|
1092 |
msgid "Active"
|
1093 |
msgstr ""
|
1094 |
|
1095 |
-
#: includes/admin-metaboxes.php:
|
1096 |
msgid "Paused"
|
1097 |
msgstr ""
|
1098 |
|
1099 |
-
#: includes/admin-metaboxes.php:
|
1100 |
msgid "Limit items by age:"
|
1101 |
msgstr ""
|
1102 |
|
1103 |
-
#: includes/admin-metaboxes.php:
|
1104 |
msgid "Need help?"
|
1105 |
msgstr ""
|
1106 |
|
1107 |
-
#: includes/admin-metaboxes.php:
|
1108 |
msgid "Check out the support forum"
|
1109 |
msgstr ""
|
1110 |
|
1111 |
-
#: includes/admin-metaboxes.php:
|
1112 |
msgid "Suggest a new feature"
|
1113 |
msgstr ""
|
1114 |
|
1115 |
-
#: includes/admin-metaboxes.php:
|
1116 |
msgid "Give it a 5 star rating on WordPress.org"
|
1117 |
msgstr ""
|
1118 |
|
1119 |
-
#: includes/admin-metaboxes.php:
|
1120 |
msgid "Follow WP Mayor on Twitter."
|
1121 |
msgstr ""
|
1122 |
|
1123 |
-
#: includes/admin-metaboxes.php:
|
1124 |
msgid "Like WP Mayor on Facebook."
|
1125 |
msgstr ""
|
1126 |
|
@@ -1206,17 +1201,17 @@ msgstr ""
|
|
1206 |
msgid "Options that control how the feed item's date is displayed."
|
1207 |
msgstr ""
|
1208 |
|
1209 |
-
#: includes/admin-options-legacy.php:177 includes/admin-options.php:
|
1210 |
msgid "No limit"
|
1211 |
msgstr ""
|
1212 |
|
1213 |
#: includes/admin-options-legacy.php:215
|
1214 |
-
#: src/Modules/FeedTemplatesModule.php:
|
1215 |
msgid "Original page link"
|
1216 |
msgstr ""
|
1217 |
|
1218 |
#: includes/admin-options-legacy.php:216
|
1219 |
-
#: src/Modules/FeedTemplatesModule.php:
|
1220 |
msgid "Embedded video player link"
|
1221 |
msgstr ""
|
1222 |
|
@@ -1268,204 +1263,207 @@ msgstr ""
|
|
1268 |
msgid "Licenses"
|
1269 |
msgstr ""
|
1270 |
|
1271 |
-
#: includes/admin-options.php:
|
|
|
|
|
|
|
|
|
1272 |
msgid "Save Settings"
|
1273 |
msgstr ""
|
1274 |
|
1275 |
-
#: includes/admin-options.php:
|
1276 |
msgid "Update interval"
|
1277 |
msgstr ""
|
1278 |
|
1279 |
-
#: includes/admin-options.php:
|
1280 |
msgid "Import order"
|
1281 |
msgstr ""
|
1282 |
|
1283 |
-
#: includes/admin-options.php:
|
1284 |
msgid "Limit items by age"
|
1285 |
msgstr ""
|
1286 |
|
1287 |
-
#: includes/admin-options.php:
|
1288 |
msgid "Limit feed items stored per feed"
|
1289 |
msgstr ""
|
1290 |
|
1291 |
-
#: includes/admin-options.php:
|
1292 |
msgid "Limit feed items stored"
|
1293 |
msgstr ""
|
1294 |
|
1295 |
-
#: includes/admin-options.php:
|
1296 |
msgid "Limit feed items per import"
|
1297 |
msgstr ""
|
1298 |
|
1299 |
-
#: includes/admin-options.php:
|
1300 |
msgid "Schedule future items"
|
1301 |
msgstr ""
|
1302 |
|
1303 |
-
#: includes/admin-options.php:
|
1304 |
msgid "Custom feed URL"
|
1305 |
msgstr ""
|
1306 |
|
1307 |
-
#: includes/admin-options.php:
|
1308 |
msgid "Custom feed title"
|
1309 |
msgstr ""
|
1310 |
|
1311 |
-
#: includes/admin-options.php:
|
1312 |
msgid "Custom feed limit"
|
1313 |
msgstr ""
|
1314 |
|
1315 |
-
#: includes/admin-options.php:
|
1316 |
-
msgid "Disable
|
1317 |
msgstr ""
|
1318 |
|
1319 |
-
#: includes/admin-options.php:
|
1320 |
-
#: templates/admin/tools/import.twig:13
|
1321 |
msgid "Import Settings"
|
1322 |
msgstr ""
|
1323 |
|
1324 |
-
#: includes/admin-options.php:
|
1325 |
msgid "Custom RSS Feed"
|
1326 |
msgstr ""
|
1327 |
|
1328 |
-
#: includes/admin-options.php:
|
1329 |
msgid "Advanced Settings"
|
1330 |
msgstr ""
|
1331 |
|
1332 |
-
#: includes/admin-options.php:
|
1333 |
msgid "Styles"
|
1334 |
msgstr ""
|
1335 |
|
1336 |
-
#: includes/admin-options.php:
|
1337 |
msgid "Configure how WP RSS Aggregator imports RSS feed items."
|
1338 |
msgstr ""
|
1339 |
|
1340 |
-
#: includes/admin-options.php:
|
1341 |
msgid ""
|
1342 |
"WP RSS Aggregator creates a custom RSS feed on your site that includes all "
|
1343 |
"of your imported items. Use the below options to set it up."
|
1344 |
msgstr ""
|
1345 |
|
1346 |
-
#: includes/admin-options.php:
|
1347 |
msgid "Only change these options if you know what you are doing!"
|
1348 |
msgstr ""
|
1349 |
|
1350 |
-
#: includes/admin-options.php:
|
1351 |
msgid ""
|
1352 |
"If you would like to disable all styles used in this plugin, tick the "
|
1353 |
"checkbox."
|
1354 |
msgstr ""
|
1355 |
|
1356 |
-
#: includes/admin-options.php:
|
1357 |
msgid "No Limit"
|
1358 |
msgstr ""
|
1359 |
|
1360 |
-
#: includes/admin-options.php:
|
1361 |
msgid "Open custom feed"
|
1362 |
msgstr ""
|
1363 |
|
1364 |
-
#: includes/admin-options.php:
|
1365 |
msgid "Latest items first"
|
1366 |
msgstr ""
|
1367 |
|
1368 |
-
#: includes/admin-options.php:
|
1369 |
msgid "Oldest items first"
|
1370 |
msgstr ""
|
1371 |
|
1372 |
-
#: includes/admin-options.php:
|
1373 |
msgid "Original feed order"
|
1374 |
msgstr ""
|
1375 |
|
1376 |
-
#: includes/admin-options.php:
|
1377 |
msgid "Generate Random Code"
|
1378 |
msgstr ""
|
1379 |
|
1380 |
-
#: includes/admin-options.php:
|
1381 |
msgid ""
|
1382 |
"Enter the code to use to securely reset the plugin and deactivate it. Be "
|
1383 |
"sure to save this code somewhere safe."
|
1384 |
msgstr ""
|
1385 |
|
1386 |
-
#: includes/admin-options.php:
|
1387 |
msgid ""
|
1388 |
"Leave this empty to disable the secure reset function.<br/>\n"
|
1389 |
" You use this code by adding any of the following to any URL on "
|
1390 |
"your site."
|
1391 |
msgstr ""
|
1392 |
|
1393 |
-
#: includes/admin-options.php:
|
1394 |
msgid "Resets your WP RSS Aggregator settings"
|
1395 |
msgstr ""
|
1396 |
|
1397 |
-
#: includes/admin-options.php:
|
1398 |
msgid "Deactivates WP RSS Aggregator"
|
1399 |
msgstr ""
|
1400 |
|
1401 |
-
#: includes/admin-options.php:
|
1402 |
msgid "Does both of the above"
|
1403 |
msgstr ""
|
1404 |
|
1405 |
-
#: includes/admin-options.php:
|
1406 |
msgid ""
|
1407 |
"Use the above actions only when absolutely necessary, or when instructed to "
|
1408 |
"by support staff."
|
1409 |
msgstr ""
|
1410 |
|
1411 |
-
#: includes/admin-options.php:
|
1412 |
msgid "On"
|
1413 |
msgstr ""
|
1414 |
|
1415 |
-
#: includes/admin-options.php:
|
1416 |
msgid "Off"
|
1417 |
msgstr ""
|
1418 |
|
1419 |
-
#: includes/admin-options.php:
|
1420 |
#, php-format
|
1421 |
msgid "%s year"
|
1422 |
msgid_plural "%s years"
|
1423 |
msgstr[0] ""
|
1424 |
msgstr[1] ""
|
1425 |
|
1426 |
-
#: includes/admin-options.php:
|
1427 |
#, php-format
|
1428 |
msgid "%s month"
|
1429 |
msgid_plural "%s months"
|
1430 |
msgstr[0] ""
|
1431 |
msgstr[1] ""
|
1432 |
|
1433 |
-
#: includes/admin-options.php:
|
1434 |
#, php-format
|
1435 |
msgid "%s week"
|
1436 |
msgid_plural "%s weeks"
|
1437 |
msgstr[0] ""
|
1438 |
msgstr[1] ""
|
1439 |
|
1440 |
-
#: includes/admin-options.php:
|
1441 |
#, php-format
|
1442 |
msgid "%s day"
|
1443 |
msgid_plural "%s days"
|
1444 |
msgstr[0] ""
|
1445 |
msgstr[1] ""
|
1446 |
|
1447 |
-
#: includes/admin-options.php:
|
1448 |
#, php-format
|
1449 |
msgid "%s hour"
|
1450 |
msgid_plural "%s hours"
|
1451 |
msgstr[0] ""
|
1452 |
msgstr[1] ""
|
1453 |
|
1454 |
-
#: includes/admin-options.php:
|
1455 |
#, php-format
|
1456 |
msgid "%s minute"
|
1457 |
msgid_plural "%s minutes"
|
1458 |
msgstr[0] ""
|
1459 |
msgstr[1] ""
|
1460 |
|
1461 |
-
#: includes/admin-options.php:
|
1462 |
#, php-format
|
1463 |
msgid "%s second"
|
1464 |
msgid_plural "%s seconds"
|
1465 |
msgstr[0] ""
|
1466 |
msgstr[1] ""
|
1467 |
|
1468 |
-
#: includes/admin-options.php:
|
1469 |
msgid "now"
|
1470 |
msgstr ""
|
1471 |
|
@@ -1583,7 +1581,7 @@ msgstr ""
|
|
1583 |
msgid "Certificate path"
|
1584 |
msgstr ""
|
1585 |
|
1586 |
-
#: includes/feed-access.php:206
|
1587 |
msgid "Feed request useragent"
|
1588 |
msgstr ""
|
1589 |
|
@@ -1591,10 +1589,6 @@ msgstr ""
|
|
1591 |
msgid "Enable feed cache"
|
1592 |
msgstr ""
|
1593 |
|
1594 |
-
#: includes/feed-access.php:231
|
1595 |
-
msgid "Feed Request Useragent"
|
1596 |
-
msgstr ""
|
1597 |
-
|
1598 |
#: includes/feed-access.php:232
|
1599 |
msgid "Leave blank to inherit general setting"
|
1600 |
msgstr ""
|
@@ -1617,17 +1611,17 @@ msgid ""
|
|
1617 |
"the blacklist"
|
1618 |
msgstr ""
|
1619 |
|
1620 |
-
#: includes/feed-importing.php:
|
1621 |
#, php-format
|
1622 |
msgid "Failed to fetch the RSS feed. Error: %s"
|
1623 |
msgstr ""
|
1624 |
|
1625 |
-
#: includes/feed-importing.php:
|
1626 |
#, php-format
|
1627 |
msgid "The importing process failed after %d seconds with the message: \"%s\""
|
1628 |
msgstr ""
|
1629 |
|
1630 |
-
#: includes/feed-processing.php:
|
1631 |
msgid "The plugin failed to schedule a fetch for this feed. Please try again."
|
1632 |
msgstr ""
|
1633 |
|
@@ -2072,39 +2066,39 @@ msgstr ""
|
|
2072 |
msgid "No Templates Found In Trash"
|
2073 |
msgstr ""
|
2074 |
|
2075 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2076 |
#: src/Templates/Feeds/Types/ListTemplateType.php:99
|
2077 |
msgid "Source:"
|
2078 |
msgstr ""
|
2079 |
|
2080 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2081 |
#: src/Templates/Feeds/Types/ListTemplateType.php:111
|
2082 |
msgid "By"
|
2083 |
msgstr ""
|
2084 |
|
2085 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2086 |
#: src/Templates/Feeds/Types/ListTemplateType.php:119
|
2087 |
msgid "Published on:"
|
2088 |
msgstr ""
|
2089 |
|
2090 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2091 |
msgid ""
|
2092 |
"The maximum number of feed items to display when using the shortcode. This "
|
2093 |
"enables pagination if set to a number smaller than the number of items to be "
|
2094 |
"displayed."
|
2095 |
msgstr ""
|
2096 |
|
2097 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2098 |
msgid ""
|
2099 |
"Set the maximum number of characters to show for feed item titles.<hr/"
|
2100 |
"><em>Leave empty for no limit.</em>"
|
2101 |
msgstr ""
|
2102 |
|
2103 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2104 |
msgid "Enable this option to show the pagination beneath feed items."
|
2105 |
msgstr ""
|
2106 |
|
2107 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2108 |
msgid ""
|
2109 |
"The type of pagination to use when showing feed items on multiple pages. The "
|
2110 |
"first shows two links, \"Older\" and \"Newer\", which allow you to navigate "
|
@@ -2112,77 +2106,77 @@ msgid ""
|
|
2112 |
"links for the next and previous pages."
|
2113 |
msgstr ""
|
2114 |
|
2115 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2116 |
msgid ""
|
2117 |
"Enter the text that you want to show before the author name. A space is "
|
2118 |
"automatically added between this text and the author name."
|
2119 |
msgstr ""
|
2120 |
|
2121 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2122 |
msgid ""
|
2123 |
"Enable this option to show the elapsed time from the feed item's date and "
|
2124 |
"time to the present time. <em>Eg. 2 hours ago</em>"
|
2125 |
msgstr ""
|
2126 |
|
2127 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2128 |
msgid ""
|
2129 |
"Enable this option to set all links displayed as \"NoFollow\".<hr/>\"Nofollow"
|
2130 |
"\" provides a way to tell search engines to <em>not</em> follow certain "
|
2131 |
"links, such as links to feed items in this case."
|
2132 |
msgstr ""
|
2133 |
|
2134 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2135 |
msgid ""
|
2136 |
"Tick this box to have feed items link to their embedded content, if they "
|
2137 |
"have any. This works especially well when links are set to <em>\"Open in a "
|
2138 |
"lightbox\"</em>."
|
2139 |
msgstr ""
|
2140 |
|
2141 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2142 |
msgid "Enable this option to show bullets next to feed items."
|
2143 |
msgstr ""
|
2144 |
|
2145 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2146 |
msgid "The bullet type to use for feed items."
|
2147 |
msgstr ""
|
2148 |
|
2149 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2150 |
msgid ""
|
2151 |
"You can add your own HTML class name to the template output. This lets you "
|
2152 |
"customize your template further using custom CSS styling or custom JS "
|
2153 |
"functionality."
|
2154 |
msgstr ""
|
2155 |
|
2156 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2157 |
#: src/Templates/Feeds/Types/ListTemplateType.php:29
|
2158 |
msgid "List"
|
2159 |
msgstr ""
|
2160 |
|
2161 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2162 |
msgid "Open in same tab/window"
|
2163 |
msgstr ""
|
2164 |
|
2165 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2166 |
msgid "Open in a new tab"
|
2167 |
msgstr ""
|
2168 |
|
2169 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2170 |
msgid "Open in a lightbox"
|
2171 |
msgstr ""
|
2172 |
|
2173 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2174 |
msgid "Older/Newer"
|
2175 |
msgstr ""
|
2176 |
|
2177 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2178 |
msgid "Numbered"
|
2179 |
msgstr ""
|
2180 |
|
2181 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2182 |
msgid "Bullets"
|
2183 |
msgstr ""
|
2184 |
|
2185 |
-
#: src/Modules/FeedTemplatesModule.php:
|
2186 |
msgid "Numbers"
|
2187 |
msgstr ""
|
2188 |
|
@@ -2190,11 +2184,11 @@ msgstr ""
|
|
2190 |
msgid "Image"
|
2191 |
msgstr ""
|
2192 |
|
2193 |
-
#: src/Modules/ImagesModule.php:191 src/Modules/ImagesModule.php:
|
2194 |
msgid "Images"
|
2195 |
msgstr ""
|
2196 |
|
2197 |
-
#: src/Modules/ImagesModule.php:
|
2198 |
msgid ""
|
2199 |
"This option allows you to select which feed item image to use as the "
|
2200 |
"featured image. Automatic best image detection will attempt to find the "
|
@@ -2341,15 +2335,15 @@ msgstr ""
|
|
2341 |
msgid "Template \"%s\" does not exist"
|
2342 |
msgstr ""
|
2343 |
|
2344 |
-
#: src/Templates/Feeds/MasterFeedsTemplate.php:
|
2345 |
#: src/Templates/Feeds/TemplateTypeTemplate.php:179
|
2346 |
msgid "The \"items\" must be a collection instance"
|
2347 |
msgstr ""
|
2348 |
|
2349 |
-
#: src/Templates/Feeds/MasterFeedsTemplate.php:
|
2350 |
msgid ""
|
2351 |
-
"Template \"{0}\" does not exist or could not be loaded. The
|
2352 |
-
"was used
|
2353 |
msgstr ""
|
2354 |
|
2355 |
#: src/Templates/Feeds/Types/AbstractFeedTemplateType.php:85
|
@@ -2369,6 +2363,56 @@ msgstr ""
|
|
2369 |
msgid "Could not render twig template: "
|
2370 |
msgstr ""
|
2371 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2372 |
#: src/Ui/BlacklistTable.php:52
|
2373 |
msgid "There are no blacklisted items"
|
2374 |
msgstr ""
|
@@ -2381,25 +2425,25 @@ msgstr ""
|
|
2381 |
msgid "Delete"
|
2382 |
msgstr ""
|
2383 |
|
2384 |
-
#: wp-rss-aggregator.php:
|
2385 |
msgid "Attempted to load an invalid WP RSS Aggregator module"
|
2386 |
msgstr ""
|
2387 |
|
2388 |
-
#: wp-rss-aggregator.php:
|
2389 |
msgid ""
|
2390 |
"<b>WP RSS Aggregator</b> has encountered an error. If this problem persists, "
|
2391 |
"kindly contact customer support and provide the following details:"
|
2392 |
msgstr ""
|
2393 |
|
2394 |
-
#: wp-rss-aggregator.php:
|
2395 |
msgid "Deactivate WP RSS Aggregator and its addons"
|
2396 |
msgstr ""
|
2397 |
|
2398 |
-
#: wp-rss-aggregator.php:
|
2399 |
msgid "Deactivate WP RSS Aggregator"
|
2400 |
msgstr ""
|
2401 |
|
2402 |
-
#: wp-rss-aggregator.php:
|
2403 |
msgid ""
|
2404 |
"<b>WP RSS Aggregator</b> has encountered a critical error. The safest course "
|
2405 |
"of action is to deactivate the plugin and any of its add-ons on this site "
|
@@ -2409,34 +2453,34 @@ msgid ""
|
|
2409 |
"how it happened."
|
2410 |
msgstr ""
|
2411 |
|
2412 |
-
#: wp-rss-aggregator.php:
|
2413 |
msgid "WP RSS Aggregator Error"
|
2414 |
msgstr ""
|
2415 |
|
2416 |
-
#: wp-rss-aggregator.php:
|
2417 |
msgid "Click to show error details"
|
2418 |
msgstr ""
|
2419 |
|
2420 |
-
#: wp-rss-aggregator.php:
|
2421 |
msgid "Error Message:"
|
2422 |
msgstr ""
|
2423 |
|
2424 |
-
#: wp-rss-aggregator.php:
|
2425 |
msgid "Occurred at:"
|
2426 |
msgstr ""
|
2427 |
|
2428 |
-
#: wp-rss-aggregator.php:
|
2429 |
msgid "Stack trace:"
|
2430 |
msgstr ""
|
2431 |
|
2432 |
-
#: wp-rss-aggregator.php:
|
2433 |
msgid ""
|
2434 |
"As of version 4.13, WP RSS Aggregator will stop supporting PHP 5.3 and will "
|
2435 |
"require PHP 5.4 or later. Kindly contact your site's hosting provider for "
|
2436 |
"PHP version update options."
|
2437 |
msgstr ""
|
2438 |
|
2439 |
-
#: wp-rss-aggregator.php:
|
2440 |
#, php-format
|
2441 |
msgid ""
|
2442 |
"<p><strong>%2$s requires WordPress to be of version %1$s or higher.</"
|
@@ -2445,28 +2489,28 @@ msgid ""
|
|
2445 |
"services.</p>"
|
2446 |
msgstr ""
|
2447 |
|
2448 |
-
#: wp-rss-aggregator.php:
|
2449 |
msgid "WP RSS Aggregator cannot be activated."
|
2450 |
msgstr ""
|
2451 |
|
2452 |
-
#: wp-rss-aggregator.php:
|
2453 |
msgid "WP RSS Aggregator has been deactivated."
|
2454 |
msgstr ""
|
2455 |
|
2456 |
-
#: wp-rss-aggregator.php:
|
2457 |
msgctxt ""
|
2458 |
"Used like \"Kindly contact your hosting provider or contact support for more "
|
2459 |
"information.\""
|
2460 |
msgid "contact support"
|
2461 |
msgstr ""
|
2462 |
|
2463 |
-
#: wp-rss-aggregator.php:
|
2464 |
#, php-format
|
2465 |
msgid ""
|
2466 |
"The plugin requires version %s or later and your site's PHP version is %s."
|
2467 |
msgstr ""
|
2468 |
|
2469 |
-
#: wp-rss-aggregator.php:
|
2470 |
#, php-format
|
2471 |
msgctxt "the \"%s\" part is a link with text = \"contact support\""
|
2472 |
msgid ""
|
@@ -2474,22 +2518,22 @@ msgid ""
|
|
2474 |
"more information."
|
2475 |
msgstr ""
|
2476 |
|
2477 |
-
#: wp-rss-aggregator.php:
|
2478 |
msgid "WP RSS Aggregator - PHP version error"
|
2479 |
msgstr ""
|
2480 |
|
2481 |
-
#: wp-rss-aggregator.php:
|
2482 |
#, php-format
|
2483 |
msgid "%2$s requires WordPress version %1$s or higher."
|
2484 |
msgstr ""
|
2485 |
|
2486 |
-
#: wp-rss-aggregator.php:
|
2487 |
msgid ""
|
2488 |
"The Excerpts & Thumbnails addon has been discontinued in favor of the "
|
2489 |
"Templates addon."
|
2490 |
msgstr ""
|
2491 |
|
2492 |
-
#: wp-rss-aggregator.php:
|
2493 |
msgid "Click here to learn more."
|
2494 |
msgstr ""
|
2495 |
|
@@ -2643,7 +2687,7 @@ msgid "Feed Name, http://www.myfeed.com"
|
|
2643 |
msgstr ""
|
2644 |
|
2645 |
#: templates/admin/tools/bulk_add.twig:14
|
2646 |
-
msgid "Add
|
2647 |
msgstr ""
|
2648 |
|
2649 |
#: templates/admin/tools/crons.twig:20
|
@@ -2682,7 +2726,7 @@ msgstr ""
|
|
2682 |
msgid "Time"
|
2683 |
msgstr ""
|
2684 |
|
2685 |
-
#: templates/admin/tools/export.twig:1
|
2686 |
msgid "Export Settings"
|
2687 |
msgstr ""
|
2688 |
|
@@ -2692,12 +2736,20 @@ msgid ""
|
|
2692 |
"its add-ons."
|
2693 |
msgstr ""
|
2694 |
|
|
|
|
|
|
|
|
|
2695 |
#: templates/admin/tools/import.twig:2
|
2696 |
msgid ""
|
2697 |
"Upload an exported settings file to import your settings for WP RSS "
|
2698 |
"Aggregator and its add-ons"
|
2699 |
msgstr ""
|
2700 |
|
|
|
|
|
|
|
|
|
2701 |
#: templates/admin/tools/logs.twig:2
|
2702 |
msgid "Debug Log"
|
2703 |
msgstr ""
|
@@ -2771,11 +2823,11 @@ msgid "(Once per day, logs older than the set amount of days are deleted)"
|
|
2771 |
msgstr ""
|
2772 |
|
2773 |
#: templates/admin/tools/logs.twig:113
|
2774 |
-
msgid "Save
|
2775 |
msgstr ""
|
2776 |
|
2777 |
-
#: templates/admin/tools/reset.twig:1
|
2778 |
-
msgid "Delete
|
2779 |
msgstr ""
|
2780 |
|
2781 |
#: templates/admin/tools/reset.twig:2
|
@@ -2788,6 +2840,10 @@ msgid ""
|
|
2788 |
"feeds, meaning that you may be unable to re-import them later."
|
2789 |
msgstr ""
|
2790 |
|
|
|
|
|
|
|
|
|
2791 |
#: templates/admin/tools/reset.twig:18
|
2792 |
msgid "Restore Default Settings"
|
2793 |
msgstr ""
|
@@ -2803,7 +2859,7 @@ msgid ""
|
|
2803 |
msgstr ""
|
2804 |
|
2805 |
#: templates/admin/tools/reset.twig:30
|
2806 |
-
msgid "Reset
|
2807 |
msgstr ""
|
2808 |
|
2809 |
#: templates/admin/tools/sys_info.twig:17
|
1 |
msgid ""
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: WP RSS Aggregator\n"
|
4 |
+
"POT-Creation-Date: 2020-07-22 10:29+0200\n"
|
5 |
+
"PO-Revision-Date: 2020-07-22 10:30+0200\n"
|
6 |
"Last-Translator: \n"
|
7 |
"Language-Team: RebelCode\n"
|
8 |
"Language: en_US\n"
|
9 |
"MIME-Version: 1.0\n"
|
10 |
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 2.3.1\n"
|
13 |
"X-Poedit-Basepath: ..\n"
|
14 |
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
15 |
"X-Poedit-Flags-xgettext: --add-comments=translators:\n"
|
26 |
"X-Poedit-SearchPathExcluded-4: fonts\n"
|
27 |
"X-Poedit-SearchPathExcluded-5: webpack\n"
|
28 |
"X-Poedit-SearchPathExcluded-6: test\n"
|
29 |
+
"X-Poedit-SearchPathExcluded-7: build\n"
|
30 |
+
"X-Poedit-SearchPathExcluded-8: images\n"
|
31 |
|
32 |
#: includes/Aventura/Wprss/Core/Licensing/AjaxController.php:93
|
33 |
msgid "No nonce"
|
59 |
msgstr ""
|
60 |
|
61 |
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:183
|
62 |
+
msgid "License key"
|
63 |
msgstr ""
|
64 |
|
65 |
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:192
|
66 |
+
msgid "Activate license"
|
67 |
msgstr ""
|
68 |
|
69 |
#: includes/Aventura/Wprss/Core/Licensing/Settings.php:221
|
339 |
msgid "ID: %1$s"
|
340 |
msgstr ""
|
341 |
|
342 |
+
#: includes/admin-display.php:459
|
343 |
msgid "Could not schedule fetch: source ID must be specified"
|
344 |
msgstr ""
|
345 |
|
346 |
+
#: includes/admin-display.php:497 includes/admin-display.php:546
|
347 |
msgid "Failed to schedule cron"
|
348 |
msgstr ""
|
349 |
|
350 |
+
#: includes/admin-display.php:528 includes/admin-display.php:579
|
351 |
msgid "Source ID was not specified"
|
352 |
msgstr ""
|
353 |
|
|
|
|
|
|
|
|
|
354 |
#: includes/admin-editor.php:117
|
355 |
msgid ""
|
356 |
"To select more than one feed source, click and drag with your mouse pointer "
|
667 |
msgid "The maximum number of feed items in the custom feed."
|
668 |
msgstr ""
|
669 |
|
670 |
+
#: includes/admin-help-settings.php:93 src/Modules/FeedTemplatesModule.php:465
|
671 |
msgid ""
|
672 |
"Check this box to make the feed item titles link to the original article."
|
673 |
msgstr ""
|
680 |
"<em>Leave empty for no limit.</em>"
|
681 |
msgstr ""
|
682 |
|
683 |
+
#: includes/admin-help-settings.php:100 src/Modules/FeedTemplatesModule.php:471
|
684 |
msgid ""
|
685 |
"Check this box to show the author for each feed item, if it is available."
|
686 |
msgstr ""
|
711 |
"to be displayed."
|
712 |
msgstr ""
|
713 |
|
714 |
+
#: includes/admin-help-settings.php:114 src/Modules/FeedTemplatesModule.php:477
|
715 |
msgid ""
|
716 |
"Choose how you want links to be opened. This applies to the feed item title "
|
717 |
"and the source link."
|
726 |
"certain links, such as links to feed items in this case."
|
727 |
msgstr ""
|
728 |
|
729 |
+
#: includes/admin-help-settings.php:125 src/Modules/FeedTemplatesModule.php:468
|
730 |
msgid "Enable this option to show the feed source name for each feed item."
|
731 |
msgstr ""
|
732 |
|
733 |
+
#: includes/admin-help-settings.php:127 src/Modules/FeedTemplatesModule.php:469
|
734 |
msgid ""
|
735 |
"Enter the text that you want to show before the source name. A space is "
|
736 |
"automatically added between this text and the feed source name."
|
737 |
msgstr ""
|
738 |
|
739 |
+
#: includes/admin-help-settings.php:129 src/Modules/FeedTemplatesModule.php:470
|
740 |
msgid ""
|
741 |
"Enable this option to link the feed source name to the RSS feed's source "
|
742 |
"site."
|
743 |
msgstr ""
|
744 |
|
745 |
+
#: includes/admin-help-settings.php:135 src/Modules/FeedTemplatesModule.php:473
|
746 |
msgid "Enable this to show the feed item's date."
|
747 |
msgstr ""
|
748 |
|
749 |
+
#: includes/admin-help-settings.php:137 src/Modules/FeedTemplatesModule.php:474
|
750 |
msgid ""
|
751 |
"Enter the text that you want to show before the feed item date. A space is "
|
752 |
"automatically added between this text and the date."
|
753 |
msgstr ""
|
754 |
|
755 |
+
#: includes/admin-help-settings.php:139 src/Modules/FeedTemplatesModule.php:475
|
756 |
msgid "The format to use for the feed item dates, as a PHP date format."
|
757 |
msgstr ""
|
758 |
|
851 |
|
852 |
#: includes/admin-help.php:63
|
853 |
msgid ""
|
854 |
+
"It provides access to our extensive knowledge base where you can find the "
|
855 |
+
"answers to the most commonly asked questions."
|
856 |
msgstr ""
|
857 |
|
858 |
#: includes/admin-help.php:66
|
859 |
msgid ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
860 |
"The beacon only works on WP RSS Aggregator admin pages and does not track "
|
861 |
+
"your mouse clicks and/or keyboard input."
|
862 |
msgstr ""
|
863 |
|
864 |
+
#: includes/admin-help.php:69
|
865 |
msgid "The support beacon is currently <b>enabled</b>."
|
866 |
msgstr ""
|
867 |
|
868 |
+
#: includes/admin-help.php:71
|
869 |
msgid "Disable support beacon"
|
870 |
msgstr ""
|
871 |
|
872 |
+
#: includes/admin-help.php:74
|
873 |
msgid ""
|
874 |
"By enabling the help beacon, you are consenting to this data collection."
|
875 |
msgstr ""
|
876 |
|
877 |
+
#: includes/admin-help.php:76
|
878 |
msgid "Enable support beacon"
|
879 |
msgstr ""
|
880 |
|
881 |
+
#: includes/admin-help.php:107
|
882 |
msgid "Premium Support"
|
883 |
msgstr ""
|
884 |
|
885 |
+
#: includes/admin-help.php:110
|
886 |
#, php-format
|
887 |
msgid ""
|
888 |
"Contact us <a href=\"%s\" target=\"%s=\">here</a> for pre-sales and premium "
|
889 |
"support."
|
890 |
msgstr ""
|
891 |
|
892 |
+
#: includes/admin-help.php:167
|
893 |
msgid "Email Support"
|
894 |
msgstr ""
|
895 |
|
896 |
+
#: includes/admin-help.php:168
|
897 |
msgid ""
|
898 |
"If you still can't find an answer to your query after reading the "
|
899 |
"documentation and going through the FAQ, just fill out the support request "
|
900 |
"form below. We'll be happy to help you out."
|
901 |
msgstr ""
|
902 |
|
903 |
+
#: includes/admin-help.php:175
|
904 |
msgid "From: "
|
905 |
msgstr ""
|
906 |
|
907 |
+
#: includes/admin-help.php:180
|
908 |
msgid "Replies will be sent to this email address."
|
909 |
msgstr ""
|
910 |
|
911 |
+
#: includes/admin-help.php:189
|
912 |
msgid "Attachments"
|
913 |
msgstr ""
|
914 |
|
915 |
+
#: includes/admin-help.php:192
|
916 |
msgid "WP RSS Aggregator log file"
|
917 |
msgstr ""
|
918 |
|
919 |
+
#: includes/admin-help.php:195
|
920 |
msgid "WordPress debugging information"
|
921 |
msgstr ""
|
922 |
|
923 |
+
#: includes/admin-help.php:200
|
924 |
msgid "Send Message"
|
925 |
msgstr ""
|
926 |
|
927 |
+
#: includes/admin-help.php:213
|
928 |
msgid "Support Forums"
|
929 |
msgstr ""
|
930 |
|
931 |
+
#: includes/admin-help.php:216
|
932 |
#, php-format
|
933 |
msgid ""
|
934 |
"Users of the free version of WP RSS Aggregator can ask questions on the <a "
|
935 |
"href=\"%s\">support forum</a>."
|
936 |
msgstr ""
|
937 |
|
938 |
+
#: includes/admin-help.php:252
|
939 |
#, php-format
|
940 |
msgid ""
|
941 |
"There was an error sending the form. Please use the <a href=\"%s\" target="
|
942 |
"\"_blank\">contact form on our site.</a>"
|
943 |
msgstr ""
|
944 |
|
945 |
+
#: includes/admin-help.php:282
|
946 |
#, php-format
|
947 |
msgid ""
|
948 |
"Please fill out all the fields in the form, including the <strong>%s</"
|
949 |
"strong> field."
|
950 |
msgstr ""
|
951 |
|
952 |
+
#: includes/admin-help.php:290
|
953 |
msgid "Please enter a valid email address."
|
954 |
msgstr ""
|
955 |
|
956 |
+
#: includes/admin-help.php:1077
|
957 |
msgid ""
|
958 |
"Could not enqueue tooltip content: the queue method is not a valid callable."
|
959 |
msgstr ""
|
962 |
msgid "Welcome to WP RSS Aggregator"
|
963 |
msgstr ""
|
964 |
|
965 |
+
#: includes/admin-intro-page.php:95
|
966 |
#, php-format
|
967 |
msgid "Missing intro step param \"%s\""
|
968 |
msgstr ""
|
969 |
|
970 |
+
#: includes/admin-intro-page.php:122
|
971 |
msgid "Missing feed URL parameter"
|
972 |
msgstr ""
|
973 |
|
974 |
+
#: includes/admin-intro-page.php:127
|
975 |
msgid "The given feed URL is invalid"
|
976 |
msgstr ""
|
977 |
|
978 |
+
#: includes/admin-intro-page.php:198
|
979 |
msgid "Failed to retrieve items"
|
980 |
msgstr ""
|
981 |
|
982 |
+
#: includes/admin-intro-page.php:281
|
983 |
#, php-format
|
984 |
msgid "Failed to import the feed source \"%s\" with URL \"%s\""
|
985 |
msgstr ""
|
986 |
|
987 |
+
#: includes/admin-intro-page.php:375
|
988 |
msgctxt "default name of shortcode page"
|
989 |
msgid "Feeds"
|
990 |
msgstr ""
|
1018 |
msgid "Limit"
|
1019 |
msgstr ""
|
1020 |
|
1021 |
+
#: includes/admin-metaboxes.php:107 includes/admin-options.php:146
|
1022 |
+
msgid "Unique titles only"
|
1023 |
msgstr ""
|
1024 |
|
1025 |
+
#: includes/admin-metaboxes.php:118
|
1026 |
+
msgid "Link to enclosure"
|
1027 |
msgstr ""
|
1028 |
|
1029 |
+
#: includes/admin-metaboxes.php:125 includes/admin-options-legacy.php:70
|
1030 |
msgid "Link source"
|
1031 |
msgstr ""
|
1032 |
|
1033 |
+
#: includes/admin-metaboxes.php:132
|
1034 |
msgid "Use source info"
|
1035 |
msgstr ""
|
1036 |
|
1037 |
+
#: includes/admin-metaboxes.php:272 includes/admin-metaboxes.php:575
|
1038 |
+
#: includes/admin-metaboxes.php:671 includes/admin-options.php:575
|
1039 |
+
#: includes/admin-options.php:704 includes/admin-options.php:811
|
1040 |
+
#: includes/feed-access.php:263 src/Modules/FeedTemplatesModule.php:390
|
1041 |
msgid "Default"
|
1042 |
msgstr ""
|
1043 |
|
1044 |
+
#: includes/admin-metaboxes.php:298
|
1045 |
msgid "Updating feed source"
|
1046 |
msgstr ""
|
1047 |
|
1048 |
+
#: includes/admin-metaboxes.php:305
|
1049 |
+
msgid "How to find an RSS feed"
|
1050 |
+
msgstr ""
|
1051 |
+
|
1052 |
+
#: includes/admin-metaboxes.php:464
|
1053 |
#, php-format
|
1054 |
msgid "Latest %1$s feed items out of %2$s available from %3$s"
|
1055 |
msgstr ""
|
1056 |
|
1057 |
+
#: includes/admin-metaboxes.php:473 includes/scripts.php:56
|
1058 |
msgid "ago"
|
1059 |
msgstr ""
|
1060 |
|
1061 |
+
#: includes/admin-metaboxes.php:475
|
1062 |
msgid "No Date"
|
1063 |
msgstr ""
|
1064 |
|
1065 |
+
#: includes/admin-metaboxes.php:497
|
1066 |
msgid ""
|
1067 |
"<strong>Invalid feed URL</strong> - Double check the feed source URL setting "
|
1068 |
"above."
|
1069 |
msgstr ""
|
1070 |
|
1071 |
+
#: includes/admin-metaboxes.php:503
|
1072 |
#, php-format
|
1073 |
msgid ""
|
1074 |
"Not sure where to find the RSS feed on a website? <a target=\"_blank\" href="
|
1075 |
+
"\"%1$s\">Click here</a> for a visual guide."
|
1076 |
msgstr ""
|
1077 |
|
1078 |
+
#: includes/admin-metaboxes.php:511
|
1079 |
msgid "No feed URL defined yet"
|
1080 |
msgstr ""
|
1081 |
|
1082 |
+
#: includes/admin-metaboxes.php:536
|
1083 |
msgid "Force the feed"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
+
#: includes/admin-metaboxes.php:570
|
1087 |
msgid "Active"
|
1088 |
msgstr ""
|
1089 |
|
1090 |
+
#: includes/admin-metaboxes.php:571
|
1091 |
msgid "Paused"
|
1092 |
msgstr ""
|
1093 |
|
1094 |
+
#: includes/admin-metaboxes.php:668
|
1095 |
msgid "Limit items by age:"
|
1096 |
msgstr ""
|
1097 |
|
1098 |
+
#: includes/admin-metaboxes.php:702
|
1099 |
msgid "Need help?"
|
1100 |
msgstr ""
|
1101 |
|
1102 |
+
#: includes/admin-metaboxes.php:704
|
1103 |
msgid "Check out the support forum"
|
1104 |
msgstr ""
|
1105 |
|
1106 |
+
#: includes/admin-metaboxes.php:707
|
1107 |
msgid "Suggest a new feature"
|
1108 |
msgstr ""
|
1109 |
|
1110 |
+
#: includes/admin-metaboxes.php:721
|
1111 |
msgid "Give it a 5 star rating on WordPress.org"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
+
#: includes/admin-metaboxes.php:737
|
1115 |
msgid "Follow WP Mayor on Twitter."
|
1116 |
msgstr ""
|
1117 |
|
1118 |
+
#: includes/admin-metaboxes.php:738
|
1119 |
msgid "Like WP Mayor on Facebook."
|
1120 |
msgstr ""
|
1121 |
|
1201 |
msgid "Options that control how the feed item's date is displayed."
|
1202 |
msgstr ""
|
1203 |
|
1204 |
+
#: includes/admin-options-legacy.php:177 includes/admin-options.php:440
|
1205 |
msgid "No limit"
|
1206 |
msgstr ""
|
1207 |
|
1208 |
#: includes/admin-options-legacy.php:215
|
1209 |
+
#: src/Modules/FeedTemplatesModule.php:534
|
1210 |
msgid "Original page link"
|
1211 |
msgstr ""
|
1212 |
|
1213 |
#: includes/admin-options-legacy.php:216
|
1214 |
+
#: src/Modules/FeedTemplatesModule.php:535
|
1215 |
msgid "Embedded video player link"
|
1216 |
msgstr ""
|
1217 |
|
1263 |
msgid "Licenses"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
+
#: includes/admin-options.php:113
|
1267 |
+
msgid "You do not have access to this page"
|
1268 |
+
msgstr ""
|
1269 |
+
|
1270 |
+
#: includes/admin-options.php:126
|
1271 |
msgid "Save Settings"
|
1272 |
msgstr ""
|
1273 |
|
1274 |
+
#: includes/admin-options.php:142
|
1275 |
msgid "Update interval"
|
1276 |
msgstr ""
|
1277 |
|
1278 |
+
#: includes/admin-options.php:150
|
1279 |
msgid "Import order"
|
1280 |
msgstr ""
|
1281 |
|
1282 |
+
#: includes/admin-options.php:154
|
1283 |
msgid "Limit items by age"
|
1284 |
msgstr ""
|
1285 |
|
1286 |
+
#: includes/admin-options.php:158
|
1287 |
msgid "Limit feed items stored per feed"
|
1288 |
msgstr ""
|
1289 |
|
1290 |
+
#: includes/admin-options.php:162
|
1291 |
msgid "Limit feed items stored"
|
1292 |
msgstr ""
|
1293 |
|
1294 |
+
#: includes/admin-options.php:166
|
1295 |
msgid "Limit feed items per import"
|
1296 |
msgstr ""
|
1297 |
|
1298 |
+
#: includes/admin-options.php:170
|
1299 |
msgid "Schedule future items"
|
1300 |
msgstr ""
|
1301 |
|
1302 |
+
#: includes/admin-options.php:177
|
1303 |
msgid "Custom feed URL"
|
1304 |
msgstr ""
|
1305 |
|
1306 |
+
#: includes/admin-options.php:181
|
1307 |
msgid "Custom feed title"
|
1308 |
msgstr ""
|
1309 |
|
1310 |
+
#: includes/admin-options.php:185
|
1311 |
msgid "Custom feed limit"
|
1312 |
msgstr ""
|
1313 |
|
1314 |
+
#: includes/admin-options.php:198
|
1315 |
+
msgid "Disable styles"
|
1316 |
msgstr ""
|
1317 |
|
1318 |
+
#: includes/admin-options.php:229 templates/admin/tools/import.twig:1
|
|
|
1319 |
msgid "Import Settings"
|
1320 |
msgstr ""
|
1321 |
|
1322 |
+
#: includes/admin-options.php:240
|
1323 |
msgid "Custom RSS Feed"
|
1324 |
msgstr ""
|
1325 |
|
1326 |
+
#: includes/admin-options.php:250
|
1327 |
msgid "Advanced Settings"
|
1328 |
msgstr ""
|
1329 |
|
1330 |
+
#: includes/admin-options.php:254
|
1331 |
msgid "Styles"
|
1332 |
msgstr ""
|
1333 |
|
1334 |
+
#: includes/admin-options.php:395
|
1335 |
msgid "Configure how WP RSS Aggregator imports RSS feed items."
|
1336 |
msgstr ""
|
1337 |
|
1338 |
+
#: includes/admin-options.php:405
|
1339 |
msgid ""
|
1340 |
"WP RSS Aggregator creates a custom RSS feed on your site that includes all "
|
1341 |
"of your imported items. Use the below options to set it up."
|
1342 |
msgstr ""
|
1343 |
|
1344 |
+
#: includes/admin-options.php:414
|
1345 |
msgid "Only change these options if you know what you are doing!"
|
1346 |
msgstr ""
|
1347 |
|
1348 |
+
#: includes/admin-options.php:423
|
1349 |
msgid ""
|
1350 |
"If you would like to disable all styles used in this plugin, tick the "
|
1351 |
"checkbox."
|
1352 |
msgstr ""
|
1353 |
|
1354 |
+
#: includes/admin-options.php:474 includes/admin-options.php:604
|
1355 |
msgid "No Limit"
|
1356 |
msgstr ""
|
1357 |
|
1358 |
+
#: includes/admin-options.php:551
|
1359 |
msgid "Open custom feed"
|
1360 |
msgstr ""
|
1361 |
|
1362 |
+
#: includes/admin-options.php:639
|
1363 |
msgid "Latest items first"
|
1364 |
msgstr ""
|
1365 |
|
1366 |
+
#: includes/admin-options.php:640
|
1367 |
msgid "Oldest items first"
|
1368 |
msgstr ""
|
1369 |
|
1370 |
+
#: includes/admin-options.php:641
|
1371 |
msgid "Original feed order"
|
1372 |
msgstr ""
|
1373 |
|
1374 |
+
#: includes/admin-options.php:666
|
1375 |
msgid "Generate Random Code"
|
1376 |
msgstr ""
|
1377 |
|
1378 |
+
#: includes/admin-options.php:671
|
1379 |
msgid ""
|
1380 |
"Enter the code to use to securely reset the plugin and deactivate it. Be "
|
1381 |
"sure to save this code somewhere safe."
|
1382 |
msgstr ""
|
1383 |
|
1384 |
+
#: includes/admin-options.php:677
|
1385 |
msgid ""
|
1386 |
"Leave this empty to disable the secure reset function.<br/>\n"
|
1387 |
" You use this code by adding any of the following to any URL on "
|
1388 |
"your site."
|
1389 |
msgstr ""
|
1390 |
|
1391 |
+
#: includes/admin-options.php:680
|
1392 |
msgid "Resets your WP RSS Aggregator settings"
|
1393 |
msgstr ""
|
1394 |
|
1395 |
+
#: includes/admin-options.php:681
|
1396 |
msgid "Deactivates WP RSS Aggregator"
|
1397 |
msgstr ""
|
1398 |
|
1399 |
+
#: includes/admin-options.php:682
|
1400 |
msgid "Does both of the above"
|
1401 |
msgstr ""
|
1402 |
|
1403 |
+
#: includes/admin-options.php:686
|
1404 |
msgid ""
|
1405 |
"Use the above actions only when absolutely necessary, or when instructed to "
|
1406 |
"by support staff."
|
1407 |
msgstr ""
|
1408 |
|
1409 |
+
#: includes/admin-options.php:702
|
1410 |
msgid "On"
|
1411 |
msgstr ""
|
1412 |
|
1413 |
+
#: includes/admin-options.php:703
|
1414 |
msgid "Off"
|
1415 |
msgstr ""
|
1416 |
|
1417 |
+
#: includes/admin-options.php:815
|
1418 |
#, php-format
|
1419 |
msgid "%s year"
|
1420 |
msgid_plural "%s years"
|
1421 |
msgstr[0] ""
|
1422 |
msgstr[1] ""
|
1423 |
|
1424 |
+
#: includes/admin-options.php:816
|
1425 |
#, php-format
|
1426 |
msgid "%s month"
|
1427 |
msgid_plural "%s months"
|
1428 |
msgstr[0] ""
|
1429 |
msgstr[1] ""
|
1430 |
|
1431 |
+
#: includes/admin-options.php:817
|
1432 |
#, php-format
|
1433 |
msgid "%s week"
|
1434 |
msgid_plural "%s weeks"
|
1435 |
msgstr[0] ""
|
1436 |
msgstr[1] ""
|
1437 |
|
1438 |
+
#: includes/admin-options.php:818
|
1439 |
#, php-format
|
1440 |
msgid "%s day"
|
1441 |
msgid_plural "%s days"
|
1442 |
msgstr[0] ""
|
1443 |
msgstr[1] ""
|
1444 |
|
1445 |
+
#: includes/admin-options.php:819
|
1446 |
#, php-format
|
1447 |
msgid "%s hour"
|
1448 |
msgid_plural "%s hours"
|
1449 |
msgstr[0] ""
|
1450 |
msgstr[1] ""
|
1451 |
|
1452 |
+
#: includes/admin-options.php:820
|
1453 |
#, php-format
|
1454 |
msgid "%s minute"
|
1455 |
msgid_plural "%s minutes"
|
1456 |
msgstr[0] ""
|
1457 |
msgstr[1] ""
|
1458 |
|
1459 |
+
#: includes/admin-options.php:821
|
1460 |
#, php-format
|
1461 |
msgid "%s second"
|
1462 |
msgid_plural "%s seconds"
|
1463 |
msgstr[0] ""
|
1464 |
msgstr[1] ""
|
1465 |
|
1466 |
+
#: includes/admin-options.php:826
|
1467 |
msgid "now"
|
1468 |
msgstr ""
|
1469 |
|
1581 |
msgid "Certificate path"
|
1582 |
msgstr ""
|
1583 |
|
1584 |
+
#: includes/feed-access.php:206 includes/feed-access.php:231
|
1585 |
msgid "Feed request useragent"
|
1586 |
msgstr ""
|
1587 |
|
1589 |
msgid "Enable feed cache"
|
1590 |
msgstr ""
|
1591 |
|
|
|
|
|
|
|
|
|
1592 |
#: includes/feed-access.php:232
|
1593 |
msgid "Leave blank to inherit general setting"
|
1594 |
msgstr ""
|
1611 |
"the blacklist"
|
1612 |
msgstr ""
|
1613 |
|
1614 |
+
#: includes/feed-importing.php:383
|
1615 |
#, php-format
|
1616 |
msgid "Failed to fetch the RSS feed. Error: %s"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
+
#: includes/feed-importing.php:830
|
1620 |
#, php-format
|
1621 |
msgid "The importing process failed after %d seconds with the message: \"%s\""
|
1622 |
msgstr ""
|
1623 |
|
1624 |
+
#: includes/feed-processing.php:471
|
1625 |
msgid "The plugin failed to schedule a fetch for this feed. Please try again."
|
1626 |
msgstr ""
|
1627 |
|
2066 |
msgid "No Templates Found In Trash"
|
2067 |
msgstr ""
|
2068 |
|
2069 |
+
#: src/Modules/FeedTemplatesModule.php:436
|
2070 |
#: src/Templates/Feeds/Types/ListTemplateType.php:99
|
2071 |
msgid "Source:"
|
2072 |
msgstr ""
|
2073 |
|
2074 |
+
#: src/Modules/FeedTemplatesModule.php:439
|
2075 |
#: src/Templates/Feeds/Types/ListTemplateType.php:111
|
2076 |
msgid "By"
|
2077 |
msgstr ""
|
2078 |
|
2079 |
+
#: src/Modules/FeedTemplatesModule.php:441
|
2080 |
#: src/Templates/Feeds/Types/ListTemplateType.php:119
|
2081 |
msgid "Published on:"
|
2082 |
msgstr ""
|
2083 |
|
2084 |
+
#: src/Modules/FeedTemplatesModule.php:463
|
2085 |
msgid ""
|
2086 |
"The maximum number of feed items to display when using the shortcode. This "
|
2087 |
"enables pagination if set to a number smaller than the number of items to be "
|
2088 |
"displayed."
|
2089 |
msgstr ""
|
2090 |
|
2091 |
+
#: src/Modules/FeedTemplatesModule.php:464
|
2092 |
msgid ""
|
2093 |
"Set the maximum number of characters to show for feed item titles.<hr/"
|
2094 |
"><em>Leave empty for no limit.</em>"
|
2095 |
msgstr ""
|
2096 |
|
2097 |
+
#: src/Modules/FeedTemplatesModule.php:466
|
2098 |
msgid "Enable this option to show the pagination beneath feed items."
|
2099 |
msgstr ""
|
2100 |
|
2101 |
+
#: src/Modules/FeedTemplatesModule.php:467
|
2102 |
msgid ""
|
2103 |
"The type of pagination to use when showing feed items on multiple pages. The "
|
2104 |
"first shows two links, \"Older\" and \"Newer\", which allow you to navigate "
|
2106 |
"links for the next and previous pages."
|
2107 |
msgstr ""
|
2108 |
|
2109 |
+
#: src/Modules/FeedTemplatesModule.php:472
|
2110 |
msgid ""
|
2111 |
"Enter the text that you want to show before the author name. A space is "
|
2112 |
"automatically added between this text and the author name."
|
2113 |
msgstr ""
|
2114 |
|
2115 |
+
#: src/Modules/FeedTemplatesModule.php:476
|
2116 |
msgid ""
|
2117 |
"Enable this option to show the elapsed time from the feed item's date and "
|
2118 |
"time to the present time. <em>Eg. 2 hours ago</em>"
|
2119 |
msgstr ""
|
2120 |
|
2121 |
+
#: src/Modules/FeedTemplatesModule.php:478
|
2122 |
msgid ""
|
2123 |
"Enable this option to set all links displayed as \"NoFollow\".<hr/>\"Nofollow"
|
2124 |
"\" provides a way to tell search engines to <em>not</em> follow certain "
|
2125 |
"links, such as links to feed items in this case."
|
2126 |
msgstr ""
|
2127 |
|
2128 |
+
#: src/Modules/FeedTemplatesModule.php:479
|
2129 |
msgid ""
|
2130 |
"Tick this box to have feed items link to their embedded content, if they "
|
2131 |
"have any. This works especially well when links are set to <em>\"Open in a "
|
2132 |
"lightbox\"</em>."
|
2133 |
msgstr ""
|
2134 |
|
2135 |
+
#: src/Modules/FeedTemplatesModule.php:480
|
2136 |
msgid "Enable this option to show bullets next to feed items."
|
2137 |
msgstr ""
|
2138 |
|
2139 |
+
#: src/Modules/FeedTemplatesModule.php:481
|
2140 |
msgid "The bullet type to use for feed items."
|
2141 |
msgstr ""
|
2142 |
|
2143 |
+
#: src/Modules/FeedTemplatesModule.php:482
|
2144 |
msgid ""
|
2145 |
"You can add your own HTML class name to the template output. This lets you "
|
2146 |
"customize your template further using custom CSS styling or custom JS "
|
2147 |
"functionality."
|
2148 |
msgstr ""
|
2149 |
|
2150 |
+
#: src/Modules/FeedTemplatesModule.php:494
|
2151 |
#: src/Templates/Feeds/Types/ListTemplateType.php:29
|
2152 |
msgid "List"
|
2153 |
msgstr ""
|
2154 |
|
2155 |
+
#: src/Modules/FeedTemplatesModule.php:521
|
2156 |
msgid "Open in same tab/window"
|
2157 |
msgstr ""
|
2158 |
|
2159 |
+
#: src/Modules/FeedTemplatesModule.php:522
|
2160 |
msgid "Open in a new tab"
|
2161 |
msgstr ""
|
2162 |
|
2163 |
+
#: src/Modules/FeedTemplatesModule.php:523
|
2164 |
msgid "Open in a lightbox"
|
2165 |
msgstr ""
|
2166 |
|
2167 |
+
#: src/Modules/FeedTemplatesModule.php:526
|
2168 |
msgid "Older/Newer"
|
2169 |
msgstr ""
|
2170 |
|
2171 |
+
#: src/Modules/FeedTemplatesModule.php:527
|
2172 |
msgid "Numbered"
|
2173 |
msgstr ""
|
2174 |
|
2175 |
+
#: src/Modules/FeedTemplatesModule.php:530
|
2176 |
msgid "Bullets"
|
2177 |
msgstr ""
|
2178 |
|
2179 |
+
#: src/Modules/FeedTemplatesModule.php:531
|
2180 |
msgid "Numbers"
|
2181 |
msgstr ""
|
2182 |
|
2184 |
msgid "Image"
|
2185 |
msgstr ""
|
2186 |
|
2187 |
+
#: src/Modules/ImagesModule.php:191 src/Modules/ImagesModule.php:289
|
2188 |
msgid "Images"
|
2189 |
msgstr ""
|
2190 |
|
2191 |
+
#: src/Modules/ImagesModule.php:271
|
2192 |
msgid ""
|
2193 |
"This option allows you to select which feed item image to use as the "
|
2194 |
"featured image. Automatic best image detection will attempt to find the "
|
2335 |
msgid "Template \"%s\" does not exist"
|
2336 |
msgstr ""
|
2337 |
|
2338 |
+
#: src/Templates/Feeds/MasterFeedsTemplate.php:247
|
2339 |
#: src/Templates/Feeds/TemplateTypeTemplate.php:179
|
2340 |
msgid "The \"items\" must be a collection instance"
|
2341 |
msgstr ""
|
2342 |
|
2343 |
+
#: src/Templates/Feeds/MasterFeedsTemplate.php:273
|
2344 |
msgid ""
|
2345 |
+
"Template \"{0}\" does not exist or could not be loaded. The default template "
|
2346 |
+
"was used instead."
|
2347 |
msgstr ""
|
2348 |
|
2349 |
#: src/Templates/Feeds/Types/AbstractFeedTemplateType.php:85
|
2363 |
msgid "Could not render twig template: "
|
2364 |
msgstr ""
|
2365 |
|
2366 |
+
#: src/Twig/Extensions/Date/TwigDateTranslator.php:63
|
2367 |
+
msgid "day"
|
2368 |
+
msgid_plural "days"
|
2369 |
+
msgstr[0] ""
|
2370 |
+
msgstr[1] ""
|
2371 |
+
|
2372 |
+
#: src/Twig/Extensions/Date/TwigDateTranslator.php:66
|
2373 |
+
msgid "hour"
|
2374 |
+
msgid_plural "hours"
|
2375 |
+
msgstr[0] ""
|
2376 |
+
msgstr[1] ""
|
2377 |
+
|
2378 |
+
#: src/Twig/Extensions/Date/TwigDateTranslator.php:69
|
2379 |
+
msgid "minute"
|
2380 |
+
msgid_plural "minutes"
|
2381 |
+
msgstr[0] ""
|
2382 |
+
msgstr[1] ""
|
2383 |
+
|
2384 |
+
#: src/Twig/Extensions/Date/TwigDateTranslator.php:72
|
2385 |
+
msgid "second"
|
2386 |
+
msgid_plural "seconds"
|
2387 |
+
msgstr[0] ""
|
2388 |
+
msgstr[1] ""
|
2389 |
+
|
2390 |
+
#: src/Twig/Extensions/Date/TwigDateTranslator.php:75
|
2391 |
+
msgid "month"
|
2392 |
+
msgid_plural "months"
|
2393 |
+
msgstr[0] ""
|
2394 |
+
msgstr[1] ""
|
2395 |
+
|
2396 |
+
#: src/Twig/Extensions/Date/TwigDateTranslator.php:78
|
2397 |
+
msgid "year"
|
2398 |
+
msgid_plural "years"
|
2399 |
+
msgstr[0] ""
|
2400 |
+
msgstr[1] ""
|
2401 |
+
|
2402 |
+
#: src/Twig/Extensions/Date/TwigDateTranslator.php:87
|
2403 |
+
msgctxt "Format for past feed item dates, example: \"5 hours ago\""
|
2404 |
+
msgid "{number} {unit} ago"
|
2405 |
+
msgid_plural "{number} {unit} ago"
|
2406 |
+
msgstr[0] ""
|
2407 |
+
msgstr[1] ""
|
2408 |
+
|
2409 |
+
#: src/Twig/Extensions/Date/TwigDateTranslator.php:88
|
2410 |
+
msgctxt "Format for future feed item dates, example: \"in 2 days\""
|
2411 |
+
msgid "in {number} {unit}"
|
2412 |
+
msgid_plural "in {number} {unit}"
|
2413 |
+
msgstr[0] ""
|
2414 |
+
msgstr[1] "in {number} {unit}"
|
2415 |
+
|
2416 |
#: src/Ui/BlacklistTable.php:52
|
2417 |
msgid "There are no blacklisted items"
|
2418 |
msgstr ""
|
2425 |
msgid "Delete"
|
2426 |
msgstr ""
|
2427 |
|
2428 |
+
#: wp-rss-aggregator.php:467
|
2429 |
msgid "Attempted to load an invalid WP RSS Aggregator module"
|
2430 |
msgstr ""
|
2431 |
|
2432 |
+
#: wp-rss-aggregator.php:488
|
2433 |
msgid ""
|
2434 |
"<b>WP RSS Aggregator</b> has encountered an error. If this problem persists, "
|
2435 |
"kindly contact customer support and provide the following details:"
|
2436 |
msgstr ""
|
2437 |
|
2438 |
+
#: wp-rss-aggregator.php:521
|
2439 |
msgid "Deactivate WP RSS Aggregator and its addons"
|
2440 |
msgstr ""
|
2441 |
|
2442 |
+
#: wp-rss-aggregator.php:522
|
2443 |
msgid "Deactivate WP RSS Aggregator"
|
2444 |
msgstr ""
|
2445 |
|
2446 |
+
#: wp-rss-aggregator.php:530
|
2447 |
msgid ""
|
2448 |
"<b>WP RSS Aggregator</b> has encountered a critical error. The safest course "
|
2449 |
"of action is to deactivate the plugin and any of its add-ons on this site "
|
2453 |
"how it happened."
|
2454 |
msgstr ""
|
2455 |
|
2456 |
+
#: wp-rss-aggregator.php:539
|
2457 |
msgid "WP RSS Aggregator Error"
|
2458 |
msgstr ""
|
2459 |
|
2460 |
+
#: wp-rss-aggregator.php:563
|
2461 |
msgid "Click to show error details"
|
2462 |
msgstr ""
|
2463 |
|
2464 |
+
#: wp-rss-aggregator.php:566
|
2465 |
msgid "Error Message:"
|
2466 |
msgstr ""
|
2467 |
|
2468 |
+
#: wp-rss-aggregator.php:570
|
2469 |
msgid "Occurred at:"
|
2470 |
msgstr ""
|
2471 |
|
2472 |
+
#: wp-rss-aggregator.php:574
|
2473 |
msgid "Stack trace:"
|
2474 |
msgstr ""
|
2475 |
|
2476 |
+
#: wp-rss-aggregator.php:693 wp-rss-aggregator.php:787
|
2477 |
msgid ""
|
2478 |
"As of version 4.13, WP RSS Aggregator will stop supporting PHP 5.3 and will "
|
2479 |
"require PHP 5.4 or later. Kindly contact your site's hosting provider for "
|
2480 |
"PHP version update options."
|
2481 |
msgstr ""
|
2482 |
|
2483 |
+
#: wp-rss-aggregator.php:715
|
2484 |
#, php-format
|
2485 |
msgid ""
|
2486 |
"<p><strong>%2$s requires WordPress to be of version %1$s or higher.</"
|
2489 |
"services.</p>"
|
2490 |
msgstr ""
|
2491 |
|
2492 |
+
#: wp-rss-aggregator.php:737
|
2493 |
msgid "WP RSS Aggregator cannot be activated."
|
2494 |
msgstr ""
|
2495 |
|
2496 |
+
#: wp-rss-aggregator.php:738
|
2497 |
msgid "WP RSS Aggregator has been deactivated."
|
2498 |
msgstr ""
|
2499 |
|
2500 |
+
#: wp-rss-aggregator.php:743
|
2501 |
msgctxt ""
|
2502 |
"Used like \"Kindly contact your hosting provider or contact support for more "
|
2503 |
"information.\""
|
2504 |
msgid "contact support"
|
2505 |
msgstr ""
|
2506 |
|
2507 |
+
#: wp-rss-aggregator.php:750
|
2508 |
#, php-format
|
2509 |
msgid ""
|
2510 |
"The plugin requires version %s or later and your site's PHP version is %s."
|
2511 |
msgstr ""
|
2512 |
|
2513 |
+
#: wp-rss-aggregator.php:756
|
2514 |
#, php-format
|
2515 |
msgctxt "the \"%s\" part is a link with text = \"contact support\""
|
2516 |
msgid ""
|
2518 |
"more information."
|
2519 |
msgstr ""
|
2520 |
|
2521 |
+
#: wp-rss-aggregator.php:765
|
2522 |
msgid "WP RSS Aggregator - PHP version error"
|
2523 |
msgstr ""
|
2524 |
|
2525 |
+
#: wp-rss-aggregator.php:805
|
2526 |
#, php-format
|
2527 |
msgid "%2$s requires WordPress version %1$s or higher."
|
2528 |
msgstr ""
|
2529 |
|
2530 |
+
#: wp-rss-aggregator.php:1014
|
2531 |
msgid ""
|
2532 |
"The Excerpts & Thumbnails addon has been discontinued in favor of the "
|
2533 |
"Templates addon."
|
2534 |
msgstr ""
|
2535 |
|
2536 |
+
#: wp-rss-aggregator.php:1015
|
2537 |
msgid "Click here to learn more."
|
2538 |
msgstr ""
|
2539 |
|
2687 |
msgstr ""
|
2688 |
|
2689 |
#: templates/admin/tools/bulk_add.twig:14
|
2690 |
+
msgid "Add feeds"
|
2691 |
msgstr ""
|
2692 |
|
2693 |
#: templates/admin/tools/crons.twig:20
|
2726 |
msgid "Time"
|
2727 |
msgstr ""
|
2728 |
|
2729 |
+
#: templates/admin/tools/export.twig:1
|
2730 |
msgid "Export Settings"
|
2731 |
msgstr ""
|
2732 |
|
2736 |
"its add-ons."
|
2737 |
msgstr ""
|
2738 |
|
2739 |
+
#: templates/admin/tools/export.twig:13
|
2740 |
+
msgid "Export settings"
|
2741 |
+
msgstr ""
|
2742 |
+
|
2743 |
#: templates/admin/tools/import.twig:2
|
2744 |
msgid ""
|
2745 |
"Upload an exported settings file to import your settings for WP RSS "
|
2746 |
"Aggregator and its add-ons"
|
2747 |
msgstr ""
|
2748 |
|
2749 |
+
#: templates/admin/tools/import.twig:13
|
2750 |
+
msgid "Import settings"
|
2751 |
+
msgstr ""
|
2752 |
+
|
2753 |
#: templates/admin/tools/logs.twig:2
|
2754 |
msgid "Debug Log"
|
2755 |
msgstr ""
|
2823 |
msgstr ""
|
2824 |
|
2825 |
#: templates/admin/tools/logs.twig:113
|
2826 |
+
msgid "Save log options"
|
2827 |
msgstr ""
|
2828 |
|
2829 |
+
#: templates/admin/tools/reset.twig:1
|
2830 |
+
msgid "Delete All Imported Items"
|
2831 |
msgstr ""
|
2832 |
|
2833 |
#: templates/admin/tools/reset.twig:2
|
2840 |
"feeds, meaning that you may be unable to re-import them later."
|
2841 |
msgstr ""
|
2842 |
|
2843 |
+
#: templates/admin/tools/reset.twig:14
|
2844 |
+
msgid "Delete all imported items"
|
2845 |
+
msgstr ""
|
2846 |
+
|
2847 |
#: templates/admin/tools/reset.twig:18
|
2848 |
msgid "Restore Default Settings"
|
2849 |
msgstr ""
|
2859 |
msgstr ""
|
2860 |
|
2861 |
#: templates/admin/tools/reset.twig:30
|
2862 |
+
msgid "Reset settings to default"
|
2863 |
msgstr ""
|
2864 |
|
2865 |
#: templates/admin/tools/sys_info.twig:17
|
readme.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: RSS import, RSS aggregator, feed import, content curation, feed to post, n
|
|
5 |
Requires at least: 4.0 or higher
|
6 |
Tested up to: 5.4
|
7 |
Requires PHP: 5.4
|
8 |
-
Stable tag: 4.17.
|
9 |
License: GPLv3
|
10 |
|
11 |
The most popular RSS aggregator for WordPress. Build a news aggregator with content from unlimited sources within minutes. Simple, robust & powerful.
|
@@ -253,6 +253,22 @@ Our complete Knowledge Base with FAQs can be found [here](https://kb.wprssaggreg
|
|
253 |
|
254 |
== Changelog ==
|
255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
= 4.17.5 (2020-04-22) =
|
257 |
**Changed**
|
258 |
- Now showing a case study of a site using the Pro Plan in the on-boarding wizard.
|
5 |
Requires at least: 4.0 or higher
|
6 |
Tested up to: 5.4
|
7 |
Requires PHP: 5.4
|
8 |
+
Stable tag: 4.17.6
|
9 |
License: GPLv3
|
10 |
|
11 |
The most popular RSS aggregator for WordPress. Build a news aggregator with content from unlimited sources within minutes. Simple, robust & powerful.
|
253 |
|
254 |
== Changelog ==
|
255 |
|
256 |
+
= 4.17.6 (2020-07-29) =
|
257 |
+
**Added**
|
258 |
+
- A link in the New/Edit Feed Source page on how to find an RSS feed.
|
259 |
+
|
260 |
+
**Changed**
|
261 |
+
- The "Force feed" option turns off SSL verification.
|
262 |
+
- Improved wording on the Help page.
|
263 |
+
- Dates in templates can now be translated.
|
264 |
+
- The link to the article on how to find an RSS feed now links to an article from the plugin's knowledge base.
|
265 |
+
- The "Unique Titles" feed option can now be set to default to the global setting.
|
266 |
+
|
267 |
+
**Fixed**
|
268 |
+
- Rewrite rules would always get flushed when plugins tamper with them, such as Polylang Pro.
|
269 |
+
- The "Delete All Imported Items" reset option was deleting all posts on the site.
|
270 |
+
- Image options would not show up when using Feed to Post to import Feed Items.
|
271 |
+
|
272 |
= 4.17.5 (2020-04-22) =
|
273 |
**Changed**
|
274 |
- Now showing a case study of a site using the Pro Plan in the on-boarding wizard.
|
src/Handlers/CustomFeed/RegisterCustomFeedHandler.php
CHANGED
@@ -103,13 +103,8 @@ class RegisterCustomFeedHandler
|
|
103 |
|
104 |
// If there are existing rules
|
105 |
if (is_array($rules)) {
|
106 |
-
|
107 |
-
|
108 |
-
$feeds = array_keys($rules, 'index.php?&feed=$matches[1]');
|
109 |
-
|
110 |
-
// Check if the rewrite rule for the custom feed is already registered
|
111 |
-
foreach ($feeds as $feed) {
|
112 |
-
if (strpos($feed, $customFeedUrl) !== false) {
|
113 |
return true;
|
114 |
}
|
115 |
}
|
103 |
|
104 |
// If there are existing rules
|
105 |
if (is_array($rules)) {
|
106 |
+
foreach ($rules as $key => $value) {
|
107 |
+
if (strpos($key, $customFeedUrl) !== false && preg_match('/[?&]feed=\$matches\[\d]/', $value)) {
|
|
|
|
|
|
|
|
|
|
|
108 |
return true;
|
109 |
}
|
110 |
}
|
src/Modules/FeedSourcesModule.php
CHANGED
@@ -117,7 +117,7 @@ class FeedSourcesModule implements ModuleInterface
|
|
117 |
'url' => '',
|
118 |
'import_source' => false,
|
119 |
'import_limit' => 0,
|
120 |
-
'unique_titles_only' =>
|
121 |
'def_ft_image' => null,
|
122 |
'import_ft_images' => '',
|
123 |
'download_images' => false,
|
117 |
'url' => '',
|
118 |
'import_source' => false,
|
119 |
'import_limit' => 0,
|
120 |
+
'unique_titles_only' => wprss_get_general_setting('unique_titles'),
|
121 |
'def_ft_image' => null,
|
122 |
'import_ft_images' => '',
|
123 |
'download_images' => false,
|
src/Modules/ImagesModule.php
CHANGED
@@ -360,10 +360,8 @@ class ImagesModule implements ModuleInterface
|
|
360 |
|
361 |
// Check if the images UI is enabled
|
362 |
if ($c->get('wpra/images/ui_enabled')) {
|
363 |
-
// The handler that registers the images meta box
|
364 |
-
|
365 |
-
add_action('add_meta_boxes', $c->get('wpra/images/feeds/meta_box/handler/register'));
|
366 |
-
}
|
367 |
|
368 |
// Show the developer images meta box for feed items, if the developer filter is enabled
|
369 |
if (wpra_is_dev_mode()) {
|
360 |
|
361 |
// Check if the images UI is enabled
|
362 |
if ($c->get('wpra/images/ui_enabled')) {
|
363 |
+
// The handler that registers the images meta box
|
364 |
+
add_action('add_meta_boxes', $c->get('wpra/images/feeds/meta_box/handler/register'));
|
|
|
|
|
365 |
|
366 |
// Show the developer images meta box for feed items, if the developer filter is enabled
|
367 |
if (wpra_is_dev_mode()) {
|
src/Modules/TwigModule.php
CHANGED
@@ -4,8 +4,10 @@ namespace RebelCode\Wpra\Core\Modules;
|
|
4 |
|
5 |
use Psr\Container\ContainerInterface;
|
6 |
use RebelCode\Wpra\Core\Data\Collections\TwigTemplateCollection;
|
|
|
7 |
use RebelCode\Wpra\Core\Twig\Extensions\I18n\WpI18nExtension;
|
8 |
use RebelCode\Wpra\Core\Twig\Extensions\WpraExtension;
|
|
|
9 |
use Twig\Environment as TwigEnvironment;
|
10 |
use Twig\Extension\CoreExtension;
|
11 |
use Twig\Extension\DebugExtension;
|
@@ -128,7 +130,7 @@ class TwigModule implements ModuleInterface
|
|
128 |
* @since 4.13
|
129 |
*/
|
130 |
'wpra/twig/extensions/date' => function (ContainerInterface $c) {
|
131 |
-
return new DateExtension();
|
132 |
},
|
133 |
/*
|
134 |
* The text extension for Twig.
|
4 |
|
5 |
use Psr\Container\ContainerInterface;
|
6 |
use RebelCode\Wpra\Core\Data\Collections\TwigTemplateCollection;
|
7 |
+
use RebelCode\Wpra\Core\Twig\Extensions\Date\TwigDateTranslator;
|
8 |
use RebelCode\Wpra\Core\Twig\Extensions\I18n\WpI18nExtension;
|
9 |
use RebelCode\Wpra\Core\Twig\Extensions\WpraExtension;
|
10 |
+
use Symfony\Component\Translation\TranslatorInterface;
|
11 |
use Twig\Environment as TwigEnvironment;
|
12 |
use Twig\Extension\CoreExtension;
|
13 |
use Twig\Extension\DebugExtension;
|
130 |
* @since 4.13
|
131 |
*/
|
132 |
'wpra/twig/extensions/date' => function (ContainerInterface $c) {
|
133 |
+
return new DateExtension(new TwigDateTranslator());
|
134 |
},
|
135 |
/*
|
136 |
* The text extension for Twig.
|
src/Twig/Extensions/Date/TwigDateTranslator.php
ADDED
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
namespace RebelCode\Wpra\Core\Twig\Extensions\Date;
|
4 |
+
|
5 |
+
use Symfony\Component\Translation\TranslatorInterface;
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Translator for Twig dates.
|
9 |
+
*
|
10 |
+
* @since [*next-version*]
|
11 |
+
*/
|
12 |
+
class TwigDateTranslator implements TranslatorInterface
|
13 |
+
{
|
14 |
+
/**
|
15 |
+
* The prefix of the $id parameter of the {@link transChoice} method.
|
16 |
+
*/
|
17 |
+
const ID_PREFIX = "diff.";
|
18 |
+
/**
|
19 |
+
* The length of the {@link ID_PREFIX} constant.
|
20 |
+
*
|
21 |
+
* This is pre-calculated for performance reasons to avoid recalculating for every date that needs translation.
|
22 |
+
*/
|
23 |
+
const ID_PREFIX_LEN = 5;
|
24 |
+
|
25 |
+
/**
|
26 |
+
* @inheritDoc
|
27 |
+
*
|
28 |
+
* @since [*next-version*]
|
29 |
+
*/
|
30 |
+
public function trans($id, array $parameters = [], $domain = null, $locale = null)
|
31 |
+
{
|
32 |
+
return $id . "TRANS";
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @inheritDoc
|
37 |
+
*
|
38 |
+
* @since [*next-version*]
|
39 |
+
*/
|
40 |
+
public function transChoice($id, $number, array $parameters = [], $domain = null, $locale = null)
|
41 |
+
{
|
42 |
+
if (stripos($id, static::ID_PREFIX) !== 0) {
|
43 |
+
return $id;
|
44 |
+
}
|
45 |
+
|
46 |
+
// Get the part after the prefix
|
47 |
+
$suffix = substr($id, static::ID_PREFIX_LEN);
|
48 |
+
|
49 |
+
// Get the parts
|
50 |
+
$parts = explode('.', $suffix);
|
51 |
+
if (count($parts) < 2) {
|
52 |
+
return $id;
|
53 |
+
}
|
54 |
+
|
55 |
+
// The first part is the type ("ago" or "in")
|
56 |
+
// The second part is the date unit
|
57 |
+
$type = strtolower($parts[0]);
|
58 |
+
$unit = strtolower($parts[1]);
|
59 |
+
|
60 |
+
// Translate the unit
|
61 |
+
switch ($unit) {
|
62 |
+
case 'day':
|
63 |
+
$unit = _n('day', 'days', $number, 'wprss');
|
64 |
+
break;
|
65 |
+
case 'hour':
|
66 |
+
$unit = _n('hour', 'hours', $number, 'wprss');
|
67 |
+
break;
|
68 |
+
case 'minute':
|
69 |
+
$unit = _n('minute', 'minutes', $number, 'wprss');
|
70 |
+
break;
|
71 |
+
case 'second':
|
72 |
+
$unit = _n('second', 'seconds', $number, 'wprss');
|
73 |
+
break;
|
74 |
+
case 'month':
|
75 |
+
$unit = _n('month', 'months', $number, 'wprss');
|
76 |
+
break;
|
77 |
+
case 'year':
|
78 |
+
$unit = _n('year', 'years', $number, 'wprss');
|
79 |
+
break;
|
80 |
+
default:
|
81 |
+
return $id;
|
82 |
+
}
|
83 |
+
|
84 |
+
// Prepare the format. These strings can and should be made available for translation. The tokens are expected
|
85 |
+
// to still be present after translation.
|
86 |
+
$format = ($type === 'ago')
|
87 |
+
? _nx('{number} {unit} ago', '{number} {unit} ago', $number, 'Format for past feed item dates, example: "5 hours ago"', 'wprss')
|
88 |
+
: _nx('in {number} {unit}', 'in {number} {unit}', $number, 'Format for future feed item dates, example: "in 2 days"', 'wprss');
|
89 |
+
|
90 |
+
// Replace tokens in the format and return the resulting translating and interpolated string
|
91 |
+
return strtr($format, [
|
92 |
+
'{number}' => $number,
|
93 |
+
'{unit}' => $unit,
|
94 |
+
]);
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* @inheritDoc
|
99 |
+
*
|
100 |
+
* @since [*next-version*]
|
101 |
+
*/
|
102 |
+
public function setLocale($locale)
|
103 |
+
{
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* @inheritDoc
|
108 |
+
*
|
109 |
+
* @since [*next-version*]
|
110 |
+
*/
|
111 |
+
public function getLocale()
|
112 |
+
{
|
113 |
+
return get_locale();
|
114 |
+
}
|
115 |
+
}
|
templates/admin/tools/bulk_add.twig
CHANGED
@@ -11,6 +11,6 @@
|
|
11 |
<textarea rows="6" cols="80" form="bulk-add-form" name="wpra_bulk_feeds" autofocus></textarea>
|
12 |
|
13 |
<p>
|
14 |
-
<input type="submit" class="button-secondary" name="wpra_bulk_add" value="{{ "Add
|
15 |
</p>
|
16 |
</form>
|
11 |
<textarea rows="6" cols="80" form="bulk-add-form" name="wpra_bulk_feeds" autofocus></textarea>
|
12 |
|
13 |
<p>
|
14 |
+
<input type="submit" class="button-secondary" name="wpra_bulk_add" value="{{ "Add feeds"|trans|e('html_attr') }}" />
|
15 |
</p>
|
16 |
</form>
|
templates/admin/tools/export.twig
CHANGED
@@ -10,7 +10,7 @@
|
|
10 |
|
11 |
<button type="submit" class="button button-secondary">
|
12 |
<i class="fa fa-download"></i>
|
13 |
-
{% trans "Export
|
14 |
</button>
|
15 |
</p>
|
16 |
</form>
|
10 |
|
11 |
<button type="submit" class="button button-secondary">
|
12 |
<i class="fa fa-download"></i>
|
13 |
+
{% trans "Export settings" %}
|
14 |
</button>
|
15 |
</p>
|
16 |
</form>
|
templates/admin/tools/import.twig
CHANGED
@@ -10,7 +10,7 @@
|
|
10 |
|
11 |
<button type="submit" class="button button-secondary">
|
12 |
<i class="fa fa-upload"></i>
|
13 |
-
{% trans "Import
|
14 |
</button>
|
15 |
</p>
|
16 |
</form>
|
10 |
|
11 |
<button type="submit" class="button button-secondary">
|
12 |
<i class="fa fa-upload"></i>
|
13 |
+
{% trans "Import settings" %}
|
14 |
</button>
|
15 |
</p>
|
16 |
</form>
|
templates/admin/tools/logs.twig
CHANGED
@@ -110,7 +110,7 @@
|
|
110 |
|
111 |
<div class="wpra-submit-wrap">
|
112 |
<button type="submit" name="wpra-log-options" class="button" value="1">
|
113 |
-
{% trans "Save
|
114 |
</button>
|
115 |
</div>
|
116 |
</form>
|
110 |
|
111 |
<div class="wpra-submit-wrap">
|
112 |
<button type="submit" name="wpra-log-options" class="button" value="1">
|
113 |
+
{% trans "Save log options" %}
|
114 |
</button>
|
115 |
</div>
|
116 |
</form>
|
templates/admin/tools/reset.twig
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<h3>{% trans "Delete
|
2 |
<p>{% trans "Click the button below to delete all imported items and posts." %}</p>
|
3 |
<p>
|
4 |
{% trans "Kindly note that old items may no longer be present in their respective RSS feeds, meaning that you may be unable to re-import them later." %}
|
@@ -27,6 +27,6 @@
|
|
27 |
<input type="submit"
|
28 |
class="button button-red"
|
29 |
name="wpra_reset_settings_submit"
|
30 |
-
value="{{ "Reset
|
31 |
/>
|
32 |
</form>
|
1 |
+
<h3>{% trans "Delete All Imported Items" %}</h3>
|
2 |
<p>{% trans "Click the button below to delete all imported items and posts." %}</p>
|
3 |
<p>
|
4 |
{% trans "Kindly note that old items may no longer be present in their respective RSS feeds, meaning that you may be unable to re-import them later." %}
|
27 |
<input type="submit"
|
28 |
class="button button-red"
|
29 |
name="wpra_reset_settings_submit"
|
30 |
+
value="{{ "Reset settings to default"|trans|e('html_attr') }}"
|
31 |
/>
|
32 |
</form>
|
vendor/composer/autoload_classmap.php
CHANGED
@@ -454,6 +454,7 @@ return array(
|
|
454 |
'RebelCode\\Wpra\\Core\\Templates\\Feeds\\Types\\ListTemplateType' => $baseDir . '/src/Templates/Feeds/Types/ListTemplateType.php',
|
455 |
'RebelCode\\Wpra\\Core\\Templates\\NullTemplate' => $baseDir . '/src/Templates/NullTemplate.php',
|
456 |
'RebelCode\\Wpra\\Core\\Templates\\TwigTemplate' => $baseDir . '/src/Templates/TwigTemplate.php',
|
|
|
457 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\I18nTransNode' => $baseDir . '/src/Twig/Extensions/I18n/I18nTransNode.php',
|
458 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\I18nTransTokenParser' => $baseDir . '/src/Twig/Extensions/I18n/I18nTransTokenParser.php',
|
459 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\WpI18nExtension' => $baseDir . '/src/Twig/Extensions/I18n/WpI18nExtension.php',
|
@@ -481,7 +482,60 @@ return array(
|
|
481 |
'RebelCode\\Wpra\\Core\\Wp\\PluginInfo' => $baseDir . '/src/Wp/PluginInfo.php',
|
482 |
'RebelCode\\Wpra\\Core\\Wp\\WpExtensionInterface' => $baseDir . '/src/Wp/WpExtensionInterface.php',
|
483 |
'RebelCode\\Wpra\\Core\\Wp\\WpRolesProxy' => $baseDir . '/src/Wp/WpRolesProxy.php',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
484 |
'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php',
|
|
|
485 |
'Twig\\Cache\\CacheInterface' => $vendorDir . '/twig/twig/src/Cache/CacheInterface.php',
|
486 |
'Twig\\Cache\\FilesystemCache' => $vendorDir . '/twig/twig/src/Cache/FilesystemCache.php',
|
487 |
'Twig\\Cache\\NullCache' => $vendorDir . '/twig/twig/src/Cache/NullCache.php',
|
454 |
'RebelCode\\Wpra\\Core\\Templates\\Feeds\\Types\\ListTemplateType' => $baseDir . '/src/Templates/Feeds/Types/ListTemplateType.php',
|
455 |
'RebelCode\\Wpra\\Core\\Templates\\NullTemplate' => $baseDir . '/src/Templates/NullTemplate.php',
|
456 |
'RebelCode\\Wpra\\Core\\Templates\\TwigTemplate' => $baseDir . '/src/Templates/TwigTemplate.php',
|
457 |
+
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\Date\\TwigDateTranslator' => $baseDir . '/src/Twig/Extensions/Date/TwigDateTranslator.php',
|
458 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\I18nTransNode' => $baseDir . '/src/Twig/Extensions/I18n/I18nTransNode.php',
|
459 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\I18nTransTokenParser' => $baseDir . '/src/Twig/Extensions/I18n/I18nTransTokenParser.php',
|
460 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\WpI18nExtension' => $baseDir . '/src/Twig/Extensions/I18n/WpI18nExtension.php',
|
482 |
'RebelCode\\Wpra\\Core\\Wp\\PluginInfo' => $baseDir . '/src/Wp/PluginInfo.php',
|
483 |
'RebelCode\\Wpra\\Core\\Wp\\WpExtensionInterface' => $baseDir . '/src/Wp/WpExtensionInterface.php',
|
484 |
'RebelCode\\Wpra\\Core\\Wp\\WpRolesProxy' => $baseDir . '/src/Wp/WpRolesProxy.php',
|
485 |
+
'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => $vendorDir . '/symfony/translation/Catalogue/AbstractOperation.php',
|
486 |
+
'Symfony\\Component\\Translation\\Catalogue\\DiffOperation' => $vendorDir . '/symfony/translation/Catalogue/DiffOperation.php',
|
487 |
+
'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => $vendorDir . '/symfony/translation/Catalogue/MergeOperation.php',
|
488 |
+
'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => $vendorDir . '/symfony/translation/Catalogue/OperationInterface.php',
|
489 |
+
'Symfony\\Component\\Translation\\Catalogue\\TargetOperation' => $vendorDir . '/symfony/translation/Catalogue/TargetOperation.php',
|
490 |
+
'Symfony\\Component\\Translation\\DataCollectorTranslator' => $vendorDir . '/symfony/translation/DataCollectorTranslator.php',
|
491 |
+
'Symfony\\Component\\Translation\\DataCollector\\TranslationDataCollector' => $vendorDir . '/symfony/translation/DataCollector/TranslationDataCollector.php',
|
492 |
+
'Symfony\\Component\\Translation\\Dumper\\CsvFileDumper' => $vendorDir . '/symfony/translation/Dumper/CsvFileDumper.php',
|
493 |
+
'Symfony\\Component\\Translation\\Dumper\\DumperInterface' => $vendorDir . '/symfony/translation/Dumper/DumperInterface.php',
|
494 |
+
'Symfony\\Component\\Translation\\Dumper\\FileDumper' => $vendorDir . '/symfony/translation/Dumper/FileDumper.php',
|
495 |
+
'Symfony\\Component\\Translation\\Dumper\\IcuResFileDumper' => $vendorDir . '/symfony/translation/Dumper/IcuResFileDumper.php',
|
496 |
+
'Symfony\\Component\\Translation\\Dumper\\IniFileDumper' => $vendorDir . '/symfony/translation/Dumper/IniFileDumper.php',
|
497 |
+
'Symfony\\Component\\Translation\\Dumper\\JsonFileDumper' => $vendorDir . '/symfony/translation/Dumper/JsonFileDumper.php',
|
498 |
+
'Symfony\\Component\\Translation\\Dumper\\MoFileDumper' => $vendorDir . '/symfony/translation/Dumper/MoFileDumper.php',
|
499 |
+
'Symfony\\Component\\Translation\\Dumper\\PhpFileDumper' => $vendorDir . '/symfony/translation/Dumper/PhpFileDumper.php',
|
500 |
+
'Symfony\\Component\\Translation\\Dumper\\PoFileDumper' => $vendorDir . '/symfony/translation/Dumper/PoFileDumper.php',
|
501 |
+
'Symfony\\Component\\Translation\\Dumper\\QtFileDumper' => $vendorDir . '/symfony/translation/Dumper/QtFileDumper.php',
|
502 |
+
'Symfony\\Component\\Translation\\Dumper\\XliffFileDumper' => $vendorDir . '/symfony/translation/Dumper/XliffFileDumper.php',
|
503 |
+
'Symfony\\Component\\Translation\\Dumper\\YamlFileDumper' => $vendorDir . '/symfony/translation/Dumper/YamlFileDumper.php',
|
504 |
+
'Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/translation/Exception/ExceptionInterface.php',
|
505 |
+
'Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => $vendorDir . '/symfony/translation/Exception/InvalidResourceException.php',
|
506 |
+
'Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => $vendorDir . '/symfony/translation/Exception/NotFoundResourceException.php',
|
507 |
+
'Symfony\\Component\\Translation\\Extractor\\AbstractFileExtractor' => $vendorDir . '/symfony/translation/Extractor/AbstractFileExtractor.php',
|
508 |
+
'Symfony\\Component\\Translation\\Extractor\\ChainExtractor' => $vendorDir . '/symfony/translation/Extractor/ChainExtractor.php',
|
509 |
+
'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => $vendorDir . '/symfony/translation/Extractor/ExtractorInterface.php',
|
510 |
+
'Symfony\\Component\\Translation\\IdentityTranslator' => $vendorDir . '/symfony/translation/IdentityTranslator.php',
|
511 |
+
'Symfony\\Component\\Translation\\Interval' => $vendorDir . '/symfony/translation/Interval.php',
|
512 |
+
'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => $vendorDir . '/symfony/translation/Loader/ArrayLoader.php',
|
513 |
+
'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => $vendorDir . '/symfony/translation/Loader/CsvFileLoader.php',
|
514 |
+
'Symfony\\Component\\Translation\\Loader\\FileLoader' => $vendorDir . '/symfony/translation/Loader/FileLoader.php',
|
515 |
+
'Symfony\\Component\\Translation\\Loader\\IcuDatFileLoader' => $vendorDir . '/symfony/translation/Loader/IcuDatFileLoader.php',
|
516 |
+
'Symfony\\Component\\Translation\\Loader\\IcuResFileLoader' => $vendorDir . '/symfony/translation/Loader/IcuResFileLoader.php',
|
517 |
+
'Symfony\\Component\\Translation\\Loader\\IniFileLoader' => $vendorDir . '/symfony/translation/Loader/IniFileLoader.php',
|
518 |
+
'Symfony\\Component\\Translation\\Loader\\JsonFileLoader' => $vendorDir . '/symfony/translation/Loader/JsonFileLoader.php',
|
519 |
+
'Symfony\\Component\\Translation\\Loader\\LoaderInterface' => $vendorDir . '/symfony/translation/Loader/LoaderInterface.php',
|
520 |
+
'Symfony\\Component\\Translation\\Loader\\MoFileLoader' => $vendorDir . '/symfony/translation/Loader/MoFileLoader.php',
|
521 |
+
'Symfony\\Component\\Translation\\Loader\\PhpFileLoader' => $vendorDir . '/symfony/translation/Loader/PhpFileLoader.php',
|
522 |
+
'Symfony\\Component\\Translation\\Loader\\PoFileLoader' => $vendorDir . '/symfony/translation/Loader/PoFileLoader.php',
|
523 |
+
'Symfony\\Component\\Translation\\Loader\\QtFileLoader' => $vendorDir . '/symfony/translation/Loader/QtFileLoader.php',
|
524 |
+
'Symfony\\Component\\Translation\\Loader\\XliffFileLoader' => $vendorDir . '/symfony/translation/Loader/XliffFileLoader.php',
|
525 |
+
'Symfony\\Component\\Translation\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/translation/Loader/YamlFileLoader.php',
|
526 |
+
'Symfony\\Component\\Translation\\LoggingTranslator' => $vendorDir . '/symfony/translation/LoggingTranslator.php',
|
527 |
+
'Symfony\\Component\\Translation\\MessageCatalogue' => $vendorDir . '/symfony/translation/MessageCatalogue.php',
|
528 |
+
'Symfony\\Component\\Translation\\MessageCatalogueInterface' => $vendorDir . '/symfony/translation/MessageCatalogueInterface.php',
|
529 |
+
'Symfony\\Component\\Translation\\MessageSelector' => $vendorDir . '/symfony/translation/MessageSelector.php',
|
530 |
+
'Symfony\\Component\\Translation\\MetadataAwareInterface' => $vendorDir . '/symfony/translation/MetadataAwareInterface.php',
|
531 |
+
'Symfony\\Component\\Translation\\PluralizationRules' => $vendorDir . '/symfony/translation/PluralizationRules.php',
|
532 |
+
'Symfony\\Component\\Translation\\Translator' => $vendorDir . '/symfony/translation/Translator.php',
|
533 |
+
'Symfony\\Component\\Translation\\TranslatorBagInterface' => $vendorDir . '/symfony/translation/TranslatorBagInterface.php',
|
534 |
+
'Symfony\\Component\\Translation\\TranslatorInterface' => $vendorDir . '/symfony/translation/TranslatorInterface.php',
|
535 |
+
'Symfony\\Component\\Translation\\Util\\ArrayConverter' => $vendorDir . '/symfony/translation/Util/ArrayConverter.php',
|
536 |
+
'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => $vendorDir . '/symfony/translation/Writer/TranslationWriter.php',
|
537 |
'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php',
|
538 |
+
'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php',
|
539 |
'Twig\\Cache\\CacheInterface' => $vendorDir . '/twig/twig/src/Cache/CacheInterface.php',
|
540 |
'Twig\\Cache\\FilesystemCache' => $vendorDir . '/twig/twig/src/Cache/FilesystemCache.php',
|
541 |
'Twig\\Cache\\NullCache' => $vendorDir . '/twig/twig/src/Cache/NullCache.php',
|
vendor/composer/autoload_files.php
CHANGED
@@ -7,5 +7,6 @@ $baseDir = dirname($vendorDir);
|
|
7 |
|
8 |
return array(
|
9 |
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
|
|
10 |
'bbf73f3db644d3dced353b837903e74c' => $vendorDir . '/php-di/php-di/src/DI/functions.php',
|
11 |
);
|
7 |
|
8 |
return array(
|
9 |
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
|
10 |
+
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
|
11 |
'bbf73f3db644d3dced353b837903e74c' => $vendorDir . '/php-di/php-di/src/DI/functions.php',
|
12 |
);
|
vendor/composer/autoload_psr4.php
CHANGED
@@ -8,7 +8,9 @@ $baseDir = dirname($vendorDir);
|
|
8 |
return array(
|
9 |
'Twig\\Extensions\\' => array($vendorDir . '/twig/extensions/src'),
|
10 |
'Twig\\' => array($vendorDir . '/twig/twig/src'),
|
|
|
11 |
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
|
|
|
12 |
'RebelCode\\Wpra\\Core\\' => array($baseDir . '/src'),
|
13 |
'RebelCode\\Entities\\' => array($baseDir . '/lib/Entities'),
|
14 |
'RebelCode\\Composer\\' => array($vendorDir . '/rebelcode/composer-cleanup-plugin/src'),
|
8 |
return array(
|
9 |
'Twig\\Extensions\\' => array($vendorDir . '/twig/extensions/src'),
|
10 |
'Twig\\' => array($vendorDir . '/twig/twig/src'),
|
11 |
+
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
|
12 |
'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
|
13 |
+
'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
|
14 |
'RebelCode\\Wpra\\Core\\' => array($baseDir . '/src'),
|
15 |
'RebelCode\\Entities\\' => array($baseDir . '/lib/Entities'),
|
16 |
'RebelCode\\Composer\\' => array($vendorDir . '/rebelcode/composer-cleanup-plugin/src'),
|
vendor/composer/autoload_static.php
CHANGED
@@ -8,6 +8,7 @@ class ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60
|
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
|
|
11 |
'bbf73f3db644d3dced353b837903e74c' => __DIR__ . '/..' . '/php-di/php-di/src/DI/functions.php',
|
12 |
);
|
13 |
|
@@ -19,7 +20,9 @@ class ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60
|
|
19 |
),
|
20 |
'S' =>
|
21 |
array (
|
|
|
22 |
'Symfony\\Polyfill\\Ctype\\' => 23,
|
|
|
23 |
),
|
24 |
'R' =>
|
25 |
array (
|
@@ -66,10 +69,18 @@ class ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60
|
|
66 |
array (
|
67 |
0 => __DIR__ . '/..' . '/twig/twig/src',
|
68 |
),
|
|
|
|
|
|
|
|
|
69 |
'Symfony\\Polyfill\\Ctype\\' =>
|
70 |
array (
|
71 |
0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
|
72 |
),
|
|
|
|
|
|
|
|
|
73 |
'RebelCode\\Wpra\\Core\\' =>
|
74 |
array (
|
75 |
0 => __DIR__ . '/../..' . '/src',
|
@@ -642,6 +653,7 @@ class ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60
|
|
642 |
'RebelCode\\Wpra\\Core\\Templates\\Feeds\\Types\\ListTemplateType' => __DIR__ . '/../..' . '/src/Templates/Feeds/Types/ListTemplateType.php',
|
643 |
'RebelCode\\Wpra\\Core\\Templates\\NullTemplate' => __DIR__ . '/../..' . '/src/Templates/NullTemplate.php',
|
644 |
'RebelCode\\Wpra\\Core\\Templates\\TwigTemplate' => __DIR__ . '/../..' . '/src/Templates/TwigTemplate.php',
|
|
|
645 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\I18nTransNode' => __DIR__ . '/../..' . '/src/Twig/Extensions/I18n/I18nTransNode.php',
|
646 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\I18nTransTokenParser' => __DIR__ . '/../..' . '/src/Twig/Extensions/I18n/I18nTransTokenParser.php',
|
647 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\WpI18nExtension' => __DIR__ . '/../..' . '/src/Twig/Extensions/I18n/WpI18nExtension.php',
|
@@ -669,7 +681,60 @@ class ComposerStaticInit46c8b76c439f86ad826af1a4d36b4e60
|
|
669 |
'RebelCode\\Wpra\\Core\\Wp\\PluginInfo' => __DIR__ . '/../..' . '/src/Wp/PluginInfo.php',
|
670 |
'RebelCode\\Wpra\\Core\\Wp\\WpExtensionInterface' => __DIR__ . '/../..' . '/src/Wp/WpExtensionInterface.php',
|
671 |
'RebelCode\\Wpra\\Core\\Wp\\WpRolesProxy' => __DIR__ . '/../..' . '/src/Wp/WpRolesProxy.php',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
672 |
'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php',
|
|
|
673 |
'Twig\\Cache\\CacheInterface' => __DIR__ . '/..' . '/twig/twig/src/Cache/CacheInterface.php',
|
674 |
'Twig\\Cache\\FilesystemCache' => __DIR__ . '/..' . '/twig/twig/src/Cache/FilesystemCache.php',
|
675 |
'Twig\\Cache\\NullCache' => __DIR__ . '/..' . '/twig/twig/src/Cache/NullCache.php',
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
|
11 |
+
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
|
12 |
'bbf73f3db644d3dced353b837903e74c' => __DIR__ . '/..' . '/php-di/php-di/src/DI/functions.php',
|
13 |
);
|
14 |
|
20 |
),
|
21 |
'S' =>
|
22 |
array (
|
23 |
+
'Symfony\\Polyfill\\Mbstring\\' => 26,
|
24 |
'Symfony\\Polyfill\\Ctype\\' => 23,
|
25 |
+
'Symfony\\Component\\Translation\\' => 30,
|
26 |
),
|
27 |
'R' =>
|
28 |
array (
|
69 |
array (
|
70 |
0 => __DIR__ . '/..' . '/twig/twig/src',
|
71 |
),
|
72 |
+
'Symfony\\Polyfill\\Mbstring\\' =>
|
73 |
+
array (
|
74 |
+
0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring',
|
75 |
+
),
|
76 |
'Symfony\\Polyfill\\Ctype\\' =>
|
77 |
array (
|
78 |
0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
|
79 |
),
|
80 |
+
'Symfony\\Component\\Translation\\' =>
|
81 |
+
array (
|
82 |
+
0 => __DIR__ . '/..' . '/symfony/translation',
|
83 |
+
),
|
84 |
'RebelCode\\Wpra\\Core\\' =>
|
85 |
array (
|
86 |
0 => __DIR__ . '/../..' . '/src',
|
653 |
'RebelCode\\Wpra\\Core\\Templates\\Feeds\\Types\\ListTemplateType' => __DIR__ . '/../..' . '/src/Templates/Feeds/Types/ListTemplateType.php',
|
654 |
'RebelCode\\Wpra\\Core\\Templates\\NullTemplate' => __DIR__ . '/../..' . '/src/Templates/NullTemplate.php',
|
655 |
'RebelCode\\Wpra\\Core\\Templates\\TwigTemplate' => __DIR__ . '/../..' . '/src/Templates/TwigTemplate.php',
|
656 |
+
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\Date\\TwigDateTranslator' => __DIR__ . '/../..' . '/src/Twig/Extensions/Date/TwigDateTranslator.php',
|
657 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\I18nTransNode' => __DIR__ . '/../..' . '/src/Twig/Extensions/I18n/I18nTransNode.php',
|
658 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\I18nTransTokenParser' => __DIR__ . '/../..' . '/src/Twig/Extensions/I18n/I18nTransTokenParser.php',
|
659 |
'RebelCode\\Wpra\\Core\\Twig\\Extensions\\I18n\\WpI18nExtension' => __DIR__ . '/../..' . '/src/Twig/Extensions/I18n/WpI18nExtension.php',
|
681 |
'RebelCode\\Wpra\\Core\\Wp\\PluginInfo' => __DIR__ . '/../..' . '/src/Wp/PluginInfo.php',
|
682 |
'RebelCode\\Wpra\\Core\\Wp\\WpExtensionInterface' => __DIR__ . '/../..' . '/src/Wp/WpExtensionInterface.php',
|
683 |
'RebelCode\\Wpra\\Core\\Wp\\WpRolesProxy' => __DIR__ . '/../..' . '/src/Wp/WpRolesProxy.php',
|
684 |
+
'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/AbstractOperation.php',
|
685 |
+
'Symfony\\Component\\Translation\\Catalogue\\DiffOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/DiffOperation.php',
|
686 |
+
'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/MergeOperation.php',
|
687 |
+
'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => __DIR__ . '/..' . '/symfony/translation/Catalogue/OperationInterface.php',
|
688 |
+
'Symfony\\Component\\Translation\\Catalogue\\TargetOperation' => __DIR__ . '/..' . '/symfony/translation/Catalogue/TargetOperation.php',
|
689 |
+
'Symfony\\Component\\Translation\\DataCollectorTranslator' => __DIR__ . '/..' . '/symfony/translation/DataCollectorTranslator.php',
|
690 |
+
'Symfony\\Component\\Translation\\DataCollector\\TranslationDataCollector' => __DIR__ . '/..' . '/symfony/translation/DataCollector/TranslationDataCollector.php',
|
691 |
+
'Symfony\\Component\\Translation\\Dumper\\CsvFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/CsvFileDumper.php',
|
692 |
+
'Symfony\\Component\\Translation\\Dumper\\DumperInterface' => __DIR__ . '/..' . '/symfony/translation/Dumper/DumperInterface.php',
|
693 |
+
'Symfony\\Component\\Translation\\Dumper\\FileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/FileDumper.php',
|
694 |
+
'Symfony\\Component\\Translation\\Dumper\\IcuResFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/IcuResFileDumper.php',
|
695 |
+
'Symfony\\Component\\Translation\\Dumper\\IniFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/IniFileDumper.php',
|
696 |
+
'Symfony\\Component\\Translation\\Dumper\\JsonFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/JsonFileDumper.php',
|
697 |
+
'Symfony\\Component\\Translation\\Dumper\\MoFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/MoFileDumper.php',
|
698 |
+
'Symfony\\Component\\Translation\\Dumper\\PhpFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/PhpFileDumper.php',
|
699 |
+
'Symfony\\Component\\Translation\\Dumper\\PoFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/PoFileDumper.php',
|
700 |
+
'Symfony\\Component\\Translation\\Dumper\\QtFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/QtFileDumper.php',
|
701 |
+
'Symfony\\Component\\Translation\\Dumper\\XliffFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/XliffFileDumper.php',
|
702 |
+
'Symfony\\Component\\Translation\\Dumper\\YamlFileDumper' => __DIR__ . '/..' . '/symfony/translation/Dumper/YamlFileDumper.php',
|
703 |
+
'Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/translation/Exception/ExceptionInterface.php',
|
704 |
+
'Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => __DIR__ . '/..' . '/symfony/translation/Exception/InvalidResourceException.php',
|
705 |
+
'Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => __DIR__ . '/..' . '/symfony/translation/Exception/NotFoundResourceException.php',
|
706 |
+
'Symfony\\Component\\Translation\\Extractor\\AbstractFileExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/AbstractFileExtractor.php',
|
707 |
+
'Symfony\\Component\\Translation\\Extractor\\ChainExtractor' => __DIR__ . '/..' . '/symfony/translation/Extractor/ChainExtractor.php',
|
708 |
+
'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => __DIR__ . '/..' . '/symfony/translation/Extractor/ExtractorInterface.php',
|
709 |
+
'Symfony\\Component\\Translation\\IdentityTranslator' => __DIR__ . '/..' . '/symfony/translation/IdentityTranslator.php',
|
710 |
+
'Symfony\\Component\\Translation\\Interval' => __DIR__ . '/..' . '/symfony/translation/Interval.php',
|
711 |
+
'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/ArrayLoader.php',
|
712 |
+
'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/CsvFileLoader.php',
|
713 |
+
'Symfony\\Component\\Translation\\Loader\\FileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/FileLoader.php',
|
714 |
+
'Symfony\\Component\\Translation\\Loader\\IcuDatFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/IcuDatFileLoader.php',
|
715 |
+
'Symfony\\Component\\Translation\\Loader\\IcuResFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/IcuResFileLoader.php',
|
716 |
+
'Symfony\\Component\\Translation\\Loader\\IniFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/IniFileLoader.php',
|
717 |
+
'Symfony\\Component\\Translation\\Loader\\JsonFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/JsonFileLoader.php',
|
718 |
+
'Symfony\\Component\\Translation\\Loader\\LoaderInterface' => __DIR__ . '/..' . '/symfony/translation/Loader/LoaderInterface.php',
|
719 |
+
'Symfony\\Component\\Translation\\Loader\\MoFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/MoFileLoader.php',
|
720 |
+
'Symfony\\Component\\Translation\\Loader\\PhpFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/PhpFileLoader.php',
|
721 |
+
'Symfony\\Component\\Translation\\Loader\\PoFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/PoFileLoader.php',
|
722 |
+
'Symfony\\Component\\Translation\\Loader\\QtFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/QtFileLoader.php',
|
723 |
+
'Symfony\\Component\\Translation\\Loader\\XliffFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/XliffFileLoader.php',
|
724 |
+
'Symfony\\Component\\Translation\\Loader\\YamlFileLoader' => __DIR__ . '/..' . '/symfony/translation/Loader/YamlFileLoader.php',
|
725 |
+
'Symfony\\Component\\Translation\\LoggingTranslator' => __DIR__ . '/..' . '/symfony/translation/LoggingTranslator.php',
|
726 |
+
'Symfony\\Component\\Translation\\MessageCatalogue' => __DIR__ . '/..' . '/symfony/translation/MessageCatalogue.php',
|
727 |
+
'Symfony\\Component\\Translation\\MessageCatalogueInterface' => __DIR__ . '/..' . '/symfony/translation/MessageCatalogueInterface.php',
|
728 |
+
'Symfony\\Component\\Translation\\MessageSelector' => __DIR__ . '/..' . '/symfony/translation/MessageSelector.php',
|
729 |
+
'Symfony\\Component\\Translation\\MetadataAwareInterface' => __DIR__ . '/..' . '/symfony/translation/MetadataAwareInterface.php',
|
730 |
+
'Symfony\\Component\\Translation\\PluralizationRules' => __DIR__ . '/..' . '/symfony/translation/PluralizationRules.php',
|
731 |
+
'Symfony\\Component\\Translation\\Translator' => __DIR__ . '/..' . '/symfony/translation/Translator.php',
|
732 |
+
'Symfony\\Component\\Translation\\TranslatorBagInterface' => __DIR__ . '/..' . '/symfony/translation/TranslatorBagInterface.php',
|
733 |
+
'Symfony\\Component\\Translation\\TranslatorInterface' => __DIR__ . '/..' . '/symfony/translation/TranslatorInterface.php',
|
734 |
+
'Symfony\\Component\\Translation\\Util\\ArrayConverter' => __DIR__ . '/..' . '/symfony/translation/Util/ArrayConverter.php',
|
735 |
+
'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => __DIR__ . '/..' . '/symfony/translation/Writer/TranslationWriter.php',
|
736 |
'Symfony\\Polyfill\\Ctype\\Ctype' => __DIR__ . '/..' . '/symfony/polyfill-ctype/Ctype.php',
|
737 |
+
'Symfony\\Polyfill\\Mbstring\\Mbstring' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/Mbstring.php',
|
738 |
'Twig\\Cache\\CacheInterface' => __DIR__ . '/..' . '/twig/twig/src/Cache/CacheInterface.php',
|
739 |
'Twig\\Cache\\FilesystemCache' => __DIR__ . '/..' . '/twig/twig/src/Cache/FilesystemCache.php',
|
740 |
'Twig\\Cache\\NullCache' => __DIR__ . '/..' . '/twig/twig/src/Cache/NullCache.php',
|
vendor/composer/installed.json
CHANGED
@@ -153,7 +153,8 @@
|
|
153 |
"email": "development@dhii.co"
|
154 |
}
|
155 |
],
|
156 |
-
"description": "Collection base classes that do not depend on other non-collection packages, on which there is a dependency of other collection packages that depend on this package. This is done to avoid circular reference in the collection toolchain"
|
|
|
157 |
},
|
158 |
{
|
159 |
"name": "dhii/collections-interface",
|
@@ -605,7 +606,8 @@
|
|
605 |
"email": "development@dhii.co"
|
606 |
}
|
607 |
],
|
608 |
-
"description": "A base for internationalization consumers"
|
|
|
609 |
},
|
610 |
{
|
611 |
"name": "dhii/i18n-interface",
|
@@ -1673,6 +1675,151 @@
|
|
1673 |
"portable"
|
1674 |
]
|
1675 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1676 |
{
|
1677 |
"name": "twig/extensions",
|
1678 |
"version": "v1.5.4",
|
153 |
"email": "development@dhii.co"
|
154 |
}
|
155 |
],
|
156 |
+
"description": "Collection base classes that do not depend on other non-collection packages, on which there is a dependency of other collection packages that depend on this package. This is done to avoid circular reference in the collection toolchain",
|
157 |
+
"abandoned": "dhii/collections"
|
158 |
},
|
159 |
{
|
160 |
"name": "dhii/collections-interface",
|
606 |
"email": "development@dhii.co"
|
607 |
}
|
608 |
],
|
609 |
+
"description": "A base for internationalization consumers",
|
610 |
+
"abandoned": true
|
611 |
},
|
612 |
{
|
613 |
"name": "dhii/i18n-interface",
|
1675 |
"portable"
|
1676 |
]
|
1677 |
},
|
1678 |
+
{
|
1679 |
+
"name": "symfony/polyfill-mbstring",
|
1680 |
+
"version": "v1.17.1",
|
1681 |
+
"version_normalized": "1.17.1.0",
|
1682 |
+
"source": {
|
1683 |
+
"type": "git",
|
1684 |
+
"url": "https://github.com/symfony/polyfill-mbstring.git",
|
1685 |
+
"reference": "7110338d81ce1cbc3e273136e4574663627037a7"
|
1686 |
+
},
|
1687 |
+
"dist": {
|
1688 |
+
"type": "zip",
|
1689 |
+
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7110338d81ce1cbc3e273136e4574663627037a7",
|
1690 |
+
"reference": "7110338d81ce1cbc3e273136e4574663627037a7",
|
1691 |
+
"shasum": ""
|
1692 |
+
},
|
1693 |
+
"require": {
|
1694 |
+
"php": ">=5.3.3"
|
1695 |
+
},
|
1696 |
+
"suggest": {
|
1697 |
+
"ext-mbstring": "For best performance"
|
1698 |
+
},
|
1699 |
+
"time": "2020-06-06T08:46:27+00:00",
|
1700 |
+
"type": "library",
|
1701 |
+
"extra": {
|
1702 |
+
"branch-alias": {
|
1703 |
+
"dev-master": "1.17-dev"
|
1704 |
+
},
|
1705 |
+
"thanks": {
|
1706 |
+
"name": "symfony/polyfill",
|
1707 |
+
"url": "https://github.com/symfony/polyfill"
|
1708 |
+
}
|
1709 |
+
},
|
1710 |
+
"installation-source": "dist",
|
1711 |
+
"autoload": {
|
1712 |
+
"psr-4": {
|
1713 |
+
"Symfony\\Polyfill\\Mbstring\\": ""
|
1714 |
+
},
|
1715 |
+
"files": [
|
1716 |
+
"bootstrap.php"
|
1717 |
+
]
|
1718 |
+
},
|
1719 |
+
"notification-url": "https://packagist.org/downloads/",
|
1720 |
+
"license": [
|
1721 |
+
"MIT"
|
1722 |
+
],
|
1723 |
+
"authors": [
|
1724 |
+
{
|
1725 |
+
"name": "Nicolas Grekas",
|
1726 |
+
"email": "p@tchwork.com"
|
1727 |
+
},
|
1728 |
+
{
|
1729 |
+
"name": "Symfony Community",
|
1730 |
+
"homepage": "https://symfony.com/contributors"
|
1731 |
+
}
|
1732 |
+
],
|
1733 |
+
"description": "Symfony polyfill for the Mbstring extension",
|
1734 |
+
"homepage": "https://symfony.com",
|
1735 |
+
"keywords": [
|
1736 |
+
"compatibility",
|
1737 |
+
"mbstring",
|
1738 |
+
"polyfill",
|
1739 |
+
"portable",
|
1740 |
+
"shim"
|
1741 |
+
],
|
1742 |
+
"funding": [
|
1743 |
+
{
|
1744 |
+
"url": "https://symfony.com/sponsor",
|
1745 |
+
"type": "custom"
|
1746 |
+
},
|
1747 |
+
{
|
1748 |
+
"url": "https://github.com/fabpot",
|
1749 |
+
"type": "github"
|
1750 |
+
},
|
1751 |
+
{
|
1752 |
+
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
1753 |
+
"type": "tidelift"
|
1754 |
+
}
|
1755 |
+
]
|
1756 |
+
},
|
1757 |
+
{
|
1758 |
+
"name": "symfony/translation",
|
1759 |
+
"version": "v2.8.52",
|
1760 |
+
"version_normalized": "2.8.52.0",
|
1761 |
+
"source": {
|
1762 |
+
"type": "git",
|
1763 |
+
"url": "https://github.com/symfony/translation.git",
|
1764 |
+
"reference": "fc58c2a19e56c29f5ba2736ec40d0119a0de2089"
|
1765 |
+
},
|
1766 |
+
"dist": {
|
1767 |
+
"type": "zip",
|
1768 |
+
"url": "https://api.github.com/repos/symfony/translation/zipball/fc58c2a19e56c29f5ba2736ec40d0119a0de2089",
|
1769 |
+
"reference": "fc58c2a19e56c29f5ba2736ec40d0119a0de2089",
|
1770 |
+
"shasum": ""
|
1771 |
+
},
|
1772 |
+
"require": {
|
1773 |
+
"php": ">=5.3.9",
|
1774 |
+
"symfony/polyfill-mbstring": "~1.0"
|
1775 |
+
},
|
1776 |
+
"conflict": {
|
1777 |
+
"symfony/config": "<2.7"
|
1778 |
+
},
|
1779 |
+
"require-dev": {
|
1780 |
+
"psr/log": "~1.0",
|
1781 |
+
"symfony/config": "~2.8",
|
1782 |
+
"symfony/intl": "~2.7.25|^2.8.18|~3.2.5",
|
1783 |
+
"symfony/yaml": "~2.2|~3.0.0"
|
1784 |
+
},
|
1785 |
+
"suggest": {
|
1786 |
+
"psr/log-implementation": "To use logging capability in translator",
|
1787 |
+
"symfony/config": "",
|
1788 |
+
"symfony/yaml": ""
|
1789 |
+
},
|
1790 |
+
"time": "2018-11-24T21:16:41+00:00",
|
1791 |
+
"type": "library",
|
1792 |
+
"extra": {
|
1793 |
+
"branch-alias": {
|
1794 |
+
"dev-master": "2.8-dev"
|
1795 |
+
}
|
1796 |
+
},
|
1797 |
+
"installation-source": "dist",
|
1798 |
+
"autoload": {
|
1799 |
+
"psr-4": {
|
1800 |
+
"Symfony\\Component\\Translation\\": ""
|
1801 |
+
},
|
1802 |
+
"exclude-from-classmap": [
|
1803 |
+
"/Tests/"
|
1804 |
+
]
|
1805 |
+
},
|
1806 |
+
"notification-url": "https://packagist.org/downloads/",
|
1807 |
+
"license": [
|
1808 |
+
"MIT"
|
1809 |
+
],
|
1810 |
+
"authors": [
|
1811 |
+
{
|
1812 |
+
"name": "Fabien Potencier",
|
1813 |
+
"email": "fabien@symfony.com"
|
1814 |
+
},
|
1815 |
+
{
|
1816 |
+
"name": "Symfony Community",
|
1817 |
+
"homepage": "https://symfony.com/contributors"
|
1818 |
+
}
|
1819 |
+
],
|
1820 |
+
"description": "Symfony Translation Component",
|
1821 |
+
"homepage": "https://symfony.com"
|
1822 |
+
},
|
1823 |
{
|
1824 |
"name": "twig/extensions",
|
1825 |
"version": "v1.5.4",
|
vendor/symfony/polyfill-mbstring/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2015-2019 Fabien Potencier
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
+
of this software and associated documentation files (the "Software"), to deal
|
5 |
+
in the Software without restriction, including without limitation the rights
|
6 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
8 |
+
to do so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in all
|
11 |
+
copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
+
THE SOFTWARE.
|
vendor/symfony/polyfill-mbstring/Mbstring.php
ADDED
@@ -0,0 +1,847 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Polyfill\Mbstring;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Partial mbstring implementation in PHP, iconv based, UTF-8 centric.
|
16 |
+
*
|
17 |
+
* Implemented:
|
18 |
+
* - mb_chr - Returns a specific character from its Unicode code point
|
19 |
+
* - mb_convert_encoding - Convert character encoding
|
20 |
+
* - mb_convert_variables - Convert character code in variable(s)
|
21 |
+
* - mb_decode_mimeheader - Decode string in MIME header field
|
22 |
+
* - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED
|
23 |
+
* - mb_decode_numericentity - Decode HTML numeric string reference to character
|
24 |
+
* - mb_encode_numericentity - Encode character to HTML numeric string reference
|
25 |
+
* - mb_convert_case - Perform case folding on a string
|
26 |
+
* - mb_detect_encoding - Detect character encoding
|
27 |
+
* - mb_get_info - Get internal settings of mbstring
|
28 |
+
* - mb_http_input - Detect HTTP input character encoding
|
29 |
+
* - mb_http_output - Set/Get HTTP output character encoding
|
30 |
+
* - mb_internal_encoding - Set/Get internal character encoding
|
31 |
+
* - mb_list_encodings - Returns an array of all supported encodings
|
32 |
+
* - mb_ord - Returns the Unicode code point of a character
|
33 |
+
* - mb_output_handler - Callback function converts character encoding in output buffer
|
34 |
+
* - mb_scrub - Replaces ill-formed byte sequences with substitute characters
|
35 |
+
* - mb_strlen - Get string length
|
36 |
+
* - mb_strpos - Find position of first occurrence of string in a string
|
37 |
+
* - mb_strrpos - Find position of last occurrence of a string in a string
|
38 |
+
* - mb_str_split - Convert a string to an array
|
39 |
+
* - mb_strtolower - Make a string lowercase
|
40 |
+
* - mb_strtoupper - Make a string uppercase
|
41 |
+
* - mb_substitute_character - Set/Get substitution character
|
42 |
+
* - mb_substr - Get part of string
|
43 |
+
* - mb_stripos - Finds position of first occurrence of a string within another, case insensitive
|
44 |
+
* - mb_stristr - Finds first occurrence of a string within another, case insensitive
|
45 |
+
* - mb_strrchr - Finds the last occurrence of a character in a string within another
|
46 |
+
* - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive
|
47 |
+
* - mb_strripos - Finds position of last occurrence of a string within another, case insensitive
|
48 |
+
* - mb_strstr - Finds first occurrence of a string within another
|
49 |
+
* - mb_strwidth - Return width of string
|
50 |
+
* - mb_substr_count - Count the number of substring occurrences
|
51 |
+
*
|
52 |
+
* Not implemented:
|
53 |
+
* - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more)
|
54 |
+
* - mb_ereg_* - Regular expression with multibyte support
|
55 |
+
* - mb_parse_str - Parse GET/POST/COOKIE data and set global variable
|
56 |
+
* - mb_preferred_mime_name - Get MIME charset string
|
57 |
+
* - mb_regex_encoding - Returns current encoding for multibyte regex as string
|
58 |
+
* - mb_regex_set_options - Set/Get the default options for mbregex functions
|
59 |
+
* - mb_send_mail - Send encoded mail
|
60 |
+
* - mb_split - Split multibyte string using regular expression
|
61 |
+
* - mb_strcut - Get part of string
|
62 |
+
* - mb_strimwidth - Get truncated string with specified width
|
63 |
+
*
|
64 |
+
* @author Nicolas Grekas <p@tchwork.com>
|
65 |
+
*
|
66 |
+
* @internal
|
67 |
+
*/
|
68 |
+
final class Mbstring
|
69 |
+
{
|
70 |
+
const MB_CASE_FOLD = PHP_INT_MAX;
|
71 |
+
|
72 |
+
private static $encodingList = array('ASCII', 'UTF-8');
|
73 |
+
private static $language = 'neutral';
|
74 |
+
private static $internalEncoding = 'UTF-8';
|
75 |
+
private static $caseFold = array(
|
76 |
+
array('µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"),
|
77 |
+
array('μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'),
|
78 |
+
);
|
79 |
+
|
80 |
+
public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null)
|
81 |
+
{
|
82 |
+
if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) {
|
83 |
+
$fromEncoding = self::mb_detect_encoding($s, $fromEncoding);
|
84 |
+
} else {
|
85 |
+
$fromEncoding = self::getEncoding($fromEncoding);
|
86 |
+
}
|
87 |
+
|
88 |
+
$toEncoding = self::getEncoding($toEncoding);
|
89 |
+
|
90 |
+
if ('BASE64' === $fromEncoding) {
|
91 |
+
$s = base64_decode($s);
|
92 |
+
$fromEncoding = $toEncoding;
|
93 |
+
}
|
94 |
+
|
95 |
+
if ('BASE64' === $toEncoding) {
|
96 |
+
return base64_encode($s);
|
97 |
+
}
|
98 |
+
|
99 |
+
if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) {
|
100 |
+
if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) {
|
101 |
+
$fromEncoding = 'Windows-1252';
|
102 |
+
}
|
103 |
+
if ('UTF-8' !== $fromEncoding) {
|
104 |
+
$s = iconv($fromEncoding, 'UTF-8//IGNORE', $s);
|
105 |
+
}
|
106 |
+
|
107 |
+
return preg_replace_callback('/[\x80-\xFF]+/', array(__CLASS__, 'html_encoding_callback'), $s);
|
108 |
+
}
|
109 |
+
|
110 |
+
if ('HTML-ENTITIES' === $fromEncoding) {
|
111 |
+
$s = html_entity_decode($s, ENT_COMPAT, 'UTF-8');
|
112 |
+
$fromEncoding = 'UTF-8';
|
113 |
+
}
|
114 |
+
|
115 |
+
return iconv($fromEncoding, $toEncoding.'//IGNORE', $s);
|
116 |
+
}
|
117 |
+
|
118 |
+
public static function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null)
|
119 |
+
{
|
120 |
+
$vars = array(&$a, &$b, &$c, &$d, &$e, &$f);
|
121 |
+
|
122 |
+
$ok = true;
|
123 |
+
array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) {
|
124 |
+
if (false === $v = Mbstring::mb_convert_encoding($v, $toEncoding, $fromEncoding)) {
|
125 |
+
$ok = false;
|
126 |
+
}
|
127 |
+
});
|
128 |
+
|
129 |
+
return $ok ? $fromEncoding : false;
|
130 |
+
}
|
131 |
+
|
132 |
+
public static function mb_decode_mimeheader($s)
|
133 |
+
{
|
134 |
+
return iconv_mime_decode($s, 2, self::$internalEncoding);
|
135 |
+
}
|
136 |
+
|
137 |
+
public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null)
|
138 |
+
{
|
139 |
+
trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', E_USER_WARNING);
|
140 |
+
}
|
141 |
+
|
142 |
+
public static function mb_decode_numericentity($s, $convmap, $encoding = null)
|
143 |
+
{
|
144 |
+
if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
|
145 |
+
trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING);
|
146 |
+
|
147 |
+
return null;
|
148 |
+
}
|
149 |
+
|
150 |
+
if (!\is_array($convmap) || !$convmap) {
|
151 |
+
return false;
|
152 |
+
}
|
153 |
+
|
154 |
+
if (null !== $encoding && !\is_scalar($encoding)) {
|
155 |
+
trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING);
|
156 |
+
|
157 |
+
return ''; // Instead of null (cf. mb_encode_numericentity).
|
158 |
+
}
|
159 |
+
|
160 |
+
$s = (string) $s;
|
161 |
+
if ('' === $s) {
|
162 |
+
return '';
|
163 |
+
}
|
164 |
+
|
165 |
+
$encoding = self::getEncoding($encoding);
|
166 |
+
|
167 |
+
if ('UTF-8' === $encoding) {
|
168 |
+
$encoding = null;
|
169 |
+
if (!preg_match('//u', $s)) {
|
170 |
+
$s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
|
171 |
+
}
|
172 |
+
} else {
|
173 |
+
$s = iconv($encoding, 'UTF-8//IGNORE', $s);
|
174 |
+
}
|
175 |
+
|
176 |
+
$cnt = floor(\count($convmap) / 4) * 4;
|
177 |
+
|
178 |
+
for ($i = 0; $i < $cnt; $i += 4) {
|
179 |
+
// collector_decode_htmlnumericentity ignores $convmap[$i + 3]
|
180 |
+
$convmap[$i] += $convmap[$i + 2];
|
181 |
+
$convmap[$i + 1] += $convmap[$i + 2];
|
182 |
+
}
|
183 |
+
|
184 |
+
$s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) {
|
185 |
+
$c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1];
|
186 |
+
for ($i = 0; $i < $cnt; $i += 4) {
|
187 |
+
if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) {
|
188 |
+
return Mbstring::mb_chr($c - $convmap[$i + 2]);
|
189 |
+
}
|
190 |
+
}
|
191 |
+
|
192 |
+
return $m[0];
|
193 |
+
}, $s);
|
194 |
+
|
195 |
+
if (null === $encoding) {
|
196 |
+
return $s;
|
197 |
+
}
|
198 |
+
|
199 |
+
return iconv('UTF-8', $encoding.'//IGNORE', $s);
|
200 |
+
}
|
201 |
+
|
202 |
+
public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false)
|
203 |
+
{
|
204 |
+
if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) {
|
205 |
+
trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING);
|
206 |
+
|
207 |
+
return null;
|
208 |
+
}
|
209 |
+
|
210 |
+
if (!\is_array($convmap) || !$convmap) {
|
211 |
+
return false;
|
212 |
+
}
|
213 |
+
|
214 |
+
if (null !== $encoding && !\is_scalar($encoding)) {
|
215 |
+
trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING);
|
216 |
+
|
217 |
+
return null; // Instead of '' (cf. mb_decode_numericentity).
|
218 |
+
}
|
219 |
+
|
220 |
+
if (null !== $is_hex && !\is_scalar($is_hex)) {
|
221 |
+
trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', E_USER_WARNING);
|
222 |
+
|
223 |
+
return null;
|
224 |
+
}
|
225 |
+
|
226 |
+
$s = (string) $s;
|
227 |
+
if ('' === $s) {
|
228 |
+
return '';
|
229 |
+
}
|
230 |
+
|
231 |
+
$encoding = self::getEncoding($encoding);
|
232 |
+
|
233 |
+
if ('UTF-8' === $encoding) {
|
234 |
+
$encoding = null;
|
235 |
+
if (!preg_match('//u', $s)) {
|
236 |
+
$s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
|
237 |
+
}
|
238 |
+
} else {
|
239 |
+
$s = iconv($encoding, 'UTF-8//IGNORE', $s);
|
240 |
+
}
|
241 |
+
|
242 |
+
static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
|
243 |
+
|
244 |
+
$cnt = floor(\count($convmap) / 4) * 4;
|
245 |
+
$i = 0;
|
246 |
+
$len = \strlen($s);
|
247 |
+
$result = '';
|
248 |
+
|
249 |
+
while ($i < $len) {
|
250 |
+
$ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
|
251 |
+
$uchr = substr($s, $i, $ulen);
|
252 |
+
$i += $ulen;
|
253 |
+
$c = self::mb_ord($uchr);
|
254 |
+
|
255 |
+
for ($j = 0; $j < $cnt; $j += 4) {
|
256 |
+
if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) {
|
257 |
+
$cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3];
|
258 |
+
$result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';';
|
259 |
+
continue 2;
|
260 |
+
}
|
261 |
+
}
|
262 |
+
$result .= $uchr;
|
263 |
+
}
|
264 |
+
|
265 |
+
if (null === $encoding) {
|
266 |
+
return $result;
|
267 |
+
}
|
268 |
+
|
269 |
+
return iconv('UTF-8', $encoding.'//IGNORE', $result);
|
270 |
+
}
|
271 |
+
|
272 |
+
public static function mb_convert_case($s, $mode, $encoding = null)
|
273 |
+
{
|
274 |
+
$s = (string) $s;
|
275 |
+
if ('' === $s) {
|
276 |
+
return '';
|
277 |
+
}
|
278 |
+
|
279 |
+
$encoding = self::getEncoding($encoding);
|
280 |
+
|
281 |
+
if ('UTF-8' === $encoding) {
|
282 |
+
$encoding = null;
|
283 |
+
if (!preg_match('//u', $s)) {
|
284 |
+
$s = @iconv('UTF-8', 'UTF-8//IGNORE', $s);
|
285 |
+
}
|
286 |
+
} else {
|
287 |
+
$s = iconv($encoding, 'UTF-8//IGNORE', $s);
|
288 |
+
}
|
289 |
+
|
290 |
+
if (MB_CASE_TITLE == $mode) {
|
291 |
+
static $titleRegexp = null;
|
292 |
+
if (null === $titleRegexp) {
|
293 |
+
$titleRegexp = self::getData('titleCaseRegexp');
|
294 |
+
}
|
295 |
+
$s = preg_replace_callback($titleRegexp, array(__CLASS__, 'title_case'), $s);
|
296 |
+
} else {
|
297 |
+
if (MB_CASE_UPPER == $mode) {
|
298 |
+
static $upper = null;
|
299 |
+
if (null === $upper) {
|
300 |
+
$upper = self::getData('upperCase');
|
301 |
+
}
|
302 |
+
$map = $upper;
|
303 |
+
} else {
|
304 |
+
if (self::MB_CASE_FOLD === $mode) {
|
305 |
+
$s = str_replace(self::$caseFold[0], self::$caseFold[1], $s);
|
306 |
+
}
|
307 |
+
|
308 |
+
static $lower = null;
|
309 |
+
if (null === $lower) {
|
310 |
+
$lower = self::getData('lowerCase');
|
311 |
+
}
|
312 |
+
$map = $lower;
|
313 |
+
}
|
314 |
+
|
315 |
+
static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4);
|
316 |
+
|
317 |
+
$i = 0;
|
318 |
+
$len = \strlen($s);
|
319 |
+
|
320 |
+
while ($i < $len) {
|
321 |
+
$ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"];
|
322 |
+
$uchr = substr($s, $i, $ulen);
|
323 |
+
$i += $ulen;
|
324 |
+
|
325 |
+
if (isset($map[$uchr])) {
|
326 |
+
$uchr = $map[$uchr];
|
327 |
+
$nlen = \strlen($uchr);
|
328 |
+
|
329 |
+
if ($nlen == $ulen) {
|
330 |
+
$nlen = $i;
|
331 |
+
do {
|
332 |
+
$s[--$nlen] = $uchr[--$ulen];
|
333 |
+
} while ($ulen);
|
334 |
+
} else {
|
335 |
+
$s = substr_replace($s, $uchr, $i - $ulen, $ulen);
|
336 |
+
$len += $nlen - $ulen;
|
337 |
+
$i += $nlen - $ulen;
|
338 |
+
}
|
339 |
+
}
|
340 |
+
}
|
341 |
+
}
|
342 |
+
|
343 |
+
if (null === $encoding) {
|
344 |
+
return $s;
|
345 |
+
}
|
346 |
+
|
347 |
+
return iconv('UTF-8', $encoding.'//IGNORE', $s);
|
348 |
+
}
|
349 |
+
|
350 |
+
public static function mb_internal_encoding($encoding = null)
|
351 |
+
{
|
352 |
+
if (null === $encoding) {
|
353 |
+
return self::$internalEncoding;
|
354 |
+
}
|
355 |
+
|
356 |
+
$encoding = self::getEncoding($encoding);
|
357 |
+
|
358 |
+
if ('UTF-8' === $encoding || false !== @iconv($encoding, $encoding, ' ')) {
|
359 |
+
self::$internalEncoding = $encoding;
|
360 |
+
|
361 |
+
return true;
|
362 |
+
}
|
363 |
+
|
364 |
+
return false;
|
365 |
+
}
|
366 |
+
|
367 |
+
public static function mb_language($lang = null)
|
368 |
+
{
|
369 |
+
if (null === $lang) {
|
370 |
+
return self::$language;
|
371 |
+
}
|
372 |
+
|
373 |
+
switch ($lang = strtolower($lang)) {
|
374 |
+
case 'uni':
|
375 |
+
case 'neutral':
|
376 |
+
self::$language = $lang;
|
377 |
+
|
378 |
+
return true;
|
379 |
+
}
|
380 |
+
|
381 |
+
return false;
|
382 |
+
}
|
383 |
+
|
384 |
+
public static function mb_list_encodings()
|
385 |
+
{
|
386 |
+
return array('UTF-8');
|
387 |
+
}
|
388 |
+
|
389 |
+
public static function mb_encoding_aliases($encoding)
|
390 |
+
{
|
391 |
+
switch (strtoupper($encoding)) {
|
392 |
+
case 'UTF8':
|
393 |
+
case 'UTF-8':
|
394 |
+
return array('utf8');
|
395 |
+
}
|
396 |
+
|
397 |
+
return false;
|
398 |
+
}
|
399 |
+
|
400 |
+
public static function mb_check_encoding($var = null, $encoding = null)
|
401 |
+
{
|
402 |
+
if (null === $encoding) {
|
403 |
+
if (null === $var) {
|
404 |
+
return false;
|
405 |
+
}
|
406 |
+
$encoding = self::$internalEncoding;
|
407 |
+
}
|
408 |
+
|
409 |
+
return self::mb_detect_encoding($var, array($encoding)) || false !== @iconv($encoding, $encoding, $var);
|
410 |
+
}
|
411 |
+
|
412 |
+
public static function mb_detect_encoding($str, $encodingList = null, $strict = false)
|
413 |
+
{
|
414 |
+
if (null === $encodingList) {
|
415 |
+
$encodingList = self::$encodingList;
|
416 |
+
} else {
|
417 |
+
if (!\is_array($encodingList)) {
|
418 |
+
$encodingList = array_map('trim', explode(',', $encodingList));
|
419 |
+
}
|
420 |
+
$encodingList = array_map('strtoupper', $encodingList);
|
421 |
+
}
|
422 |
+
|
423 |
+
foreach ($encodingList as $enc) {
|
424 |
+
switch ($enc) {
|
425 |
+
case 'ASCII':
|
426 |
+
if (!preg_match('/[\x80-\xFF]/', $str)) {
|
427 |
+
return $enc;
|
428 |
+
}
|
429 |
+
break;
|
430 |
+
|
431 |
+
case 'UTF8':
|
432 |
+
case 'UTF-8':
|
433 |
+
if (preg_match('//u', $str)) {
|
434 |
+
return 'UTF-8';
|
435 |
+
}
|
436 |
+
break;
|
437 |
+
|
438 |
+
default:
|
439 |
+
if (0 === strncmp($enc, 'ISO-8859-', 9)) {
|
440 |
+
return $enc;
|
441 |
+
}
|
442 |
+
}
|
443 |
+
}
|
444 |
+
|
445 |
+
return false;
|
446 |
+
}
|
447 |
+
|
448 |
+
public static function mb_detect_order($encodingList = null)
|
449 |
+
{
|
450 |
+
if (null === $encodingList) {
|
451 |
+
return self::$encodingList;
|
452 |
+
}
|
453 |
+
|
454 |
+
if (!\is_array($encodingList)) {
|
455 |
+
$encodingList = array_map('trim', explode(',', $encodingList));
|
456 |
+
}
|
457 |
+
$encodingList = array_map('strtoupper', $encodingList);
|
458 |
+
|
459 |
+
foreach ($encodingList as $enc) {
|
460 |
+
switch ($enc) {
|
461 |
+
default:
|
462 |
+
if (strncmp($enc, 'ISO-8859-', 9)) {
|
463 |
+
return false;
|
464 |
+
}
|
465 |
+
// no break
|
466 |
+
case 'ASCII':
|
467 |
+
case 'UTF8':
|
468 |
+
case 'UTF-8':
|
469 |
+
}
|
470 |
+
}
|
471 |
+
|
472 |
+
self::$encodingList = $encodingList;
|
473 |
+
|
474 |
+
return true;
|
475 |
+
}
|
476 |
+
|
477 |
+
public static function mb_strlen($s, $encoding = null)
|
478 |
+
{
|
479 |
+
$encoding = self::getEncoding($encoding);
|
480 |
+
if ('CP850' === $encoding || 'ASCII' === $encoding) {
|
481 |
+
return \strlen($s);
|
482 |
+
}
|
483 |
+
|
484 |
+
return @iconv_strlen($s, $encoding);
|
485 |
+
}
|
486 |
+
|
487 |
+
public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null)
|
488 |
+
{
|
489 |
+
$encoding = self::getEncoding($encoding);
|
490 |
+
if ('CP850' === $encoding || 'ASCII' === $encoding) {
|
491 |
+
return strpos($haystack, $needle, $offset);
|
492 |
+
}
|
493 |
+
|
494 |
+
$needle = (string) $needle;
|
495 |
+
if ('' === $needle) {
|
496 |
+
trigger_error(__METHOD__.': Empty delimiter', E_USER_WARNING);
|
497 |
+
|
498 |
+
return false;
|
499 |
+
}
|
500 |
+
|
501 |
+
return iconv_strpos($haystack, $needle, $offset, $encoding);
|
502 |
+
}
|
503 |
+
|
504 |
+
public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null)
|
505 |
+
{
|
506 |
+
$encoding = self::getEncoding($encoding);
|
507 |
+
if ('CP850' === $encoding || 'ASCII' === $encoding) {
|
508 |
+
return strrpos($haystack, $needle, $offset);
|
509 |
+
}
|
510 |
+
|
511 |
+
if ($offset != (int) $offset) {
|
512 |
+
$offset = 0;
|
513 |
+
} elseif ($offset = (int) $offset) {
|
514 |
+
if ($offset < 0) {
|
515 |
+
if (0 > $offset += self::mb_strlen($needle)) {
|
516 |
+
$haystack = self::mb_substr($haystack, 0, $offset, $encoding);
|
517 |
+
}
|
518 |
+
$offset = 0;
|
519 |
+
} else {
|
520 |
+
$haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding);
|
521 |
+
}
|
522 |
+
}
|
523 |
+
|
524 |
+
$pos = iconv_strrpos($haystack, $needle, $encoding);
|
525 |
+
|
526 |
+
return false !== $pos ? $offset + $pos : false;
|
527 |
+
}
|
528 |
+
|
529 |
+
public static function mb_str_split($string, $split_length = 1, $encoding = null)
|
530 |
+
{
|
531 |
+
if (null !== $string && !\is_scalar($string) && !(\is_object($string) && \method_exists($string, '__toString'))) {
|
532 |
+
trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', E_USER_WARNING);
|
533 |
+
|
534 |
+
return null;
|
535 |
+
}
|
536 |
+
|
537 |
+
if (1 > $split_length = (int) $split_length) {
|
538 |
+
trigger_error('The length of each segment must be greater than zero', E_USER_WARNING);
|
539 |
+
|
540 |
+
return false;
|
541 |
+
}
|
542 |
+
|
543 |
+
if (null === $encoding) {
|
544 |
+
$encoding = mb_internal_encoding();
|
545 |
+
}
|
546 |
+
|
547 |
+
if ('UTF-8' === $encoding = self::getEncoding($encoding)) {
|
548 |
+
$rx = '/(';
|
549 |
+
while (65535 < $split_length) {
|
550 |
+
$rx .= '.{65535}';
|
551 |
+
$split_length -= 65535;
|
552 |
+
}
|
553 |
+
$rx .= '.{'.$split_length.'})/us';
|
554 |
+
|
555 |
+
return preg_split($rx, $string, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
|
556 |
+
}
|
557 |
+
|
558 |
+
$result = array();
|
559 |
+
$length = mb_strlen($string, $encoding);
|
560 |
+
|
561 |
+
for ($i = 0; $i < $length; $i += $split_length) {
|
562 |
+
$result[] = mb_substr($string, $i, $split_length, $encoding);
|
563 |
+
}
|
564 |
+
|
565 |
+
return $result;
|
566 |
+
}
|
567 |
+
|
568 |
+
public static function mb_strtolower($s, $encoding = null)
|
569 |
+
{
|
570 |
+
return self::mb_convert_case($s, MB_CASE_LOWER, $encoding);
|
571 |
+
}
|
572 |
+
|
573 |
+
public static function mb_strtoupper($s, $encoding = null)
|
574 |
+
{
|
575 |
+
return self::mb_convert_case($s, MB_CASE_UPPER, $encoding);
|
576 |
+
}
|
577 |
+
|
578 |
+
public static function mb_substitute_character($c = null)
|
579 |
+
{
|
580 |
+
if (0 === strcasecmp($c, 'none')) {
|
581 |
+
return true;
|
582 |
+
}
|
583 |
+
|
584 |
+
return null !== $c ? false : 'none';
|
585 |
+
}
|
586 |
+
|
587 |
+
public static function mb_substr($s, $start, $length = null, $encoding = null)
|
588 |
+
{
|
589 |
+
$encoding = self::getEncoding($encoding);
|
590 |
+
if ('CP850' === $encoding || 'ASCII' === $encoding) {
|
591 |
+
return (string) substr($s, $start, null === $length ? 2147483647 : $length);
|
592 |
+
}
|
593 |
+
|
594 |
+
if ($start < 0) {
|
595 |
+
$start = iconv_strlen($s, $encoding) + $start;
|
596 |
+
if ($start < 0) {
|
597 |
+
$start = 0;
|
598 |
+
}
|
599 |
+
}
|
600 |
+
|
601 |
+
if (null === $length) {
|
602 |
+
$length = 2147483647;
|
603 |
+
} elseif ($length < 0) {
|
604 |
+
$length = iconv_strlen($s, $encoding) + $length - $start;
|
605 |
+
if ($length < 0) {
|
606 |
+
return '';
|
607 |
+
}
|
608 |
+
}
|
609 |
+
|
610 |
+
return (string) iconv_substr($s, $start, $length, $encoding);
|
611 |
+
}
|
612 |
+
|
613 |
+
public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null)
|
614 |
+
{
|
615 |
+
$haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
|
616 |
+
$needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
|
617 |
+
|
618 |
+
return self::mb_strpos($haystack, $needle, $offset, $encoding);
|
619 |
+
}
|
620 |
+
|
621 |
+
public static function mb_stristr($haystack, $needle, $part = false, $encoding = null)
|
622 |
+
{
|
623 |
+
$pos = self::mb_stripos($haystack, $needle, 0, $encoding);
|
624 |
+
|
625 |
+
return self::getSubpart($pos, $part, $haystack, $encoding);
|
626 |
+
}
|
627 |
+
|
628 |
+
public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null)
|
629 |
+
{
|
630 |
+
$encoding = self::getEncoding($encoding);
|
631 |
+
if ('CP850' === $encoding || 'ASCII' === $encoding) {
|
632 |
+
return strrchr($haystack, $needle, $part);
|
633 |
+
}
|
634 |
+
$needle = self::mb_substr($needle, 0, 1, $encoding);
|
635 |
+
$pos = iconv_strrpos($haystack, $needle, $encoding);
|
636 |
+
|
637 |
+
return self::getSubpart($pos, $part, $haystack, $encoding);
|
638 |
+
}
|
639 |
+
|
640 |
+
public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null)
|
641 |
+
{
|
642 |
+
$needle = self::mb_substr($needle, 0, 1, $encoding);
|
643 |
+
$pos = self::mb_strripos($haystack, $needle, $encoding);
|
644 |
+
|
645 |
+
return self::getSubpart($pos, $part, $haystack, $encoding);
|
646 |
+
}
|
647 |
+
|
648 |
+
public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null)
|
649 |
+
{
|
650 |
+
$haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding);
|
651 |
+
$needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding);
|
652 |
+
|
653 |
+
return self::mb_strrpos($haystack, $needle, $offset, $encoding);
|
654 |
+
}
|
655 |
+
|
656 |
+
public static function mb_strstr($haystack, $needle, $part = false, $encoding = null)
|
657 |
+
{
|
658 |
+
$pos = strpos($haystack, $needle);
|
659 |
+
if (false === $pos) {
|
660 |
+
return false;
|
661 |
+
}
|
662 |
+
if ($part) {
|
663 |
+
return substr($haystack, 0, $pos);
|
664 |
+
}
|
665 |
+
|
666 |
+
return substr($haystack, $pos);
|
667 |
+
}
|
668 |
+
|
669 |
+
public static function mb_get_info($type = 'all')
|
670 |
+
{
|
671 |
+
$info = array(
|
672 |
+
'internal_encoding' => self::$internalEncoding,
|
673 |
+
'http_output' => 'pass',
|
674 |
+
'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)',
|
675 |
+
'func_overload' => 0,
|
676 |
+
'func_overload_list' => 'no overload',
|
677 |
+
'mail_charset' => 'UTF-8',
|
678 |
+
'mail_header_encoding' => 'BASE64',
|
679 |
+
'mail_body_encoding' => 'BASE64',
|
680 |
+
'illegal_chars' => 0,
|
681 |
+
'encoding_translation' => 'Off',
|
682 |
+
'language' => self::$language,
|
683 |
+
'detect_order' => self::$encodingList,
|
684 |
+
'substitute_character' => 'none',
|
685 |
+
'strict_detection' => 'Off',
|
686 |
+
);
|
687 |
+
|
688 |
+
if ('all' === $type) {
|
689 |
+
return $info;
|
690 |
+
}
|
691 |
+
if (isset($info[$type])) {
|
692 |
+
return $info[$type];
|
693 |
+
}
|
694 |
+
|
695 |
+
return false;
|
696 |
+
}
|
697 |
+
|
698 |
+
public static function mb_http_input($type = '')
|
699 |
+
{
|
700 |
+
return false;
|
701 |
+
}
|
702 |
+
|
703 |
+
public static function mb_http_output($encoding = null)
|
704 |
+
{
|
705 |
+
return null !== $encoding ? 'pass' === $encoding : 'pass';
|
706 |
+
}
|
707 |
+
|
708 |
+
public static function mb_strwidth($s, $encoding = null)
|
709 |
+
{
|
710 |
+
$encoding = self::getEncoding($encoding);
|
711 |
+
|
712 |
+
if ('UTF-8' !== $encoding) {
|
713 |
+
$s = iconv($encoding, 'UTF-8//IGNORE', $s);
|
714 |
+
}
|
715 |
+
|
716 |
+
$s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide);
|
717 |
+
|
718 |
+
return ($wide << 1) + iconv_strlen($s, 'UTF-8');
|
719 |
+
}
|
720 |
+
|
721 |
+
public static function mb_substr_count($haystack, $needle, $encoding = null)
|
722 |
+
{
|
723 |
+
return substr_count($haystack, $needle);
|
724 |
+
}
|
725 |
+
|
726 |
+
public static function mb_output_handler($contents, $status)
|
727 |
+
{
|
728 |
+
return $contents;
|
729 |
+
}
|
730 |
+
|
731 |
+
public static function mb_chr($code, $encoding = null)
|
732 |
+
{
|
733 |
+
if (0x80 > $code %= 0x200000) {
|
734 |
+
$s = \chr($code);
|
735 |
+
} elseif (0x800 > $code) {
|
736 |
+
$s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F);
|
737 |
+
} elseif (0x10000 > $code) {
|
738 |
+
$s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
|
739 |
+
} else {
|
740 |
+
$s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F);
|
741 |
+
}
|
742 |
+
|
743 |
+
if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
|
744 |
+
$s = mb_convert_encoding($s, $encoding, 'UTF-8');
|
745 |
+
}
|
746 |
+
|
747 |
+
return $s;
|
748 |
+
}
|
749 |
+
|
750 |
+
public static function mb_ord($s, $encoding = null)
|
751 |
+
{
|
752 |
+
if ('UTF-8' !== $encoding = self::getEncoding($encoding)) {
|
753 |
+
$s = mb_convert_encoding($s, 'UTF-8', $encoding);
|
754 |
+
}
|
755 |
+
|
756 |
+
if (1 === \strlen($s)) {
|
757 |
+
return \ord($s);
|
758 |
+
}
|
759 |
+
|
760 |
+
$code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0;
|
761 |
+
if (0xF0 <= $code) {
|
762 |
+
return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80;
|
763 |
+
}
|
764 |
+
if (0xE0 <= $code) {
|
765 |
+
return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80;
|
766 |
+
}
|
767 |
+
if (0xC0 <= $code) {
|
768 |
+
return (($code - 0xC0) << 6) + $s[2] - 0x80;
|
769 |
+
}
|
770 |
+
|
771 |
+
return $code;
|
772 |
+
}
|
773 |
+
|
774 |
+
private static function getSubpart($pos, $part, $haystack, $encoding)
|
775 |
+
{
|
776 |
+
if (false === $pos) {
|
777 |
+
return false;
|
778 |
+
}
|
779 |
+
if ($part) {
|
780 |
+
return self::mb_substr($haystack, 0, $pos, $encoding);
|
781 |
+
}
|
782 |
+
|
783 |
+
return self::mb_substr($haystack, $pos, null, $encoding);
|
784 |
+
}
|
785 |
+
|
786 |
+
private static function html_encoding_callback(array $m)
|
787 |
+
{
|
788 |
+
$i = 1;
|
789 |
+
$entities = '';
|
790 |
+
$m = unpack('C*', htmlentities($m[0], ENT_COMPAT, 'UTF-8'));
|
791 |
+
|
792 |
+
while (isset($m[$i])) {
|
793 |
+
if (0x80 > $m[$i]) {
|
794 |
+
$entities .= \chr($m[$i++]);
|
795 |
+
continue;
|
796 |
+
}
|
797 |
+
if (0xF0 <= $m[$i]) {
|
798 |
+
$c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
|
799 |
+
} elseif (0xE0 <= $m[$i]) {
|
800 |
+
$c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
|
801 |
+
} else {
|
802 |
+
$c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
|
803 |
+
}
|
804 |
+
|
805 |
+
$entities .= '&#'.$c.';';
|
806 |
+
}
|
807 |
+
|
808 |
+
return $entities;
|
809 |
+
}
|
810 |
+
|
811 |
+
private static function title_case(array $s)
|
812 |
+
{
|
813 |
+
return self::mb_convert_case($s[1], MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], MB_CASE_LOWER, 'UTF-8');
|
814 |
+
}
|
815 |
+
|
816 |
+
private static function getData($file)
|
817 |
+
{
|
818 |
+
if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) {
|
819 |
+
return require $file;
|
820 |
+
}
|
821 |
+
|
822 |
+
return false;
|
823 |
+
}
|
824 |
+
|
825 |
+
private static function getEncoding($encoding)
|
826 |
+
{
|
827 |
+
if (null === $encoding) {
|
828 |
+
return self::$internalEncoding;
|
829 |
+
}
|
830 |
+
|
831 |
+
if ('UTF-8' === $encoding) {
|
832 |
+
return 'UTF-8';
|
833 |
+
}
|
834 |
+
|
835 |
+
$encoding = strtoupper($encoding);
|
836 |
+
|
837 |
+
if ('8BIT' === $encoding || 'BINARY' === $encoding) {
|
838 |
+
return 'CP850';
|
839 |
+
}
|
840 |
+
|
841 |
+
if ('UTF8' === $encoding) {
|
842 |
+
return 'UTF-8';
|
843 |
+
}
|
844 |
+
|
845 |
+
return $encoding;
|
846 |
+
}
|
847 |
+
}
|
vendor/symfony/polyfill-mbstring/README.md
ADDED
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Symfony Polyfill / Mbstring
|
2 |
+
===========================
|
3 |
+
|
4 |
+
This component provides a partial, native PHP implementation for the
|
5 |
+
[Mbstring](https://php.net/mbstring) extension.
|
6 |
+
|
7 |
+
More information can be found in the
|
8 |
+
[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md).
|
9 |
+
|
10 |
+
License
|
11 |
+
=======
|
12 |
+
|
13 |
+
This library is released under the [MIT license](LICENSE).
|
vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php
ADDED
@@ -0,0 +1,1397 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
return array (
|
4 |
+
'A' => 'a',
|
5 |
+
'B' => 'b',
|
6 |
+
'C' => 'c',
|
7 |
+
'D' => 'd',
|
8 |
+
'E' => 'e',
|
9 |
+
'F' => 'f',
|
10 |
+
'G' => 'g',
|
11 |
+
'H' => 'h',
|
12 |
+
'I' => 'i',
|
13 |
+
'J' => 'j',
|
14 |
+
'K' => 'k',
|
15 |
+
'L' => 'l',
|
16 |
+
'M' => 'm',
|
17 |
+
'N' => 'n',
|
18 |
+
'O' => 'o',
|
19 |
+
'P' => 'p',
|
20 |
+
'Q' => 'q',
|
21 |
+
'R' => 'r',
|
22 |
+
'S' => 's',
|
23 |
+
'T' => 't',
|
24 |
+
'U' => 'u',
|
25 |
+
'V' => 'v',
|
26 |
+
'W' => 'w',
|
27 |
+
'X' => 'x',
|
28 |
+
'Y' => 'y',
|
29 |
+
'Z' => 'z',
|
30 |
+
'À' => 'à',
|
31 |
+
'Á' => 'á',
|
32 |
+
'Â' => 'â',
|
33 |
+
'Ã' => 'ã',
|
34 |
+
'Ä' => 'ä',
|
35 |
+
'Å' => 'å',
|
36 |
+
'Æ' => 'æ',
|
37 |
+
'Ç' => 'ç',
|
38 |
+
'È' => 'è',
|
39 |
+
'É' => 'é',
|
40 |
+
'Ê' => 'ê',
|
41 |
+
'Ë' => 'ë',
|
42 |
+
'Ì' => 'ì',
|
43 |
+
'Í' => 'í',
|
44 |
+
'Î' => 'î',
|
45 |
+
'Ï' => 'ï',
|
46 |
+
'Ð' => 'ð',
|
47 |
+
'Ñ' => 'ñ',
|
48 |
+
'Ò' => 'ò',
|
49 |
+
'Ó' => 'ó',
|
50 |
+
'Ô' => 'ô',
|
51 |
+
'Õ' => 'õ',
|
52 |
+
'Ö' => 'ö',
|
53 |
+
'Ø' => 'ø',
|
54 |
+
'Ù' => 'ù',
|
55 |
+
'Ú' => 'ú',
|
56 |
+
'Û' => 'û',
|
57 |
+
'Ü' => 'ü',
|
58 |
+
'Ý' => 'ý',
|
59 |
+
'Þ' => 'þ',
|
60 |
+
'Ā' => 'ā',
|
61 |
+
'Ă' => 'ă',
|
62 |
+
'Ą' => 'ą',
|
63 |
+
'Ć' => 'ć',
|
64 |
+
'Ĉ' => 'ĉ',
|
65 |
+
'Ċ' => 'ċ',
|
66 |
+
'Č' => 'č',
|
67 |
+
'Ď' => 'ď',
|
68 |
+
'Đ' => 'đ',
|
69 |
+
'Ē' => 'ē',
|
70 |
+
'Ĕ' => 'ĕ',
|
71 |
+
'Ė' => 'ė',
|
72 |
+
'Ę' => 'ę',
|
73 |
+
'Ě' => 'ě',
|
74 |
+
'Ĝ' => 'ĝ',
|
75 |
+
'Ğ' => 'ğ',
|
76 |
+
'Ġ' => 'ġ',
|
77 |
+
'Ģ' => 'ģ',
|
78 |
+
'Ĥ' => 'ĥ',
|
79 |
+
'Ħ' => 'ħ',
|
80 |
+
'Ĩ' => 'ĩ',
|
81 |
+
'Ī' => 'ī',
|
82 |
+
'Ĭ' => 'ĭ',
|
83 |
+
'Į' => 'į',
|
84 |
+
'İ' => 'i',
|
85 |
+
'IJ' => 'ij',
|
86 |
+
'Ĵ' => 'ĵ',
|
87 |
+
'Ķ' => 'ķ',
|
88 |
+
'Ĺ' => 'ĺ',
|
89 |
+
'Ļ' => 'ļ',
|
90 |
+
'Ľ' => 'ľ',
|
91 |
+
'Ŀ' => 'ŀ',
|
92 |
+
'Ł' => 'ł',
|
93 |
+
'Ń' => 'ń',
|
94 |
+
'Ņ' => 'ņ',
|
95 |
+
'Ň' => 'ň',
|
96 |
+
'Ŋ' => 'ŋ',
|
97 |
+
'Ō' => 'ō',
|
98 |
+
'Ŏ' => 'ŏ',
|
99 |
+
'Ő' => 'ő',
|
100 |
+
'Œ' => 'œ',
|
101 |
+
'Ŕ' => 'ŕ',
|
102 |
+
'Ŗ' => 'ŗ',
|
103 |
+
'Ř' => 'ř',
|
104 |
+
'Ś' => 'ś',
|
105 |
+
'Ŝ' => 'ŝ',
|
106 |
+
'Ş' => 'ş',
|
107 |
+
'Š' => 'š',
|
108 |
+
'Ţ' => 'ţ',
|
109 |
+
'Ť' => 'ť',
|
110 |
+
'Ŧ' => 'ŧ',
|
111 |
+
'Ũ' => 'ũ',
|
112 |
+
'Ū' => 'ū',
|
113 |
+
'Ŭ' => 'ŭ',
|
114 |
+
'Ů' => 'ů',
|
115 |
+
'Ű' => 'ű',
|
116 |
+
'Ų' => 'ų',
|
117 |
+
'Ŵ' => 'ŵ',
|
118 |
+
'Ŷ' => 'ŷ',
|
119 |
+
'Ÿ' => 'ÿ',
|
120 |
+
'Ź' => 'ź',
|
121 |
+
'Ż' => 'ż',
|
122 |
+
'Ž' => 'ž',
|
123 |
+
'Ɓ' => 'ɓ',
|
124 |
+
'Ƃ' => 'ƃ',
|
125 |
+
'Ƅ' => 'ƅ',
|
126 |
+
'Ɔ' => 'ɔ',
|
127 |
+
'Ƈ' => 'ƈ',
|
128 |
+
'Ɖ' => 'ɖ',
|
129 |
+
'Ɗ' => 'ɗ',
|
130 |
+
'Ƌ' => 'ƌ',
|
131 |
+
'Ǝ' => 'ǝ',
|
132 |
+
'Ə' => 'ə',
|
133 |
+
'Ɛ' => 'ɛ',
|
134 |
+
'Ƒ' => 'ƒ',
|
135 |
+
'Ɠ' => 'ɠ',
|
136 |
+
'Ɣ' => 'ɣ',
|
137 |
+
'Ɩ' => 'ɩ',
|
138 |
+
'Ɨ' => 'ɨ',
|
139 |
+
'Ƙ' => 'ƙ',
|
140 |
+
'Ɯ' => 'ɯ',
|
141 |
+
'Ɲ' => 'ɲ',
|
142 |
+
'Ɵ' => 'ɵ',
|
143 |
+
'Ơ' => 'ơ',
|
144 |
+
'Ƣ' => 'ƣ',
|
145 |
+
'Ƥ' => 'ƥ',
|
146 |
+
'Ʀ' => 'ʀ',
|
147 |
+
'Ƨ' => 'ƨ',
|
148 |
+
'Ʃ' => 'ʃ',
|
149 |
+
'Ƭ' => 'ƭ',
|
150 |
+
'Ʈ' => 'ʈ',
|
151 |
+
'Ư' => 'ư',
|
152 |
+
'Ʊ' => 'ʊ',
|
153 |
+
'Ʋ' => 'ʋ',
|
154 |
+
'Ƴ' => 'ƴ',
|
155 |
+
'Ƶ' => 'ƶ',
|
156 |
+
'Ʒ' => 'ʒ',
|
157 |
+
'Ƹ' => 'ƹ',
|
158 |
+
'Ƽ' => 'ƽ',
|
159 |
+
'DŽ' => 'dž',
|
160 |
+
'Dž' => 'dž',
|
161 |
+
'LJ' => 'lj',
|
162 |
+
'Lj' => 'lj',
|
163 |
+
'NJ' => 'nj',
|
164 |
+
'Nj' => 'nj',
|
165 |
+
'Ǎ' => 'ǎ',
|
166 |
+
'Ǐ' => 'ǐ',
|
167 |
+
'Ǒ' => 'ǒ',
|
168 |
+
'Ǔ' => 'ǔ',
|
169 |
+
'Ǖ' => 'ǖ',
|
170 |
+
'Ǘ' => 'ǘ',
|
171 |
+
'Ǚ' => 'ǚ',
|
172 |
+
'Ǜ' => 'ǜ',
|
173 |
+
'Ǟ' => 'ǟ',
|
174 |
+
'Ǡ' => 'ǡ',
|
175 |
+
'Ǣ' => 'ǣ',
|
176 |
+
'Ǥ' => 'ǥ',
|
177 |
+
'Ǧ' => 'ǧ',
|
178 |
+
'Ǩ' => 'ǩ',
|
179 |
+
'Ǫ' => 'ǫ',
|
180 |
+
'Ǭ' => 'ǭ',
|
181 |
+
'Ǯ' => 'ǯ',
|
182 |
+
'DZ' => 'dz',
|
183 |
+
'Dz' => 'dz',
|
184 |
+
'Ǵ' => 'ǵ',
|
185 |
+
'Ƕ' => 'ƕ',
|
186 |
+
'Ƿ' => 'ƿ',
|
187 |
+
'Ǹ' => 'ǹ',
|
188 |
+
'Ǻ' => 'ǻ',
|
189 |
+
'Ǽ' => 'ǽ',
|
190 |
+
'Ǿ' => 'ǿ',
|
191 |
+
'Ȁ' => 'ȁ',
|
192 |
+
'Ȃ' => 'ȃ',
|
193 |
+
'Ȅ' => 'ȅ',
|
194 |
+
'Ȇ' => 'ȇ',
|
195 |
+
'Ȉ' => 'ȉ',
|
196 |
+
'Ȋ' => 'ȋ',
|
197 |
+
'Ȍ' => 'ȍ',
|
198 |
+
'Ȏ' => 'ȏ',
|
199 |
+
'Ȑ' => 'ȑ',
|
200 |
+
'Ȓ' => 'ȓ',
|
201 |
+
'Ȕ' => 'ȕ',
|
202 |
+
'Ȗ' => 'ȗ',
|
203 |
+
'Ș' => 'ș',
|
204 |
+
'Ț' => 'ț',
|
205 |
+
'Ȝ' => 'ȝ',
|
206 |
+
'Ȟ' => 'ȟ',
|
207 |
+
'Ƞ' => 'ƞ',
|
208 |
+
'Ȣ' => 'ȣ',
|
209 |
+
'Ȥ' => 'ȥ',
|
210 |
+
'Ȧ' => 'ȧ',
|
211 |
+
'Ȩ' => 'ȩ',
|
212 |
+
'Ȫ' => 'ȫ',
|
213 |
+
'Ȭ' => 'ȭ',
|
214 |
+
'Ȯ' => 'ȯ',
|
215 |
+
'Ȱ' => 'ȱ',
|
216 |
+
'Ȳ' => 'ȳ',
|
217 |
+
'Ⱥ' => 'ⱥ',
|
218 |
+
'Ȼ' => 'ȼ',
|
219 |
+
'Ƚ' => 'ƚ',
|
220 |
+
'Ⱦ' => 'ⱦ',
|
221 |
+
'Ɂ' => 'ɂ',
|
222 |
+
'Ƀ' => 'ƀ',
|
223 |
+
'Ʉ' => 'ʉ',
|
224 |
+
'Ʌ' => 'ʌ',
|
225 |
+
'Ɇ' => 'ɇ',
|
226 |
+
'Ɉ' => 'ɉ',
|
227 |
+
'Ɋ' => 'ɋ',
|
228 |
+
'Ɍ' => 'ɍ',
|
229 |
+
'Ɏ' => 'ɏ',
|
230 |
+
'Ͱ' => 'ͱ',
|
231 |
+
'Ͳ' => 'ͳ',
|
232 |
+
'Ͷ' => 'ͷ',
|
233 |
+
'Ϳ' => 'ϳ',
|
234 |
+
'Ά' => 'ά',
|
235 |
+
'Έ' => 'έ',
|
236 |
+
'Ή' => 'ή',
|
237 |
+
'Ί' => 'ί',
|
238 |
+
'Ό' => 'ό',
|
239 |
+
'Ύ' => 'ύ',
|
240 |
+
'Ώ' => 'ώ',
|
241 |
+
'Α' => 'α',
|
242 |
+
'Β' => 'β',
|
243 |
+
'Γ' => 'γ',
|
244 |
+
'Δ' => 'δ',
|
245 |
+
'Ε' => 'ε',
|
246 |
+
'Ζ' => 'ζ',
|
247 |
+
'Η' => 'η',
|
248 |
+
'Θ' => 'θ',
|
249 |
+
'Ι' => 'ι',
|
250 |
+
'Κ' => 'κ',
|
251 |
+
'Λ' => 'λ',
|
252 |
+
'Μ' => 'μ',
|
253 |
+
'Ν' => 'ν',
|
254 |
+
'Ξ' => 'ξ',
|
255 |
+
'Ο' => 'ο',
|
256 |
+
'Π' => 'π',
|
257 |
+
'Ρ' => 'ρ',
|
258 |
+
'Σ' => 'σ',
|
259 |
+
'Τ' => 'τ',
|
260 |
+
'Υ' => 'υ',
|
261 |
+
'Φ' => 'φ',
|
262 |
+
'Χ' => 'χ',
|
263 |
+
'Ψ' => 'ψ',
|
264 |
+
'Ω' => 'ω',
|
265 |
+
'Ϊ' => 'ϊ',
|
266 |
+
'Ϋ' => 'ϋ',
|
267 |
+
'Ϗ' => 'ϗ',
|
268 |
+
'Ϙ' => 'ϙ',
|
269 |
+
'Ϛ' => 'ϛ',
|
270 |
+
'Ϝ' => 'ϝ',
|
271 |
+
'Ϟ' => 'ϟ',
|
272 |
+
'Ϡ' => 'ϡ',
|
273 |
+
'Ϣ' => 'ϣ',
|
274 |
+
'Ϥ' => 'ϥ',
|
275 |
+
'Ϧ' => 'ϧ',
|
276 |
+
'Ϩ' => 'ϩ',
|
277 |
+
'Ϫ' => 'ϫ',
|
278 |
+
'Ϭ' => 'ϭ',
|
279 |
+
'Ϯ' => 'ϯ',
|
280 |
+
'ϴ' => 'θ',
|
281 |
+
'Ϸ' => 'ϸ',
|
282 |
+
'Ϲ' => 'ϲ',
|
283 |
+
'Ϻ' => 'ϻ',
|
284 |
+
'Ͻ' => 'ͻ',
|
285 |
+
'Ͼ' => 'ͼ',
|
286 |
+
'Ͽ' => 'ͽ',
|
287 |
+
'Ѐ' => 'ѐ',
|
288 |
+
'Ё' => 'ё',
|
289 |
+
'Ђ' => 'ђ',
|
290 |
+
'Ѓ' => 'ѓ',
|
291 |
+
'Є' => 'є',
|
292 |
+
'Ѕ' => 'ѕ',
|
293 |
+
'І' => 'і',
|
294 |
+
'Ї' => 'ї',
|
295 |
+
'Ј' => 'ј',
|
296 |
+
'Љ' => 'љ',
|
297 |
+
'Њ' => 'њ',
|
298 |
+
'Ћ' => 'ћ',
|
299 |
+
'Ќ' => 'ќ',
|
300 |
+
'Ѝ' => 'ѝ',
|
301 |
+
'Ў' => 'ў',
|
302 |
+
'Џ' => 'џ',
|
303 |
+
'А' => 'а',
|
304 |
+
'Б' => 'б',
|
305 |
+
'В' => 'в',
|
306 |
+
'Г' => 'г',
|
307 |
+
'Д' => 'д',
|
308 |
+
'Е' => 'е',
|
309 |
+
'Ж' => 'ж',
|
310 |
+
'З' => 'з',
|
311 |
+
'И' => 'и',
|
312 |
+
'Й' => 'й',
|
313 |
+
'К' => 'к',
|
314 |
+
'Л' => 'л',
|
315 |
+
'М' => 'м',
|
316 |
+
'Н' => 'н',
|
317 |
+
'О' => 'о',
|
318 |
+
'П' => 'п',
|
319 |
+
'Р' => 'р',
|
320 |
+
'С' => 'с',
|
321 |
+
'Т' => 'т',
|
322 |
+
'У' => 'у',
|
323 |
+
'Ф' => 'ф',
|
324 |
+
'Х' => 'х',
|
325 |
+
'Ц' => 'ц',
|
326 |
+
'Ч' => 'ч',
|
327 |
+
'Ш' => 'ш',
|
328 |
+
'Щ' => 'щ',
|
329 |
+
'Ъ' => 'ъ',
|
330 |
+
'Ы' => 'ы',
|
331 |
+
'Ь' => 'ь',
|
332 |
+
'Э' => 'э',
|
333 |
+
'Ю' => 'ю',
|
334 |
+
'Я' => 'я',
|
335 |
+
'Ѡ' => 'ѡ',
|
336 |
+
'Ѣ' => 'ѣ',
|
337 |
+
'Ѥ' => 'ѥ',
|
338 |
+
'Ѧ' => 'ѧ',
|
339 |
+
'Ѩ' => 'ѩ',
|
340 |
+
'Ѫ' => 'ѫ',
|
341 |
+
'Ѭ' => 'ѭ',
|
342 |
+
'Ѯ' => 'ѯ',
|
343 |
+
'Ѱ' => 'ѱ',
|
344 |
+
'Ѳ' => 'ѳ',
|
345 |
+
'Ѵ' => 'ѵ',
|
346 |
+
'Ѷ' => 'ѷ',
|
347 |
+
'Ѹ' => 'ѹ',
|
348 |
+
'Ѻ' => 'ѻ',
|
349 |
+
'Ѽ' => 'ѽ',
|
350 |
+
'Ѿ' => 'ѿ',
|
351 |
+
'Ҁ' => 'ҁ',
|
352 |
+
'Ҋ' => 'ҋ',
|
353 |
+
'Ҍ' => 'ҍ',
|
354 |
+
'Ҏ' => 'ҏ',
|
355 |
+
'Ґ' => 'ґ',
|
356 |
+
'Ғ' => 'ғ',
|
357 |
+
'Ҕ' => 'ҕ',
|
358 |
+
'Җ' => 'җ',
|
359 |
+
'Ҙ' => 'ҙ',
|
360 |
+
'Қ' => 'қ',
|
361 |
+
'Ҝ' => 'ҝ',
|
362 |
+
'Ҟ' => 'ҟ',
|
363 |
+
'Ҡ' => 'ҡ',
|
364 |
+
'Ң' => 'ң',
|
365 |
+
'Ҥ' => 'ҥ',
|
366 |
+
'Ҧ' => 'ҧ',
|
367 |
+
'Ҩ' => 'ҩ',
|
368 |
+
'Ҫ' => 'ҫ',
|
369 |
+
'Ҭ' => 'ҭ',
|
370 |
+
'Ү' => 'ү',
|
371 |
+
'Ұ' => 'ұ',
|
372 |
+
'Ҳ' => 'ҳ',
|
373 |
+
'Ҵ' => 'ҵ',
|
374 |
+
'Ҷ' => 'ҷ',
|
375 |
+
'Ҹ' => 'ҹ',
|
376 |
+
'Һ' => 'һ',
|
377 |
+
'Ҽ' => 'ҽ',
|
378 |
+
'Ҿ' => 'ҿ',
|
379 |
+
'Ӏ' => 'ӏ',
|
380 |
+
'Ӂ' => 'ӂ',
|
381 |
+
'Ӄ' => 'ӄ',
|
382 |
+
'Ӆ' => 'ӆ',
|
383 |
+
'Ӈ' => 'ӈ',
|
384 |
+
'Ӊ' => 'ӊ',
|
385 |
+
'Ӌ' => 'ӌ',
|
386 |
+
'Ӎ' => 'ӎ',
|
387 |
+
'Ӑ' => 'ӑ',
|
388 |
+
'Ӓ' => 'ӓ',
|
389 |
+
'Ӕ' => 'ӕ',
|
390 |
+
'Ӗ' => 'ӗ',
|
391 |
+
'Ә' => 'ә',
|
392 |
+
'Ӛ' => 'ӛ',
|
393 |
+
'Ӝ' => 'ӝ',
|
394 |
+
'Ӟ' => 'ӟ',
|
395 |
+
'Ӡ' => 'ӡ',
|
396 |
+
'Ӣ' => 'ӣ',
|
397 |
+
'Ӥ' => 'ӥ',
|
398 |
+
'Ӧ' => 'ӧ',
|
399 |
+
'Ө' => 'ө',
|
400 |
+
'Ӫ' => 'ӫ',
|
401 |
+
'Ӭ' => 'ӭ',
|
402 |
+
'Ӯ' => 'ӯ',
|
403 |
+
'Ӱ' => 'ӱ',
|
404 |
+
'Ӳ' => 'ӳ',
|
405 |
+
'Ӵ' => 'ӵ',
|
406 |
+
'Ӷ' => 'ӷ',
|
407 |
+
'Ӹ' => 'ӹ',
|
408 |
+
'Ӻ' => 'ӻ',
|
409 |
+
'Ӽ' => 'ӽ',
|
410 |
+
'Ӿ' => 'ӿ',
|
411 |
+
'Ԁ' => 'ԁ',
|
412 |
+
'Ԃ' => 'ԃ',
|
413 |
+
'Ԅ' => 'ԅ',
|
414 |
+
'Ԇ' => 'ԇ',
|
415 |
+
'Ԉ' => 'ԉ',
|
416 |
+
'Ԋ' => 'ԋ',
|
417 |
+
'Ԍ' => 'ԍ',
|
418 |
+
'Ԏ' => 'ԏ',
|
419 |
+
'Ԑ' => 'ԑ',
|
420 |
+
'Ԓ' => 'ԓ',
|
421 |
+
'Ԕ' => 'ԕ',
|
422 |
+
'Ԗ' => 'ԗ',
|
423 |
+
'Ԙ' => 'ԙ',
|
424 |
+
'Ԛ' => 'ԛ',
|
425 |
+
'Ԝ' => 'ԝ',
|
426 |
+
'Ԟ' => 'ԟ',
|
427 |
+
'Ԡ' => 'ԡ',
|
428 |
+
'Ԣ' => 'ԣ',
|
429 |
+
'Ԥ' => 'ԥ',
|
430 |
+
'Ԧ' => 'ԧ',
|
431 |
+
'Ԩ' => 'ԩ',
|
432 |
+
'Ԫ' => 'ԫ',
|
433 |
+
'Ԭ' => 'ԭ',
|
434 |
+
'Ԯ' => 'ԯ',
|
435 |
+
'Ա' => 'ա',
|
436 |
+
'Բ' => 'բ',
|
437 |
+
'Գ' => 'գ',
|
438 |
+
'Դ' => 'դ',
|
439 |
+
'Ե' => 'ե',
|
440 |
+
'Զ' => 'զ',
|
441 |
+
'Է' => 'է',
|
442 |
+
'Ը' => 'ը',
|
443 |
+
'Թ' => 'թ',
|
444 |
+
'Ժ' => 'ժ',
|
445 |
+
'Ի' => 'ի',
|
446 |
+
'Լ' => 'լ',
|
447 |
+
'Խ' => 'խ',
|
448 |
+
'Ծ' => 'ծ',
|
449 |
+
'Կ' => 'կ',
|
450 |
+
'Հ' => 'հ',
|
451 |
+
'Ձ' => 'ձ',
|
452 |
+
'Ղ' => 'ղ',
|
453 |
+
'Ճ' => 'ճ',
|
454 |
+
'Մ' => 'մ',
|
455 |
+
'Յ' => 'յ',
|
456 |
+
'Ն' => 'ն',
|
457 |
+
'Շ' => 'շ',
|
458 |
+
'Ո' => 'ո',
|
459 |
+
'Չ' => 'չ',
|
460 |
+
'Պ' => 'պ',
|
461 |
+
'Ջ' => 'ջ',
|
462 |
+
'Ռ' => 'ռ',
|
463 |
+
'Ս' => 'ս',
|
464 |
+
'Վ' => 'վ',
|
465 |
+
'Տ' => 'տ',
|
466 |
+
'Ր' => 'ր',
|
467 |
+
'Ց' => 'ց',
|
468 |
+
'Ւ' => 'ւ',
|
469 |
+
'Փ' => 'փ',
|
470 |
+
'Ք' => 'ք',
|
471 |
+
'Օ' => 'օ',
|
472 |
+
'Ֆ' => 'ֆ',
|
473 |
+
'Ⴀ' => 'ⴀ',
|
474 |
+
'Ⴁ' => 'ⴁ',
|
475 |
+
'Ⴂ' => 'ⴂ',
|
476 |
+
'Ⴃ' => 'ⴃ',
|
477 |
+
'Ⴄ' => 'ⴄ',
|
478 |
+
'Ⴅ' => 'ⴅ',
|
479 |
+
'Ⴆ' => 'ⴆ',
|
480 |
+
'Ⴇ' => 'ⴇ',
|
481 |
+
'Ⴈ' => 'ⴈ',
|
482 |
+
'Ⴉ' => 'ⴉ',
|
483 |
+
'Ⴊ' => 'ⴊ',
|
484 |
+
'Ⴋ' => 'ⴋ',
|
485 |
+
'Ⴌ' => 'ⴌ',
|
486 |
+
'Ⴍ' => 'ⴍ',
|
487 |
+
'Ⴎ' => 'ⴎ',
|
488 |
+
'Ⴏ' => 'ⴏ',
|
489 |
+
'Ⴐ' => 'ⴐ',
|
490 |
+
'Ⴑ' => 'ⴑ',
|
491 |
+
'Ⴒ' => 'ⴒ',
|
492 |
+
'Ⴓ' => 'ⴓ',
|
493 |
+
'Ⴔ' => 'ⴔ',
|
494 |
+
'Ⴕ' => 'ⴕ',
|
495 |
+
'Ⴖ' => 'ⴖ',
|
496 |
+
'Ⴗ' => 'ⴗ',
|
497 |
+
'Ⴘ' => 'ⴘ',
|
498 |
+
'Ⴙ' => 'ⴙ',
|
499 |
+
'Ⴚ' => 'ⴚ',
|
500 |
+
'Ⴛ' => 'ⴛ',
|
501 |
+
'Ⴜ' => 'ⴜ',
|
502 |
+
'Ⴝ' => 'ⴝ',
|
503 |
+
'Ⴞ' => 'ⴞ',
|
504 |
+
'Ⴟ' => 'ⴟ',
|
505 |
+
'Ⴠ' => 'ⴠ',
|
506 |
+
'Ⴡ' => 'ⴡ',
|
507 |
+
'Ⴢ' => 'ⴢ',
|
508 |
+
'Ⴣ' => 'ⴣ',
|
509 |
+
'Ⴤ' => 'ⴤ',
|
510 |
+
'Ⴥ' => 'ⴥ',
|
511 |
+
'Ⴧ' => 'ⴧ',
|
512 |
+
'Ⴭ' => 'ⴭ',
|
513 |
+
'Ꭰ' => 'ꭰ',
|
514 |
+
'Ꭱ' => 'ꭱ',
|
515 |
+
'Ꭲ' => 'ꭲ',
|
516 |
+
'Ꭳ' => 'ꭳ',
|
517 |
+
'Ꭴ' => 'ꭴ',
|
518 |
+
'Ꭵ' => 'ꭵ',
|
519 |
+
'Ꭶ' => 'ꭶ',
|
520 |
+
'Ꭷ' => 'ꭷ',
|
521 |
+
'Ꭸ' => 'ꭸ',
|
522 |
+
'Ꭹ' => 'ꭹ',
|
523 |
+
'Ꭺ' => 'ꭺ',
|
524 |
+
'Ꭻ' => 'ꭻ',
|
525 |
+
'Ꭼ' => 'ꭼ',
|
526 |
+
'Ꭽ' => 'ꭽ',
|
527 |
+
'Ꭾ' => 'ꭾ',
|
528 |
+
'Ꭿ' => 'ꭿ',
|
529 |
+
'Ꮀ' => 'ꮀ',
|
530 |
+
'Ꮁ' => 'ꮁ',
|
531 |
+
'Ꮂ' => 'ꮂ',
|
532 |
+
'Ꮃ' => 'ꮃ',
|
533 |
+
'Ꮄ' => 'ꮄ',
|
534 |
+
'Ꮅ' => 'ꮅ',
|
535 |
+
'Ꮆ' => 'ꮆ',
|
536 |
+
'Ꮇ' => 'ꮇ',
|
537 |
+
'Ꮈ' => 'ꮈ',
|
538 |
+
'Ꮉ' => 'ꮉ',
|
539 |
+
'Ꮊ' => 'ꮊ',
|
540 |
+
'Ꮋ' => 'ꮋ',
|
541 |
+
'Ꮌ' => 'ꮌ',
|
542 |
+
'Ꮍ' => 'ꮍ',
|
543 |
+
'Ꮎ' => 'ꮎ',
|
544 |
+
'Ꮏ' => 'ꮏ',
|
545 |
+
'Ꮐ' => 'ꮐ',
|
546 |
+
'Ꮑ' => 'ꮑ',
|
547 |
+
'Ꮒ' => 'ꮒ',
|
548 |
+
'Ꮓ' => 'ꮓ',
|
549 |
+
'Ꮔ' => 'ꮔ',
|
550 |
+
'Ꮕ' => 'ꮕ',
|
551 |
+
'Ꮖ' => 'ꮖ',
|
552 |
+
'Ꮗ' => 'ꮗ',
|
553 |
+
'Ꮘ' => 'ꮘ',
|
554 |
+
'Ꮙ' => 'ꮙ',
|
555 |
+
'Ꮚ' => 'ꮚ',
|
556 |
+
'Ꮛ' => 'ꮛ',
|
557 |
+
'Ꮜ' => 'ꮜ',
|
558 |
+
'Ꮝ' => 'ꮝ',
|
559 |
+
'Ꮞ' => 'ꮞ',
|
560 |
+
'Ꮟ' => 'ꮟ',
|
561 |
+
'Ꮠ' => 'ꮠ',
|
562 |
+
'Ꮡ' => 'ꮡ',
|
563 |
+
'Ꮢ' => 'ꮢ',
|
564 |
+
'Ꮣ' => 'ꮣ',
|
565 |
+
'Ꮤ' => 'ꮤ',
|
566 |
+
'Ꮥ' => 'ꮥ',
|
567 |
+
'Ꮦ' => 'ꮦ',
|
568 |
+
'Ꮧ' => 'ꮧ',
|
569 |
+
'Ꮨ' => 'ꮨ',
|
570 |
+
'Ꮩ' => 'ꮩ',
|
571 |
+
'Ꮪ' => 'ꮪ',
|
572 |
+
'Ꮫ' => 'ꮫ',
|
573 |
+
'Ꮬ' => 'ꮬ',
|
574 |
+
'Ꮭ' => 'ꮭ',
|
575 |
+
'Ꮮ' => 'ꮮ',
|
576 |
+
'Ꮯ' => 'ꮯ',
|
577 |
+
'Ꮰ' => 'ꮰ',
|
578 |
+
'Ꮱ' => 'ꮱ',
|
579 |
+
'Ꮲ' => 'ꮲ',
|
580 |
+
'Ꮳ' => 'ꮳ',
|
581 |
+
'Ꮴ' => 'ꮴ',
|
582 |
+
'Ꮵ' => 'ꮵ',
|
583 |
+
'Ꮶ' => 'ꮶ',
|
584 |
+
'Ꮷ' => 'ꮷ',
|
585 |
+
'Ꮸ' => 'ꮸ',
|
586 |
+
'Ꮹ' => 'ꮹ',
|
587 |
+
'Ꮺ' => 'ꮺ',
|
588 |
+
'Ꮻ' => 'ꮻ',
|
589 |
+
'Ꮼ' => 'ꮼ',
|
590 |
+
'Ꮽ' => 'ꮽ',
|
591 |
+
'Ꮾ' => 'ꮾ',
|
592 |
+
'Ꮿ' => 'ꮿ',
|
593 |
+
'Ᏸ' => 'ᏸ',
|
594 |
+
'Ᏹ' => 'ᏹ',
|
595 |
+
'Ᏺ' => 'ᏺ',
|
596 |
+
'Ᏻ' => 'ᏻ',
|
597 |
+
'Ᏼ' => 'ᏼ',
|
598 |
+
'Ᏽ' => 'ᏽ',
|
599 |
+
'Ა' => 'ა',
|
600 |
+
'Ბ' => 'ბ',
|
601 |
+
'Გ' => 'გ',
|
602 |
+
'Დ' => 'დ',
|
603 |
+
'Ე' => 'ე',
|
604 |
+
'Ვ' => 'ვ',
|
605 |
+
'Ზ' => 'ზ',
|
606 |
+
'Თ' => 'თ',
|
607 |
+
'Ი' => 'ი',
|
608 |
+
'Კ' => 'კ',
|
609 |
+
'Ლ' => 'ლ',
|
610 |
+
'Მ' => 'მ',
|
611 |
+
'Ნ' => 'ნ',
|
612 |
+
'Ო' => 'ო',
|
613 |
+
'Პ' => 'პ',
|
614 |
+
'Ჟ' => 'ჟ',
|
615 |
+
'Რ' => 'რ',
|
616 |
+
'Ს' => 'ს',
|
617 |
+
'Ტ' => 'ტ',
|
618 |
+
'Უ' => 'უ',
|
619 |
+
'Ფ' => 'ფ',
|
620 |
+
'Ქ' => 'ქ',
|
621 |
+
'Ღ' => 'ღ',
|
622 |
+
'Ყ' => 'ყ',
|
623 |
+
'Შ' => 'შ',
|
624 |
+
'Ჩ' => 'ჩ',
|
625 |
+
'Ც' => 'ც',
|
626 |
+
'Ძ' => 'ძ',
|
627 |
+
'Წ' => 'წ',
|
628 |
+
'Ჭ' => 'ჭ',
|
629 |
+
'Ხ' => 'ხ',
|
630 |
+
'Ჯ' => 'ჯ',
|
631 |
+
'Ჰ' => 'ჰ',
|
632 |
+
'Ჱ' => 'ჱ',
|
633 |
+
'Ჲ' => 'ჲ',
|
634 |
+
'Ჳ' => 'ჳ',
|
635 |
+
'Ჴ' => 'ჴ',
|
636 |
+
'Ჵ' => 'ჵ',
|
637 |
+
'Ჶ' => 'ჶ',
|
638 |
+
'Ჷ' => 'ჷ',
|
639 |
+
'Ჸ' => 'ჸ',
|
640 |
+
'Ჹ' => 'ჹ',
|
641 |
+
'Ჺ' => 'ჺ',
|
642 |
+
'Ჽ' => 'ჽ',
|
643 |
+
'Ჾ' => 'ჾ',
|
644 |
+
'Ჿ' => 'ჿ',
|
645 |
+
'Ḁ' => 'ḁ',
|
646 |
+
'Ḃ' => 'ḃ',
|
647 |
+
'Ḅ' => 'ḅ',
|
648 |
+
'Ḇ' => 'ḇ',
|
649 |
+
'Ḉ' => 'ḉ',
|
650 |
+
'Ḋ' => 'ḋ',
|
651 |
+
'Ḍ' => 'ḍ',
|
652 |
+
'Ḏ' => 'ḏ',
|
653 |
+
'Ḑ' => 'ḑ',
|
654 |
+
'Ḓ' => 'ḓ',
|
655 |
+
'Ḕ' => 'ḕ',
|
656 |
+
'Ḗ' => 'ḗ',
|
657 |
+
'Ḙ' => 'ḙ',
|
658 |
+
'Ḛ' => 'ḛ',
|
659 |
+
'Ḝ' => 'ḝ',
|
660 |
+
'Ḟ' => 'ḟ',
|
661 |
+
'Ḡ' => 'ḡ',
|
662 |
+
'Ḣ' => 'ḣ',
|
663 |
+
'Ḥ' => 'ḥ',
|
664 |
+
'Ḧ' => 'ḧ',
|
665 |
+
'Ḩ' => 'ḩ',
|
666 |
+
'Ḫ' => 'ḫ',
|
667 |
+
'Ḭ' => 'ḭ',
|
668 |
+
'Ḯ' => 'ḯ',
|
669 |
+
'Ḱ' => 'ḱ',
|
670 |
+
'Ḳ' => 'ḳ',
|
671 |
+
'Ḵ' => 'ḵ',
|
672 |
+
'Ḷ' => 'ḷ',
|
673 |
+
'Ḹ' => 'ḹ',
|
674 |
+
'Ḻ' => 'ḻ',
|
675 |
+
'Ḽ' => 'ḽ',
|
676 |
+
'Ḿ' => 'ḿ',
|
677 |
+
'Ṁ' => 'ṁ',
|
678 |
+
'Ṃ' => 'ṃ',
|
679 |
+
'Ṅ' => 'ṅ',
|
680 |
+
'Ṇ' => 'ṇ',
|
681 |
+
'Ṉ' => 'ṉ',
|
682 |
+
'Ṋ' => 'ṋ',
|
683 |
+
'Ṍ' => 'ṍ',
|
684 |
+
'Ṏ' => 'ṏ',
|
685 |
+
'Ṑ' => 'ṑ',
|
686 |
+
'Ṓ' => 'ṓ',
|
687 |
+
'Ṕ' => 'ṕ',
|
688 |
+
'Ṗ' => 'ṗ',
|
689 |
+
'Ṙ' => 'ṙ',
|
690 |
+
'Ṛ' => 'ṛ',
|
691 |
+
'Ṝ' => 'ṝ',
|
692 |
+
'Ṟ' => 'ṟ',
|
693 |
+
'Ṡ' => 'ṡ',
|
694 |
+
'Ṣ' => 'ṣ',
|
695 |
+
'Ṥ' => 'ṥ',
|
696 |
+
'Ṧ' => 'ṧ',
|
697 |
+
'Ṩ' => 'ṩ',
|
698 |
+
'Ṫ' => 'ṫ',
|
699 |
+
'Ṭ' => 'ṭ',
|
700 |
+
'Ṯ' => 'ṯ',
|
701 |
+
'Ṱ' => 'ṱ',
|
702 |
+
'Ṳ' => 'ṳ',
|
703 |
+
'Ṵ' => 'ṵ',
|
704 |
+
'Ṷ' => 'ṷ',
|
705 |
+
'Ṹ' => 'ṹ',
|
706 |
+
'Ṻ' => 'ṻ',
|
707 |
+
'Ṽ' => 'ṽ',
|
708 |
+
'Ṿ' => 'ṿ',
|
709 |
+
'Ẁ' => 'ẁ',
|
710 |
+
'Ẃ' => 'ẃ',
|
711 |
+
'Ẅ' => 'ẅ',
|
712 |
+
'Ẇ' => 'ẇ',
|
713 |
+
'Ẉ' => 'ẉ',
|
714 |
+
'Ẋ' => 'ẋ',
|
715 |
+
'Ẍ' => 'ẍ',
|
716 |
+
'Ẏ' => 'ẏ',
|
717 |
+
'Ẑ' => 'ẑ',
|
718 |
+
'Ẓ' => 'ẓ',
|
719 |
+
'Ẕ' => 'ẕ',
|
720 |
+
'ẞ' => 'ß',
|
721 |
+
'Ạ' => 'ạ',
|
722 |
+
'Ả' => 'ả',
|
723 |
+
'Ấ' => 'ấ',
|
724 |
+
'Ầ' => 'ầ',
|
725 |
+
'Ẩ' => 'ẩ',
|
726 |
+
'Ẫ' => 'ẫ',
|
727 |
+
'Ậ' => 'ậ',
|
728 |
+
'Ắ' => 'ắ',
|
729 |
+
'Ằ' => 'ằ',
|
730 |
+
'Ẳ' => 'ẳ',
|
731 |
+
'Ẵ' => 'ẵ',
|
732 |
+
'Ặ' => 'ặ',
|
733 |
+
'Ẹ' => 'ẹ',
|
734 |
+
'Ẻ' => 'ẻ',
|
735 |
+
'Ẽ' => 'ẽ',
|
736 |
+
'Ế' => 'ế',
|
737 |
+
'Ề' => 'ề',
|
738 |
+
'Ể' => 'ể',
|
739 |
+
'Ễ' => 'ễ',
|
740 |
+
'Ệ' => 'ệ',
|
741 |
+
'Ỉ' => 'ỉ',
|
742 |
+
'Ị' => 'ị',
|
743 |
+
'Ọ' => 'ọ',
|
744 |
+
'Ỏ' => 'ỏ',
|
745 |
+
'Ố' => 'ố',
|
746 |
+
'Ồ' => 'ồ',
|
747 |
+
'Ổ' => 'ổ',
|
748 |
+
'Ỗ' => 'ỗ',
|
749 |
+
'Ộ' => 'ộ',
|
750 |
+
'Ớ' => 'ớ',
|
751 |
+
'Ờ' => 'ờ',
|
752 |
+
'Ở' => 'ở',
|
753 |
+
'Ỡ' => 'ỡ',
|
754 |
+
'Ợ' => 'ợ',
|
755 |
+
'Ụ' => 'ụ',
|
756 |
+
'Ủ' => 'ủ',
|
757 |
+
'Ứ' => 'ứ',
|
758 |
+
'Ừ' => 'ừ',
|
759 |
+
'Ử' => 'ử',
|
760 |
+
'Ữ' => 'ữ',
|
761 |
+
'Ự' => 'ự',
|
762 |
+
'Ỳ' => 'ỳ',
|
763 |
+
'Ỵ' => 'ỵ',
|
764 |
+
'Ỷ' => 'ỷ',
|
765 |
+
'Ỹ' => 'ỹ',
|
766 |
+
'Ỻ' => 'ỻ',
|
767 |
+
'Ỽ' => 'ỽ',
|
768 |
+
'Ỿ' => 'ỿ',
|
769 |
+
'Ἀ' => 'ἀ',
|
770 |
+
'Ἁ' => 'ἁ',
|
771 |
+
'Ἂ' => 'ἂ',
|
772 |
+
'Ἃ' => 'ἃ',
|
773 |
+
'Ἄ' => 'ἄ',
|
774 |
+
'Ἅ' => 'ἅ',
|
775 |
+
'Ἆ' => 'ἆ',
|
776 |
+
'Ἇ' => 'ἇ',
|
777 |
+
'Ἐ' => 'ἐ',
|
778 |
+
'Ἑ' => 'ἑ',
|
779 |
+
'Ἒ' => 'ἒ',
|
780 |
+
'Ἓ' => 'ἓ',
|
781 |
+
'Ἔ' => 'ἔ',
|
782 |
+
'Ἕ' => 'ἕ',
|
783 |
+
'Ἠ' => 'ἠ',
|
784 |
+
'Ἡ' => 'ἡ',
|
785 |
+
'Ἢ' => 'ἢ',
|
786 |
+
'Ἣ' => 'ἣ',
|
787 |
+
'Ἤ' => 'ἤ',
|
788 |
+
'Ἥ' => 'ἥ',
|
789 |
+
'Ἦ' => 'ἦ',
|
790 |
+
'Ἧ' => 'ἧ',
|
791 |
+
'Ἰ' => 'ἰ',
|
792 |
+
'Ἱ' => 'ἱ',
|
793 |
+
'Ἲ' => 'ἲ',
|
794 |
+
'Ἳ' => 'ἳ',
|
795 |
+
'Ἴ' => 'ἴ',
|
796 |
+
'Ἵ' => 'ἵ',
|
797 |
+
'Ἶ' => 'ἶ',
|
798 |
+
'Ἷ' => 'ἷ',
|
799 |
+
'Ὀ' => 'ὀ',
|
800 |
+
'Ὁ' => 'ὁ',
|
801 |
+
'Ὂ' => 'ὂ',
|
802 |
+
'Ὃ' => 'ὃ',
|
803 |
+
'Ὄ' => 'ὄ',
|
804 |
+
'Ὅ' => 'ὅ',
|
805 |
+
'Ὑ' => 'ὑ',
|
806 |
+
'Ὓ' => 'ὓ',
|
807 |
+
'Ὕ' => 'ὕ',
|
808 |
+
'Ὗ' => 'ὗ',
|
809 |
+
'Ὠ' => 'ὠ',
|
810 |
+
'Ὡ' => 'ὡ',
|
811 |
+
'Ὢ' => 'ὢ',
|
812 |
+
'Ὣ' => 'ὣ',
|
813 |
+
'Ὤ' => 'ὤ',
|
814 |
+
'Ὥ' => 'ὥ',
|
815 |
+
'Ὦ' => 'ὦ',
|
816 |
+
'Ὧ' => 'ὧ',
|
817 |
+
'ᾈ' => 'ᾀ',
|
818 |
+
'ᾉ' => 'ᾁ',
|
819 |
+
'ᾊ' => 'ᾂ',
|
820 |
+
'ᾋ' => 'ᾃ',
|
821 |
+
'ᾌ' => 'ᾄ',
|
822 |
+
'ᾍ' => 'ᾅ',
|
823 |
+
'ᾎ' => 'ᾆ',
|
824 |
+
'ᾏ' => 'ᾇ',
|
825 |
+
'ᾘ' => 'ᾐ',
|
826 |
+
'ᾙ' => 'ᾑ',
|
827 |
+
'ᾚ' => 'ᾒ',
|
828 |
+
'ᾛ' => 'ᾓ',
|
829 |
+
'ᾜ' => 'ᾔ',
|
830 |
+
'ᾝ' => 'ᾕ',
|
831 |
+
'ᾞ' => 'ᾖ',
|
832 |
+
'ᾟ' => 'ᾗ',
|
833 |
+
'ᾨ' => 'ᾠ',
|
834 |
+
'ᾩ' => 'ᾡ',
|
835 |
+
'ᾪ' => 'ᾢ',
|
836 |
+
'ᾫ' => 'ᾣ',
|
837 |
+
'ᾬ' => 'ᾤ',
|
838 |
+
'ᾭ' => 'ᾥ',
|
839 |
+
'ᾮ' => 'ᾦ',
|
840 |
+
'ᾯ' => 'ᾧ',
|
841 |
+
'Ᾰ' => 'ᾰ',
|
842 |
+
'Ᾱ' => 'ᾱ',
|
843 |
+
'Ὰ' => 'ὰ',
|
844 |
+
'Ά' => 'ά',
|
845 |
+
'ᾼ' => 'ᾳ',
|
846 |
+
'Ὲ' => 'ὲ',
|
847 |
+
'Έ' => 'έ',
|
848 |
+
'Ὴ' => 'ὴ',
|
849 |
+
'Ή' => 'ή',
|
850 |
+
'ῌ' => 'ῃ',
|
851 |
+
'Ῐ' => 'ῐ',
|
852 |
+
'Ῑ' => 'ῑ',
|
853 |
+
'Ὶ' => 'ὶ',
|
854 |
+
'Ί' => 'ί',
|
855 |
+
'Ῠ' => 'ῠ',
|
856 |
+
'Ῡ' => 'ῡ',
|
857 |
+
'Ὺ' => 'ὺ',
|
858 |
+
'Ύ' => 'ύ',
|
859 |
+
'Ῥ' => 'ῥ',
|
860 |
+
'Ὸ' => 'ὸ',
|
861 |
+
'Ό' => 'ό',
|
862 |
+
'Ὼ' => 'ὼ',
|
863 |
+
'Ώ' => 'ώ',
|
864 |
+
'ῼ' => 'ῳ',
|
865 |
+
'Ω' => 'ω',
|
866 |
+
'K' => 'k',
|
867 |
+
'Å' => 'å',
|
868 |
+
'Ⅎ' => 'ⅎ',
|
869 |
+
'Ⅰ' => 'ⅰ',
|
870 |
+
'Ⅱ' => 'ⅱ',
|
871 |
+
'Ⅲ' => 'ⅲ',
|
872 |
+
'Ⅳ' => 'ⅳ',
|
873 |
+
'Ⅴ' => 'ⅴ',
|
874 |
+
'Ⅵ' => 'ⅵ',
|
875 |
+
'Ⅶ' => 'ⅶ',
|
876 |
+
'Ⅷ' => 'ⅷ',
|
877 |
+
'Ⅸ' => 'ⅸ',
|
878 |
+
'Ⅹ' => 'ⅹ',
|
879 |
+
'Ⅺ' => 'ⅺ',
|
880 |
+
'Ⅻ' => 'ⅻ',
|
881 |
+
'Ⅼ' => 'ⅼ',
|
882 |
+
'Ⅽ' => 'ⅽ',
|
883 |
+
'Ⅾ' => 'ⅾ',
|
884 |
+
'Ⅿ' => 'ⅿ',
|
885 |
+
'Ↄ' => 'ↄ',
|
886 |
+
'Ⓐ' => 'ⓐ',
|
887 |
+
'Ⓑ' => 'ⓑ',
|
888 |
+
'Ⓒ' => 'ⓒ',
|
889 |
+
'Ⓓ' => 'ⓓ',
|
890 |
+
'Ⓔ' => 'ⓔ',
|
891 |
+
'Ⓕ' => 'ⓕ',
|
892 |
+
'Ⓖ' => 'ⓖ',
|
893 |
+
'Ⓗ' => 'ⓗ',
|
894 |
+
'Ⓘ' => 'ⓘ',
|
895 |
+
'Ⓙ' => 'ⓙ',
|
896 |
+
'Ⓚ' => 'ⓚ',
|
897 |
+
'Ⓛ' => 'ⓛ',
|
898 |
+
'Ⓜ' => 'ⓜ',
|
899 |
+
'Ⓝ' => 'ⓝ',
|
900 |
+
'Ⓞ' => 'ⓞ',
|
901 |
+
'Ⓟ' => 'ⓟ',
|
902 |
+
'Ⓠ' => 'ⓠ',
|
903 |
+
'Ⓡ' => 'ⓡ',
|
904 |
+
'Ⓢ' => 'ⓢ',
|
905 |
+
'Ⓣ' => 'ⓣ',
|
906 |
+
'Ⓤ' => 'ⓤ',
|
907 |
+
'Ⓥ' => 'ⓥ',
|
908 |
+
'Ⓦ' => 'ⓦ',
|
909 |
+
'Ⓧ' => 'ⓧ',
|
910 |
+
'Ⓨ' => 'ⓨ',
|
911 |
+
'Ⓩ' => 'ⓩ',
|
912 |
+
'Ⰰ' => 'ⰰ',
|
913 |
+
'Ⰱ' => 'ⰱ',
|
914 |
+
'Ⰲ' => 'ⰲ',
|
915 |
+
'Ⰳ' => 'ⰳ',
|
916 |
+
'Ⰴ' => 'ⰴ',
|
917 |
+
'Ⰵ' => 'ⰵ',
|
918 |
+
'Ⰶ' => 'ⰶ',
|
919 |
+
'Ⰷ' => 'ⰷ',
|
920 |
+
'Ⰸ' => 'ⰸ',
|
921 |
+
'Ⰹ' => 'ⰹ',
|
922 |
+
'Ⰺ' => 'ⰺ',
|
923 |
+
'Ⰻ' => 'ⰻ',
|
924 |
+
'Ⰼ' => 'ⰼ',
|
925 |
+
'Ⰽ' => 'ⰽ',
|
926 |
+
'Ⰾ' => 'ⰾ',
|
927 |
+
'Ⰿ' => 'ⰿ',
|
928 |
+
'Ⱀ' => 'ⱀ',
|
929 |
+
'Ⱁ' => 'ⱁ',
|
930 |
+
'Ⱂ' => 'ⱂ',
|
931 |
+
'Ⱃ' => 'ⱃ',
|
932 |
+
'Ⱄ' => 'ⱄ',
|
933 |
+
'Ⱅ' => 'ⱅ',
|
934 |
+
'Ⱆ' => 'ⱆ',
|
935 |
+
'Ⱇ' => 'ⱇ',
|
936 |
+
'Ⱈ' => 'ⱈ',
|
937 |
+
'Ⱉ' => 'ⱉ',
|
938 |
+
'Ⱊ' => 'ⱊ',
|
939 |
+
'Ⱋ' => 'ⱋ',
|
940 |
+
'Ⱌ' => 'ⱌ',
|
941 |
+
'Ⱍ' => 'ⱍ',
|
942 |
+
'Ⱎ' => 'ⱎ',
|
943 |
+
'Ⱏ' => 'ⱏ',
|
944 |
+
'Ⱐ' => 'ⱐ',
|
945 |
+
'Ⱑ' => 'ⱑ',
|
946 |
+
'Ⱒ' => 'ⱒ',
|
947 |
+
'Ⱓ' => 'ⱓ',
|
948 |
+
'Ⱔ' => 'ⱔ',
|
949 |
+
'Ⱕ' => 'ⱕ',
|
950 |
+
'Ⱖ' => 'ⱖ',
|
951 |
+
'Ⱗ' => 'ⱗ',
|
952 |
+
'Ⱘ' => 'ⱘ',
|
953 |
+
'Ⱙ' => 'ⱙ',
|
954 |
+
'Ⱚ' => 'ⱚ',
|
955 |
+
'Ⱛ' => 'ⱛ',
|
956 |
+
'Ⱜ' => 'ⱜ',
|
957 |
+
'Ⱝ' => 'ⱝ',
|
958 |
+
'Ⱞ' => 'ⱞ',
|
959 |
+
'Ⱡ' => 'ⱡ',
|
960 |
+
'Ɫ' => 'ɫ',
|
961 |
+
'Ᵽ' => 'ᵽ',
|
962 |
+
'Ɽ' => 'ɽ',
|
963 |
+
'Ⱨ' => 'ⱨ',
|
964 |
+
'Ⱪ' => 'ⱪ',
|
965 |
+
'Ⱬ' => 'ⱬ',
|
966 |
+
'Ɑ' => 'ɑ',
|
967 |
+
'Ɱ' => 'ɱ',
|
968 |
+
'Ɐ' => 'ɐ',
|
969 |
+
'Ɒ' => 'ɒ',
|
970 |
+
'Ⱳ' => 'ⱳ',
|
971 |
+
'Ⱶ' => 'ⱶ',
|
972 |
+
'Ȿ' => 'ȿ',
|
973 |
+
'Ɀ' => 'ɀ',
|
974 |
+
'Ⲁ' => 'ⲁ',
|
975 |
+
'Ⲃ' => 'ⲃ',
|
976 |
+
'Ⲅ' => 'ⲅ',
|
977 |
+
'Ⲇ' => 'ⲇ',
|
978 |
+
'Ⲉ' => 'ⲉ',
|
979 |
+
'Ⲋ' => 'ⲋ',
|
980 |
+
'Ⲍ' => 'ⲍ',
|
981 |
+
'Ⲏ' => 'ⲏ',
|
982 |
+
'Ⲑ' => 'ⲑ',
|
983 |
+
'Ⲓ' => 'ⲓ',
|
984 |
+
'Ⲕ' => 'ⲕ',
|
985 |
+
'Ⲗ' => 'ⲗ',
|
986 |
+
'Ⲙ' => 'ⲙ',
|
987 |
+
'Ⲛ' => 'ⲛ',
|
988 |
+
'Ⲝ' => 'ⲝ',
|
989 |
+
'Ⲟ' => 'ⲟ',
|
990 |
+
'Ⲡ' => 'ⲡ',
|
991 |
+
'Ⲣ' => 'ⲣ',
|
992 |
+
'Ⲥ' => 'ⲥ',
|
993 |
+
'Ⲧ' => 'ⲧ',
|
994 |
+
'Ⲩ' => 'ⲩ',
|
995 |
+
'Ⲫ' => 'ⲫ',
|
996 |
+
'Ⲭ' => 'ⲭ',
|
997 |
+
'Ⲯ' => 'ⲯ',
|
998 |
+
'Ⲱ' => 'ⲱ',
|
999 |
+
'Ⲳ' => 'ⲳ',
|
1000 |
+
'Ⲵ' => 'ⲵ',
|
1001 |
+
'Ⲷ' => 'ⲷ',
|
1002 |
+
'Ⲹ' => 'ⲹ',
|
1003 |
+
'Ⲻ' => 'ⲻ',
|
1004 |
+
'Ⲽ' => 'ⲽ',
|
1005 |
+
'Ⲿ' => 'ⲿ',
|
1006 |
+
'Ⳁ' => 'ⳁ',
|
1007 |
+
'Ⳃ' => 'ⳃ',
|
1008 |
+
'Ⳅ' => 'ⳅ',
|
1009 |
+
'Ⳇ' => 'ⳇ',
|
1010 |
+
'Ⳉ' => 'ⳉ',
|
1011 |
+
'Ⳋ' => 'ⳋ',
|
1012 |
+
'Ⳍ' => 'ⳍ',
|
1013 |
+
'Ⳏ' => 'ⳏ',
|
1014 |
+
'Ⳑ' => 'ⳑ',
|
1015 |
+
'Ⳓ' => 'ⳓ',
|
1016 |
+
'Ⳕ' => 'ⳕ',
|
1017 |
+
'Ⳗ' => 'ⳗ',
|
1018 |
+
'Ⳙ' => 'ⳙ',
|
1019 |
+
'Ⳛ' => 'ⳛ',
|
1020 |
+
'Ⳝ' => 'ⳝ',
|
1021 |
+
'Ⳟ' => 'ⳟ',
|
1022 |
+
'Ⳡ' => 'ⳡ',
|
1023 |
+
'Ⳣ' => 'ⳣ',
|
1024 |
+
'Ⳬ' => 'ⳬ',
|
1025 |
+
'Ⳮ' => 'ⳮ',
|
1026 |
+
'Ⳳ' => 'ⳳ',
|
1027 |
+
'Ꙁ' => 'ꙁ',
|
1028 |
+
'Ꙃ' => 'ꙃ',
|
1029 |
+
'Ꙅ' => 'ꙅ',
|
1030 |
+
'Ꙇ' => 'ꙇ',
|
1031 |
+
'Ꙉ' => 'ꙉ',
|
1032 |
+
'Ꙋ' => 'ꙋ',
|
1033 |
+
'Ꙍ' => 'ꙍ',
|
1034 |
+
'Ꙏ' => 'ꙏ',
|
1035 |
+
'Ꙑ' => 'ꙑ',
|
1036 |
+
'Ꙓ' => 'ꙓ',
|
1037 |
+
'Ꙕ' => 'ꙕ',
|
1038 |
+
'Ꙗ' => 'ꙗ',
|
1039 |
+
'Ꙙ' => 'ꙙ',
|
1040 |
+
'Ꙛ' => 'ꙛ',
|
1041 |
+
'Ꙝ' => 'ꙝ',
|
1042 |
+
'Ꙟ' => 'ꙟ',
|
1043 |
+
'Ꙡ' => 'ꙡ',
|
1044 |
+
'Ꙣ' => 'ꙣ',
|
1045 |
+
'Ꙥ' => 'ꙥ',
|
1046 |
+
'Ꙧ' => 'ꙧ',
|
1047 |
+
'Ꙩ' => 'ꙩ',
|
1048 |
+
'Ꙫ' => 'ꙫ',
|
1049 |
+
'Ꙭ' => 'ꙭ',
|
1050 |
+
'Ꚁ' => 'ꚁ',
|
1051 |
+
'Ꚃ' => 'ꚃ',
|
1052 |
+
'Ꚅ' => 'ꚅ',
|
1053 |
+
'Ꚇ' => 'ꚇ',
|
1054 |
+
'Ꚉ' => 'ꚉ',
|
1055 |
+
'Ꚋ' => 'ꚋ',
|
1056 |
+
'Ꚍ' => 'ꚍ',
|
1057 |
+
'Ꚏ' => 'ꚏ',
|
1058 |
+
'Ꚑ' => 'ꚑ',
|
1059 |
+
'Ꚓ' => 'ꚓ',
|
1060 |
+
'Ꚕ' => 'ꚕ',
|
1061 |
+
'Ꚗ' => 'ꚗ',
|
1062 |
+
'Ꚙ' => 'ꚙ',
|
1063 |
+
'Ꚛ' => 'ꚛ',
|
1064 |
+
'Ꜣ' => 'ꜣ',
|
1065 |
+
'Ꜥ' => 'ꜥ',
|
1066 |
+
'Ꜧ' => 'ꜧ',
|
1067 |
+
'Ꜩ' => 'ꜩ',
|
1068 |
+
'Ꜫ' => 'ꜫ',
|
1069 |
+
'Ꜭ' => 'ꜭ',
|
1070 |
+
'Ꜯ' => 'ꜯ',
|
1071 |
+
'Ꜳ' => 'ꜳ',
|
1072 |
+
'Ꜵ' => 'ꜵ',
|
1073 |
+
'Ꜷ' => 'ꜷ',
|
1074 |
+
'Ꜹ' => 'ꜹ',
|
1075 |
+
'Ꜻ' => 'ꜻ',
|
1076 |
+
'Ꜽ' => 'ꜽ',
|
1077 |
+
'Ꜿ' => 'ꜿ',
|
1078 |
+
'Ꝁ' => 'ꝁ',
|
1079 |
+
'Ꝃ' => 'ꝃ',
|
1080 |
+
'Ꝅ' => 'ꝅ',
|
1081 |
+
'Ꝇ' => 'ꝇ',
|
1082 |
+
'Ꝉ' => 'ꝉ',
|
1083 |
+
'Ꝋ' => 'ꝋ',
|
1084 |
+
'Ꝍ' => 'ꝍ',
|
1085 |
+
'Ꝏ' => 'ꝏ',
|
1086 |
+
'Ꝑ' => 'ꝑ',
|
1087 |
+
'Ꝓ' => 'ꝓ',
|
1088 |
+
'Ꝕ' => 'ꝕ',
|
1089 |
+
'Ꝗ' => 'ꝗ',
|
1090 |
+
'Ꝙ' => 'ꝙ',
|
1091 |
+
'Ꝛ' => 'ꝛ',
|
1092 |
+
'Ꝝ' => 'ꝝ',
|
1093 |
+
'Ꝟ' => 'ꝟ',
|
1094 |
+
'Ꝡ' => 'ꝡ',
|
1095 |
+
'Ꝣ' => 'ꝣ',
|
1096 |
+
'Ꝥ' => 'ꝥ',
|
1097 |
+
'Ꝧ' => 'ꝧ',
|
1098 |
+
'Ꝩ' => 'ꝩ',
|
1099 |
+
'Ꝫ' => 'ꝫ',
|
1100 |
+
'Ꝭ' => 'ꝭ',
|
1101 |
+
'Ꝯ' => 'ꝯ',
|
1102 |
+
'Ꝺ' => 'ꝺ',
|
1103 |
+
'Ꝼ' => 'ꝼ',
|
1104 |
+
'Ᵹ' => 'ᵹ',
|
1105 |
+
'Ꝿ' => 'ꝿ',
|
1106 |
+
'Ꞁ' => 'ꞁ',
|
1107 |
+
'Ꞃ' => 'ꞃ',
|
1108 |
+
'Ꞅ' => 'ꞅ',
|
1109 |
+
'Ꞇ' => 'ꞇ',
|
1110 |
+
'Ꞌ' => 'ꞌ',
|
1111 |
+
'Ɥ' => 'ɥ',
|
1112 |
+
'Ꞑ' => 'ꞑ',
|
1113 |
+
'Ꞓ' => 'ꞓ',
|
1114 |
+
'Ꞗ' => 'ꞗ',
|
1115 |
+
'Ꞙ' => 'ꞙ',
|
1116 |
+
'Ꞛ' => 'ꞛ',
|
1117 |
+
'Ꞝ' => 'ꞝ',
|
1118 |
+
'Ꞟ' => 'ꞟ',
|
1119 |
+
'Ꞡ' => 'ꞡ',
|
1120 |
+
'Ꞣ' => 'ꞣ',
|
1121 |
+
'Ꞥ' => 'ꞥ',
|
1122 |
+
'Ꞧ' => 'ꞧ',
|
1123 |
+
'Ꞩ' => 'ꞩ',
|
1124 |
+
'Ɦ' => 'ɦ',
|
1125 |
+
'Ɜ' => 'ɜ',
|
1126 |
+
'Ɡ' => 'ɡ',
|
1127 |
+
'Ɬ' => 'ɬ',
|
1128 |
+
'Ɪ' => 'ɪ',
|
1129 |
+
'Ʞ' => 'ʞ',
|
1130 |
+
'Ʇ' => 'ʇ',
|
1131 |
+
'Ʝ' => 'ʝ',
|
1132 |
+
'Ꭓ' => 'ꭓ',
|
1133 |
+
'Ꞵ' => 'ꞵ',
|
1134 |
+
'Ꞷ' => 'ꞷ',
|
1135 |
+
'Ꞹ' => 'ꞹ',
|
1136 |
+
'Ꞻ' => 'ꞻ',
|
1137 |
+
'Ꞽ' => 'ꞽ',
|
1138 |
+
'Ꞿ' => 'ꞿ',
|
1139 |
+
'Ꟃ' => 'ꟃ',
|
1140 |
+
'Ꞔ' => 'ꞔ',
|
1141 |
+
'Ʂ' => 'ʂ',
|
1142 |
+
'Ᶎ' => 'ᶎ',
|
1143 |
+
'Ꟈ' => 'ꟈ',
|
1144 |
+
'Ꟊ' => 'ꟊ',
|
1145 |
+
'Ꟶ' => 'ꟶ',
|
1146 |
+
'A' => 'a',
|
1147 |
+
'B' => 'b',
|
1148 |
+
'C' => 'c',
|
1149 |
+
'D' => 'd',
|
1150 |
+
'E' => 'e',
|
1151 |
+
'F' => 'f',
|
1152 |
+
'G' => 'g',
|
1153 |
+
'H' => 'h',
|
1154 |
+
'I' => 'i',
|
1155 |
+
'J' => 'j',
|
1156 |
+
'K' => 'k',
|
1157 |
+
'L' => 'l',
|
1158 |
+
'M' => 'm',
|
1159 |
+
'N' => 'n',
|
1160 |
+
'O' => 'o',
|
1161 |
+
'P' => 'p',
|
1162 |
+
'Q' => 'q',
|
1163 |
+
'R' => 'r',
|
1164 |
+
'S' => 's',
|
1165 |
+
'T' => 't',
|
1166 |
+
'U' => 'u',
|
1167 |
+
'V' => 'v',
|
1168 |
+
'W' => 'w',
|
1169 |
+
'X' => 'x',
|
1170 |
+
'Y' => 'y',
|
1171 |
+
'Z' => 'z',
|
1172 |
+
'𐐀' => '𐐨',
|
1173 |
+
'𐐁' => '𐐩',
|
1174 |
+
'𐐂' => '𐐪',
|
1175 |
+
'𐐃' => '𐐫',
|
1176 |
+
'𐐄' => '𐐬',
|
1177 |
+
'𐐅' => '𐐭',
|
1178 |
+
'𐐆' => '𐐮',
|
1179 |
+
'𐐇' => '𐐯',
|
1180 |
+
'𐐈' => '𐐰',
|
1181 |
+
'𐐉' => '𐐱',
|
1182 |
+
'𐐊' => '𐐲',
|
1183 |
+
'𐐋' => '𐐳',
|
1184 |
+
'𐐌' => '𐐴',
|
1185 |
+
'𐐍' => '𐐵',
|
1186 |
+
'𐐎' => '𐐶',
|
1187 |
+
'𐐏' => '𐐷',
|
1188 |
+
'𐐐' => '𐐸',
|
1189 |
+
'𐐑' => '𐐹',
|
1190 |
+
'𐐒' => '𐐺',
|
1191 |
+
'𐐓' => '𐐻',
|
1192 |
+
'𐐔' => '𐐼',
|
1193 |
+
'𐐕' => '𐐽',
|
1194 |
+
'𐐖' => '𐐾',
|
1195 |
+
'𐐗' => '𐐿',
|
1196 |
+
'𐐘' => '𐑀',
|
1197 |
+
'𐐙' => '𐑁',
|
1198 |
+
'𐐚' => '𐑂',
|
1199 |
+
'𐐛' => '𐑃',
|
1200 |
+
'𐐜' => '𐑄',
|
1201 |
+
'𐐝' => '𐑅',
|
1202 |
+
'𐐞' => '𐑆',
|
1203 |
+
'𐐟' => '𐑇',
|
1204 |
+
'𐐠' => '𐑈',
|
1205 |
+
'𐐡' => '𐑉',
|
1206 |
+
'𐐢' => '𐑊',
|
1207 |
+
'𐐣' => '𐑋',
|
1208 |
+
'𐐤' => '𐑌',
|
1209 |
+
'𐐥' => '𐑍',
|
1210 |
+
'𐐦' => '𐑎',
|
1211 |
+
'𐐧' => '𐑏',
|
1212 |
+
'𐒰' => '𐓘',
|
1213 |
+
'𐒱' => '𐓙',
|
1214 |
+
'𐒲' => '𐓚',
|
1215 |
+
'𐒳' => '𐓛',
|
1216 |
+
'𐒴' => '𐓜',
|
1217 |
+
'𐒵' => '𐓝',
|
1218 |
+
'𐒶' => '𐓞',
|
1219 |
+
'𐒷' => '𐓟',
|
1220 |
+
'𐒸' => '𐓠',
|
1221 |
+
'𐒹' => '𐓡',
|
1222 |
+
'𐒺' => '𐓢',
|
1223 |
+
'𐒻' => '𐓣',
|
1224 |
+
'𐒼' => '𐓤',
|
1225 |
+
'𐒽' => '𐓥',
|
1226 |
+
'𐒾' => '𐓦',
|
1227 |
+
'𐒿' => '𐓧',
|
1228 |
+
'𐓀' => '𐓨',
|
1229 |
+
'𐓁' => '𐓩',
|
1230 |
+
'𐓂' => '𐓪',
|
1231 |
+
'𐓃' => '𐓫',
|
1232 |
+
'𐓄' => '𐓬',
|
1233 |
+
'𐓅' => '𐓭',
|
1234 |
+
'𐓆' => '𐓮',
|
1235 |
+
'𐓇' => '𐓯',
|
1236 |
+
'𐓈' => '𐓰',
|
1237 |
+
'𐓉' => '𐓱',
|
1238 |
+
'𐓊' => '𐓲',
|
1239 |
+
'𐓋' => '𐓳',
|
1240 |
+
'𐓌' => '𐓴',
|
1241 |
+
'𐓍' => '𐓵',
|
1242 |
+
'𐓎' => '𐓶',
|
1243 |
+
'𐓏' => '𐓷',
|
1244 |
+
'𐓐' => '𐓸',
|
1245 |
+
'𐓑' => '𐓹',
|
1246 |
+
'𐓒' => '𐓺',
|
1247 |
+
'𐓓' => '𐓻',
|
1248 |
+
'𐲀' => '𐳀',
|
1249 |
+
'𐲁' => '𐳁',
|
1250 |
+
'𐲂' => '𐳂',
|
1251 |
+
'𐲃' => '𐳃',
|
1252 |
+
'𐲄' => '𐳄',
|
1253 |
+
'𐲅' => '𐳅',
|
1254 |
+
'𐲆' => '𐳆',
|
1255 |
+
'𐲇' => '𐳇',
|
1256 |
+
'𐲈' => '𐳈',
|
1257 |
+
'𐲉' => '𐳉',
|
1258 |
+
'𐲊' => '𐳊',
|
1259 |
+
'𐲋' => '𐳋',
|
1260 |
+
'𐲌' => '𐳌',
|
1261 |
+
'𐲍' => '𐳍',
|
1262 |
+
'𐲎' => '𐳎',
|
1263 |
+
'𐲏' => '𐳏',
|
1264 |
+
'𐲐' => '𐳐',
|
1265 |
+
'𐲑' => '𐳑',
|
1266 |
+
'𐲒' => '𐳒',
|
1267 |
+
'𐲓' => '𐳓',
|
1268 |
+
'𐲔' => '𐳔',
|
1269 |
+
'𐲕' => '𐳕',
|
1270 |
+
'𐲖' => '𐳖',
|
1271 |
+
'𐲗' => '𐳗',
|
1272 |
+
'𐲘' => '𐳘',
|
1273 |
+
'𐲙' => '𐳙',
|
1274 |
+
'𐲚' => '𐳚',
|
1275 |
+
'𐲛' => '𐳛',
|
1276 |
+
'𐲜' => '𐳜',
|
1277 |
+
'𐲝' => '𐳝',
|
1278 |
+
'𐲞' => '𐳞',
|
1279 |
+
'𐲟' => '𐳟',
|
1280 |
+
'𐲠' => '𐳠',
|
1281 |
+
'𐲡' => '𐳡',
|
1282 |
+
'𐲢' => '𐳢',
|
1283 |
+
'𐲣' => '𐳣',
|
1284 |
+
'𐲤' => '𐳤',
|
1285 |
+
'𐲥' => '𐳥',
|
1286 |
+
'𐲦' => '𐳦',
|
1287 |
+
'𐲧' => '𐳧',
|
1288 |
+
'𐲨' => '𐳨',
|
1289 |
+
'𐲩' => '𐳩',
|
1290 |
+
'𐲪' => '𐳪',
|
1291 |
+
'𐲫' => '𐳫',
|
1292 |
+
'𐲬' => '𐳬',
|
1293 |
+
'𐲭' => '𐳭',
|
1294 |
+
'𐲮' => '𐳮',
|
1295 |
+
'𐲯' => '𐳯',
|
1296 |
+
'𐲰' => '𐳰',
|
1297 |
+
'𐲱' => '𐳱',
|
1298 |
+
'𐲲' => '𐳲',
|
1299 |
+
'𑢠' => '𑣀',
|
1300 |
+
'𑢡' => '𑣁',
|
1301 |
+
'𑢢' => '𑣂',
|
1302 |
+
'𑢣' => '𑣃',
|
1303 |
+
'𑢤' => '𑣄',
|
1304 |
+
'𑢥' => '𑣅',
|
1305 |
+
'𑢦' => '𑣆',
|
1306 |
+
'𑢧' => '𑣇',
|
1307 |
+
'𑢨' => '𑣈',
|
1308 |
+
'𑢩' => '𑣉',
|
1309 |
+
'𑢪' => '𑣊',
|
1310 |
+
'𑢫' => '𑣋',
|
1311 |
+
'𑢬' => '𑣌',
|
1312 |
+
'𑢭' => '𑣍',
|
1313 |
+
'𑢮' => '𑣎',
|
1314 |
+
'𑢯' => '𑣏',
|
1315 |
+
'𑢰' => '𑣐',
|
1316 |
+
'𑢱' => '𑣑',
|
1317 |
+
'𑢲' => '𑣒',
|
1318 |
+
'𑢳' => '𑣓',
|
1319 |
+
'𑢴' => '𑣔',
|
1320 |
+
'𑢵' => '𑣕',
|
1321 |
+
'𑢶' => '𑣖',
|
1322 |
+
'𑢷' => '𑣗',
|
1323 |
+
'𑢸' => '𑣘',
|
1324 |
+
'𑢹' => '𑣙',
|
1325 |
+
'𑢺' => '𑣚',
|
1326 |
+
'𑢻' => '𑣛',
|
1327 |
+
'𑢼' => '𑣜',
|
1328 |
+
'𑢽' => '𑣝',
|
1329 |
+
'𑢾' => '𑣞',
|
1330 |
+
'𑢿' => '𑣟',
|
1331 |
+
'𖹀' => '𖹠',
|
1332 |
+
'𖹁' => '𖹡',
|
1333 |
+
'𖹂' => '𖹢',
|
1334 |
+
'𖹃' => '𖹣',
|
1335 |
+
'𖹄' => '𖹤',
|
1336 |
+
'𖹅' => '𖹥',
|
1337 |
+
'𖹆' => '𖹦',
|
1338 |
+
'𖹇' => '𖹧',
|
1339 |
+
'𖹈' => '𖹨',
|
1340 |
+
'𖹉' => '𖹩',
|
1341 |
+
'𖹊' => '𖹪',
|
1342 |
+
'𖹋' => '𖹫',
|
1343 |
+
'𖹌' => '𖹬',
|
1344 |
+
'𖹍' => '𖹭',
|
1345 |
+
'𖹎' => '𖹮',
|
1346 |
+
'𖹏' => '𖹯',
|
1347 |
+
'𖹐' => '𖹰',
|
1348 |
+
'𖹑' => '𖹱',
|
1349 |
+
'𖹒' => '𖹲',
|
1350 |
+
'𖹓' => '𖹳',
|
1351 |
+
'𖹔' => '𖹴',
|
1352 |
+
'𖹕' => '𖹵',
|
1353 |
+
'𖹖' => '𖹶',
|
1354 |
+
'𖹗' => '𖹷',
|
1355 |
+
'𖹘' => '𖹸',
|
1356 |
+
'𖹙' => '𖹹',
|
1357 |
+
'𖹚' => '𖹺',
|
1358 |
+
'𖹛' => '𖹻',
|
1359 |
+
'𖹜' => '𖹼',
|
1360 |
+
'𖹝' => '𖹽',
|
1361 |
+
'𖹞' => '𖹾',
|
1362 |
+
'𖹟' => '𖹿',
|
1363 |
+
'𞤀' => '𞤢',
|
1364 |
+
'𞤁' => '𞤣',
|
1365 |
+
'𞤂' => '𞤤',
|
1366 |
+
'𞤃' => '𞤥',
|
1367 |
+
'𞤄' => '𞤦',
|
1368 |
+
'𞤅' => '𞤧',
|
1369 |
+
'𞤆' => '𞤨',
|
1370 |
+
'𞤇' => '𞤩',
|
1371 |
+
'𞤈' => '𞤪',
|
1372 |
+
'𞤉' => '𞤫',
|
1373 |
+
'𞤊' => '𞤬',
|
1374 |
+
'𞤋' => '𞤭',
|
1375 |
+
'𞤌' => '𞤮',
|
1376 |
+
'𞤍' => '𞤯',
|
1377 |
+
'𞤎' => '𞤰',
|
1378 |
+
'𞤏' => '𞤱',
|
1379 |
+
'𞤐' => '𞤲',
|
1380 |
+
'𞤑' => '𞤳',
|
1381 |
+
'𞤒' => '𞤴',
|
1382 |
+
'𞤓' => '𞤵',
|
1383 |
+
'𞤔' => '𞤶',
|
1384 |
+
'𞤕' => '𞤷',
|
1385 |
+
'𞤖' => '𞤸',
|
1386 |
+
'𞤗' => '𞤹',
|
1387 |
+
'𞤘' => '𞤺',
|
1388 |
+
'𞤙' => '𞤻',
|
1389 |
+
'𞤚' => '𞤼',
|
1390 |
+
'𞤛' => '𞤽',
|
1391 |
+
'𞤜' => '𞤾',
|
1392 |
+
'𞤝' => '𞤿',
|
1393 |
+
'𞤞' => '𞥀',
|
1394 |
+
'𞤟' => '𞥁',
|
1395 |
+
'𞤠' => '𞥂',
|
1396 |
+
'𞤡' => '𞥃',
|
1397 |
+
);
|
vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
// from Case_Ignorable in https://unicode.org/Public/UNIDATA/DerivedCoreProperties.txt
|
4 |
+
|
5 |
+
return '/(?<![\x{0027}\x{002E}\x{003A}\x{005E}\x{0060}\x{00A8}\x{00AD}\x{00AF}\x{00B4}\x{00B7}\x{00B8}\x{02B0}-\x{02C1}\x{02C2}-\x{02C5}\x{02C6}-\x{02D1}\x{02D2}-\x{02DF}\x{02E0}-\x{02E4}\x{02E5}-\x{02EB}\x{02EC}\x{02ED}\x{02EE}\x{02EF}-\x{02FF}\x{0300}-\x{036F}\x{0374}\x{0375}\x{037A}\x{0384}-\x{0385}\x{0387}\x{0483}-\x{0487}\x{0488}-\x{0489}\x{0559}\x{0591}-\x{05BD}\x{05BF}\x{05C1}-\x{05C2}\x{05C4}-\x{05C5}\x{05C7}\x{05F4}\x{0600}-\x{0605}\x{0610}-\x{061A}\x{061C}\x{0640}\x{064B}-\x{065F}\x{0670}\x{06D6}-\x{06DC}\x{06DD}\x{06DF}-\x{06E4}\x{06E5}-\x{06E6}\x{06E7}-\x{06E8}\x{06EA}-\x{06ED}\x{070F}\x{0711}\x{0730}-\x{074A}\x{07A6}-\x{07B0}\x{07EB}-\x{07F3}\x{07F4}-\x{07F5}\x{07FA}\x{07FD}\x{0816}-\x{0819}\x{081A}\x{081B}-\x{0823}\x{0824}\x{0825}-\x{0827}\x{0828}\x{0829}-\x{082D}\x{0859}-\x{085B}\x{08D3}-\x{08E1}\x{08E2}\x{08E3}-\x{0902}\x{093A}\x{093C}\x{0941}-\x{0948}\x{094D}\x{0951}-\x{0957}\x{0962}-\x{0963}\x{0971}\x{0981}\x{09BC}\x{09C1}-\x{09C4}\x{09CD}\x{09E2}-\x{09E3}\x{09FE}\x{0A01}-\x{0A02}\x{0A3C}\x{0A41}-\x{0A42}\x{0A47}-\x{0A48}\x{0A4B}-\x{0A4D}\x{0A51}\x{0A70}-\x{0A71}\x{0A75}\x{0A81}-\x{0A82}\x{0ABC}\x{0AC1}-\x{0AC5}\x{0AC7}-\x{0AC8}\x{0ACD}\x{0AE2}-\x{0AE3}\x{0AFA}-\x{0AFF}\x{0B01}\x{0B3C}\x{0B3F}\x{0B41}-\x{0B44}\x{0B4D}\x{0B56}\x{0B62}-\x{0B63}\x{0B82}\x{0BC0}\x{0BCD}\x{0C00}\x{0C04}\x{0C3E}-\x{0C40}\x{0C46}-\x{0C48}\x{0C4A}-\x{0C4D}\x{0C55}-\x{0C56}\x{0C62}-\x{0C63}\x{0C81}\x{0CBC}\x{0CBF}\x{0CC6}\x{0CCC}-\x{0CCD}\x{0CE2}-\x{0CE3}\x{0D00}-\x{0D01}\x{0D3B}-\x{0D3C}\x{0D41}-\x{0D44}\x{0D4D}\x{0D62}-\x{0D63}\x{0DCA}\x{0DD2}-\x{0DD4}\x{0DD6}\x{0E31}\x{0E34}-\x{0E3A}\x{0E46}\x{0E47}-\x{0E4E}\x{0EB1}\x{0EB4}-\x{0EB9}\x{0EBB}-\x{0EBC}\x{0EC6}\x{0EC8}-\x{0ECD}\x{0F18}-\x{0F19}\x{0F35}\x{0F37}\x{0F39}\x{0F71}-\x{0F7E}\x{0F80}-\x{0F84}\x{0F86}-\x{0F87}\x{0F8D}-\x{0F97}\x{0F99}-\x{0FBC}\x{0FC6}\x{102D}-\x{1030}\x{1032}-\x{1037}\x{1039}-\x{103A}\x{103D}-\x{103E}\x{1058}-\x{1059}\x{105E}-\x{1060}\x{1071}-\x{1074}\x{1082}\x{1085}-\x{1086}\x{108D}\x{109D}\x{10FC}\x{135D}-\x{135F}\x{1712}-\x{1714}\x{1732}-\x{1734}\x{1752}-\x{1753}\x{1772}-\x{1773}\x{17B4}-\x{17B5}\x{17B7}-\x{17BD}\x{17C6}\x{17C9}-\x{17D3}\x{17D7}\x{17DD}\x{180B}-\x{180D}\x{180E}\x{1843}\x{1885}-\x{1886}\x{18A9}\x{1920}-\x{1922}\x{1927}-\x{1928}\x{1932}\x{1939}-\x{193B}\x{1A17}-\x{1A18}\x{1A1B}\x{1A56}\x{1A58}-\x{1A5E}\x{1A60}\x{1A62}\x{1A65}-\x{1A6C}\x{1A73}-\x{1A7C}\x{1A7F}\x{1AA7}\x{1AB0}-\x{1ABD}\x{1ABE}\x{1B00}-\x{1B03}\x{1B34}\x{1B36}-\x{1B3A}\x{1B3C}\x{1B42}\x{1B6B}-\x{1B73}\x{1B80}-\x{1B81}\x{1BA2}-\x{1BA5}\x{1BA8}-\x{1BA9}\x{1BAB}-\x{1BAD}\x{1BE6}\x{1BE8}-\x{1BE9}\x{1BED}\x{1BEF}-\x{1BF1}\x{1C2C}-\x{1C33}\x{1C36}-\x{1C37}\x{1C78}-\x{1C7D}\x{1CD0}-\x{1CD2}\x{1CD4}-\x{1CE0}\x{1CE2}-\x{1CE8}\x{1CED}\x{1CF4}\x{1CF8}-\x{1CF9}\x{1D2C}-\x{1D6A}\x{1D78}\x{1D9B}-\x{1DBF}\x{1DC0}-\x{1DF9}\x{1DFB}-\x{1DFF}\x{1FBD}\x{1FBF}-\x{1FC1}\x{1FCD}-\x{1FCF}\x{1FDD}-\x{1FDF}\x{1FED}-\x{1FEF}\x{1FFD}-\x{1FFE}\x{200B}-\x{200F}\x{2018}\x{2019}\x{2024}\x{2027}\x{202A}-\x{202E}\x{2060}-\x{2064}\x{2066}-\x{206F}\x{2071}\x{207F}\x{2090}-\x{209C}\x{20D0}-\x{20DC}\x{20DD}-\x{20E0}\x{20E1}\x{20E2}-\x{20E4}\x{20E5}-\x{20F0}\x{2C7C}-\x{2C7D}\x{2CEF}-\x{2CF1}\x{2D6F}\x{2D7F}\x{2DE0}-\x{2DFF}\x{2E2F}\x{3005}\x{302A}-\x{302D}\x{3031}-\x{3035}\x{303B}\x{3099}-\x{309A}\x{309B}-\x{309C}\x{309D}-\x{309E}\x{30FC}-\x{30FE}\x{A015}\x{A4F8}-\x{A4FD}\x{A60C}\x{A66F}\x{A670}-\x{A672}\x{A674}-\x{A67D}\x{A67F}\x{A69C}-\x{A69D}\x{A69E}-\x{A69F}\x{A6F0}-\x{A6F1}\x{A700}-\x{A716}\x{A717}-\x{A71F}\x{A720}-\x{A721}\x{A770}\x{A788}\x{A789}-\x{A78A}\x{A7F8}-\x{A7F9}\x{A802}\x{A806}\x{A80B}\x{A825}-\x{A826}\x{A8C4}-\x{A8C5}\x{A8E0}-\x{A8F1}\x{A8FF}\x{A926}-\x{A92D}\x{A947}-\x{A951}\x{A980}-\x{A982}\x{A9B3}\x{A9B6}-\x{A9B9}\x{A9BC}\x{A9CF}\x{A9E5}\x{A9E6}\x{AA29}-\x{AA2E}\x{AA31}-\x{AA32}\x{AA35}-\x{AA36}\x{AA43}\x{AA4C}\x{AA70}\x{AA7C}\x{AAB0}\x{AAB2}-\x{AAB4}\x{AAB7}-\x{AAB8}\x{AABE}-\x{AABF}\x{AAC1}\x{AADD}\x{AAEC}-\x{AAED}\x{AAF3}-\x{AAF4}\x{AAF6}\x{AB5B}\x{AB5C}-\x{AB5F}\x{ABE5}\x{ABE8}\x{ABED}\x{FB1E}\x{FBB2}-\x{FBC1}\x{FE00}-\x{FE0F}\x{FE13}\x{FE20}-\x{FE2F}\x{FE52}\x{FE55}\x{FEFF}\x{FF07}\x{FF0E}\x{FF1A}\x{FF3E}\x{FF40}\x{FF70}\x{FF9E}-\x{FF9F}\x{FFE3}\x{FFF9}-\x{FFFB}\x{101FD}\x{102E0}\x{10376}-\x{1037A}\x{10A01}-\x{10A03}\x{10A05}-\x{10A06}\x{10A0C}-\x{10A0F}\x{10A38}-\x{10A3A}\x{10A3F}\x{10AE5}-\x{10AE6}\x{10D24}-\x{10D27}\x{10F46}-\x{10F50}\x{11001}\x{11038}-\x{11046}\x{1107F}-\x{11081}\x{110B3}-\x{110B6}\x{110B9}-\x{110BA}\x{110BD}\x{110CD}\x{11100}-\x{11102}\x{11127}-\x{1112B}\x{1112D}-\x{11134}\x{11173}\x{11180}-\x{11181}\x{111B6}-\x{111BE}\x{111C9}-\x{111CC}\x{1122F}-\x{11231}\x{11234}\x{11236}-\x{11237}\x{1123E}\x{112DF}\x{112E3}-\x{112EA}\x{11300}-\x{11301}\x{1133B}-\x{1133C}\x{11340}\x{11366}-\x{1136C}\x{11370}-\x{11374}\x{11438}-\x{1143F}\x{11442}-\x{11444}\x{11446}\x{1145E}\x{114B3}-\x{114B8}\x{114BA}\x{114BF}-\x{114C0}\x{114C2}-\x{114C3}\x{115B2}-\x{115B5}\x{115BC}-\x{115BD}\x{115BF}-\x{115C0}\x{115DC}-\x{115DD}\x{11633}-\x{1163A}\x{1163D}\x{1163F}-\x{11640}\x{116AB}\x{116AD}\x{116B0}-\x{116B5}\x{116B7}\x{1171D}-\x{1171F}\x{11722}-\x{11725}\x{11727}-\x{1172B}\x{1182F}-\x{11837}\x{11839}-\x{1183A}\x{11A01}-\x{11A0A}\x{11A33}-\x{11A38}\x{11A3B}-\x{11A3E}\x{11A47}\x{11A51}-\x{11A56}\x{11A59}-\x{11A5B}\x{11A8A}-\x{11A96}\x{11A98}-\x{11A99}\x{11C30}-\x{11C36}\x{11C38}-\x{11C3D}\x{11C3F}\x{11C92}-\x{11CA7}\x{11CAA}-\x{11CB0}\x{11CB2}-\x{11CB3}\x{11CB5}-\x{11CB6}\x{11D31}-\x{11D36}\x{11D3A}\x{11D3C}-\x{11D3D}\x{11D3F}-\x{11D45}\x{11D47}\x{11D90}-\x{11D91}\x{11D95}\x{11D97}\x{11EF3}-\x{11EF4}\x{16AF0}-\x{16AF4}\x{16B30}-\x{16B36}\x{16B40}-\x{16B43}\x{16F8F}-\x{16F92}\x{16F93}-\x{16F9F}\x{16FE0}-\x{16FE1}\x{1BC9D}-\x{1BC9E}\x{1BCA0}-\x{1BCA3}\x{1D167}-\x{1D169}\x{1D173}-\x{1D17A}\x{1D17B}-\x{1D182}\x{1D185}-\x{1D18B}\x{1D1AA}-\x{1D1AD}\x{1D242}-\x{1D244}\x{1DA00}-\x{1DA36}\x{1DA3B}-\x{1DA6C}\x{1DA75}\x{1DA84}\x{1DA9B}-\x{1DA9F}\x{1DAA1}-\x{1DAAF}\x{1E000}-\x{1E006}\x{1E008}-\x{1E018}\x{1E01B}-\x{1E021}\x{1E023}-\x{1E024}\x{1E026}-\x{1E02A}\x{1E8D0}-\x{1E8D6}\x{1E944}-\x{1E94A}\x{1F3FB}-\x{1F3FF}\x{E0001}\x{E0020}-\x{E007F}\x{E0100}-\x{E01EF}])(\pL)(\pL*+)/u';
|
vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php
ADDED
@@ -0,0 +1,1414 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
return array (
|
4 |
+
'a' => 'A',
|
5 |
+
'b' => 'B',
|
6 |
+
'c' => 'C',
|
7 |
+
'd' => 'D',
|
8 |
+
'e' => 'E',
|
9 |
+
'f' => 'F',
|
10 |
+
'g' => 'G',
|
11 |
+
'h' => 'H',
|
12 |
+
'i' => 'I',
|
13 |
+
'j' => 'J',
|
14 |
+
'k' => 'K',
|
15 |
+
'l' => 'L',
|
16 |
+
'm' => 'M',
|
17 |
+
'n' => 'N',
|
18 |
+
'o' => 'O',
|
19 |
+
'p' => 'P',
|
20 |
+
'q' => 'Q',
|
21 |
+
'r' => 'R',
|
22 |
+
's' => 'S',
|
23 |
+
't' => 'T',
|
24 |
+
'u' => 'U',
|
25 |
+
'v' => 'V',
|
26 |
+
'w' => 'W',
|
27 |
+
'x' => 'X',
|
28 |
+
'y' => 'Y',
|
29 |
+
'z' => 'Z',
|
30 |
+
'µ' => 'Μ',
|
31 |
+
'à' => 'À',
|
32 |
+
'á' => 'Á',
|
33 |
+
'â' => 'Â',
|
34 |
+
'ã' => 'Ã',
|
35 |
+
'ä' => 'Ä',
|
36 |
+
'å' => 'Å',
|
37 |
+
'æ' => 'Æ',
|
38 |
+
'ç' => 'Ç',
|
39 |
+
'è' => 'È',
|
40 |
+
'é' => 'É',
|
41 |
+
'ê' => 'Ê',
|
42 |
+
'ë' => 'Ë',
|
43 |
+
'ì' => 'Ì',
|
44 |
+
'í' => 'Í',
|
45 |
+
'î' => 'Î',
|
46 |
+
'ï' => 'Ï',
|
47 |
+
'ð' => 'Ð',
|
48 |
+
'ñ' => 'Ñ',
|
49 |
+
'ò' => 'Ò',
|
50 |
+
'ó' => 'Ó',
|
51 |
+
'ô' => 'Ô',
|
52 |
+
'õ' => 'Õ',
|
53 |
+
'ö' => 'Ö',
|
54 |
+
'ø' => 'Ø',
|
55 |
+
'ù' => 'Ù',
|
56 |
+
'ú' => 'Ú',
|
57 |
+
'û' => 'Û',
|
58 |
+
'ü' => 'Ü',
|
59 |
+
'ý' => 'Ý',
|
60 |
+
'þ' => 'Þ',
|
61 |
+
'ÿ' => 'Ÿ',
|
62 |
+
'ā' => 'Ā',
|
63 |
+
'ă' => 'Ă',
|
64 |
+
'ą' => 'Ą',
|
65 |
+
'ć' => 'Ć',
|
66 |
+
'ĉ' => 'Ĉ',
|
67 |
+
'ċ' => 'Ċ',
|
68 |
+
'č' => 'Č',
|
69 |
+
'ď' => 'Ď',
|
70 |
+
'đ' => 'Đ',
|
71 |
+
'ē' => 'Ē',
|
72 |
+
'ĕ' => 'Ĕ',
|
73 |
+
'ė' => 'Ė',
|
74 |
+
'ę' => 'Ę',
|
75 |
+
'ě' => 'Ě',
|
76 |
+
'ĝ' => 'Ĝ',
|
77 |
+
'ğ' => 'Ğ',
|
78 |
+
'ġ' => 'Ġ',
|
79 |
+
'ģ' => 'Ģ',
|
80 |
+
'ĥ' => 'Ĥ',
|
81 |
+
'ħ' => 'Ħ',
|
82 |
+
'ĩ' => 'Ĩ',
|
83 |
+
'ī' => 'Ī',
|
84 |
+
'ĭ' => 'Ĭ',
|
85 |
+
'į' => 'Į',
|
86 |
+
'ı' => 'I',
|
87 |
+
'ij' => 'IJ',
|
88 |
+
'ĵ' => 'Ĵ',
|
89 |
+
'ķ' => 'Ķ',
|
90 |
+
'ĺ' => 'Ĺ',
|
91 |
+
'ļ' => 'Ļ',
|
92 |
+
'ľ' => 'Ľ',
|
93 |
+
'ŀ' => 'Ŀ',
|
94 |
+
'ł' => 'Ł',
|
95 |
+
'ń' => 'Ń',
|
96 |
+
'ņ' => 'Ņ',
|
97 |
+
'ň' => 'Ň',
|
98 |
+
'ŋ' => 'Ŋ',
|
99 |
+
'ō' => 'Ō',
|
100 |
+
'ŏ' => 'Ŏ',
|
101 |
+
'ő' => 'Ő',
|
102 |
+
'œ' => 'Œ',
|
103 |
+
'ŕ' => 'Ŕ',
|
104 |
+
'ŗ' => 'Ŗ',
|
105 |
+
'ř' => 'Ř',
|
106 |
+
'ś' => 'Ś',
|
107 |
+
'ŝ' => 'Ŝ',
|
108 |
+
'ş' => 'Ş',
|
109 |
+
'š' => 'Š',
|
110 |
+
'ţ' => 'Ţ',
|
111 |
+
'ť' => 'Ť',
|
112 |
+
'ŧ' => 'Ŧ',
|
113 |
+
'ũ' => 'Ũ',
|
114 |
+
'ū' => 'Ū',
|
115 |
+
'ŭ' => 'Ŭ',
|
116 |
+
'ů' => 'Ů',
|
117 |
+
'ű' => 'Ű',
|
118 |
+
'ų' => 'Ų',
|
119 |
+
'ŵ' => 'Ŵ',
|
120 |
+
'ŷ' => 'Ŷ',
|
121 |
+
'ź' => 'Ź',
|
122 |
+
'ż' => 'Ż',
|
123 |
+
'ž' => 'Ž',
|
124 |
+
'ſ' => 'S',
|
125 |
+
'ƀ' => 'Ƀ',
|
126 |
+
'ƃ' => 'Ƃ',
|
127 |
+
'ƅ' => 'Ƅ',
|
128 |
+
'ƈ' => 'Ƈ',
|
129 |
+
'ƌ' => 'Ƌ',
|
130 |
+
'ƒ' => 'Ƒ',
|
131 |
+
'ƕ' => 'Ƕ',
|
132 |
+
'ƙ' => 'Ƙ',
|
133 |
+
'ƚ' => 'Ƚ',
|
134 |
+
'ƞ' => 'Ƞ',
|
135 |
+
'ơ' => 'Ơ',
|
136 |
+
'ƣ' => 'Ƣ',
|
137 |
+
'ƥ' => 'Ƥ',
|
138 |
+
'ƨ' => 'Ƨ',
|
139 |
+
'ƭ' => 'Ƭ',
|
140 |
+
'ư' => 'Ư',
|
141 |
+
'ƴ' => 'Ƴ',
|
142 |
+
'ƶ' => 'Ƶ',
|
143 |
+
'ƹ' => 'Ƹ',
|
144 |
+
'ƽ' => 'Ƽ',
|
145 |
+
'ƿ' => 'Ƿ',
|
146 |
+
'Dž' => 'DŽ',
|
147 |
+
'dž' => 'DŽ',
|
148 |
+
'Lj' => 'LJ',
|
149 |
+
'lj' => 'LJ',
|
150 |
+
'Nj' => 'NJ',
|
151 |
+
'nj' => 'NJ',
|
152 |
+
'ǎ' => 'Ǎ',
|
153 |
+
'ǐ' => 'Ǐ',
|
154 |
+
'ǒ' => 'Ǒ',
|
155 |
+
'ǔ' => 'Ǔ',
|
156 |
+
'ǖ' => 'Ǖ',
|
157 |
+
'ǘ' => 'Ǘ',
|
158 |
+
'ǚ' => 'Ǚ',
|
159 |
+
'ǜ' => 'Ǜ',
|
160 |
+
'ǝ' => 'Ǝ',
|
161 |
+
'ǟ' => 'Ǟ',
|
162 |
+
'ǡ' => 'Ǡ',
|
163 |
+
'ǣ' => 'Ǣ',
|
164 |
+
'ǥ' => 'Ǥ',
|
165 |
+
'ǧ' => 'Ǧ',
|
166 |
+
'ǩ' => 'Ǩ',
|
167 |
+
'ǫ' => 'Ǫ',
|
168 |
+
'ǭ' => 'Ǭ',
|
169 |
+
'ǯ' => 'Ǯ',
|
170 |
+
'Dz' => 'DZ',
|
171 |
+
'dz' => 'DZ',
|
172 |
+
'ǵ' => 'Ǵ',
|
173 |
+
'ǹ' => 'Ǹ',
|
174 |
+
'ǻ' => 'Ǻ',
|
175 |
+
'ǽ' => 'Ǽ',
|
176 |
+
'ǿ' => 'Ǿ',
|
177 |
+
'ȁ' => 'Ȁ',
|
178 |
+
'ȃ' => 'Ȃ',
|
179 |
+
'ȅ' => 'Ȅ',
|
180 |
+
'ȇ' => 'Ȇ',
|
181 |
+
'ȉ' => 'Ȉ',
|
182 |
+
'ȋ' => 'Ȋ',
|
183 |
+
'ȍ' => 'Ȍ',
|
184 |
+
'ȏ' => 'Ȏ',
|
185 |
+
'ȑ' => 'Ȑ',
|
186 |
+
'ȓ' => 'Ȓ',
|
187 |
+
'ȕ' => 'Ȕ',
|
188 |
+
'ȗ' => 'Ȗ',
|
189 |
+
'ș' => 'Ș',
|
190 |
+
'ț' => 'Ț',
|
191 |
+
'ȝ' => 'Ȝ',
|
192 |
+
'ȟ' => 'Ȟ',
|
193 |
+
'ȣ' => 'Ȣ',
|
194 |
+
'ȥ' => 'Ȥ',
|
195 |
+
'ȧ' => 'Ȧ',
|
196 |
+
'ȩ' => 'Ȩ',
|
197 |
+
'ȫ' => 'Ȫ',
|
198 |
+
'ȭ' => 'Ȭ',
|
199 |
+
'ȯ' => 'Ȯ',
|
200 |
+
'ȱ' => 'Ȱ',
|
201 |
+
'ȳ' => 'Ȳ',
|
202 |
+
'ȼ' => 'Ȼ',
|
203 |
+
'ȿ' => 'Ȿ',
|
204 |
+
'ɀ' => 'Ɀ',
|
205 |
+
'ɂ' => 'Ɂ',
|
206 |
+
'ɇ' => 'Ɇ',
|
207 |
+
'ɉ' => 'Ɉ',
|
208 |
+
'ɋ' => 'Ɋ',
|
209 |
+
'ɍ' => 'Ɍ',
|
210 |
+
'ɏ' => 'Ɏ',
|
211 |
+
'ɐ' => 'Ɐ',
|
212 |
+
'ɑ' => 'Ɑ',
|
213 |
+
'ɒ' => 'Ɒ',
|
214 |
+
'ɓ' => 'Ɓ',
|
215 |
+
'ɔ' => 'Ɔ',
|
216 |
+
'ɖ' => 'Ɖ',
|
217 |
+
'ɗ' => 'Ɗ',
|
218 |
+
'ə' => 'Ə',
|
219 |
+
'ɛ' => 'Ɛ',
|
220 |
+
'ɜ' => 'Ɜ',
|
221 |
+
'ɠ' => 'Ɠ',
|
222 |
+
'ɡ' => 'Ɡ',
|
223 |
+
'ɣ' => 'Ɣ',
|
224 |
+
'ɥ' => 'Ɥ',
|
225 |
+
'ɦ' => 'Ɦ',
|
226 |
+
'ɨ' => 'Ɨ',
|
227 |
+
'ɩ' => 'Ɩ',
|
228 |
+
'ɪ' => 'Ɪ',
|
229 |
+
'ɫ' => 'Ɫ',
|
230 |
+
'ɬ' => 'Ɬ',
|
231 |
+
'ɯ' => 'Ɯ',
|
232 |
+
'ɱ' => 'Ɱ',
|
233 |
+
'ɲ' => 'Ɲ',
|
234 |
+
'ɵ' => 'Ɵ',
|
235 |
+
'ɽ' => 'Ɽ',
|
236 |
+
'ʀ' => 'Ʀ',
|
237 |
+
'ʂ' => 'Ʂ',
|
238 |
+
'ʃ' => 'Ʃ',
|
239 |
+
'ʇ' => 'Ʇ',
|
240 |
+
'ʈ' => 'Ʈ',
|
241 |
+
'ʉ' => 'Ʉ',
|
242 |
+
'ʊ' => 'Ʊ',
|
243 |
+
'ʋ' => 'Ʋ',
|
244 |
+
'ʌ' => 'Ʌ',
|
245 |
+
'ʒ' => 'Ʒ',
|
246 |
+
'ʝ' => 'Ʝ',
|
247 |
+
'ʞ' => 'Ʞ',
|
248 |
+
'ͅ' => 'Ι',
|
249 |
+
'ͱ' => 'Ͱ',
|
250 |
+
'ͳ' => 'Ͳ',
|
251 |
+
'ͷ' => 'Ͷ',
|
252 |
+
'ͻ' => 'Ͻ',
|
253 |
+
'ͼ' => 'Ͼ',
|
254 |
+
'ͽ' => 'Ͽ',
|
255 |
+
'ά' => 'Ά',
|
256 |
+
'έ' => 'Έ',
|
257 |
+
'ή' => 'Ή',
|
258 |
+
'ί' => 'Ί',
|
259 |
+
'α' => 'Α',
|
260 |
+
'β' => 'Β',
|
261 |
+
'γ' => 'Γ',
|
262 |
+
'δ' => 'Δ',
|
263 |
+
'ε' => 'Ε',
|
264 |
+
'ζ' => 'Ζ',
|
265 |
+
'η' => 'Η',
|
266 |
+
'θ' => 'Θ',
|
267 |
+
'ι' => 'Ι',
|
268 |
+
'κ' => 'Κ',
|
269 |
+
'λ' => 'Λ',
|
270 |
+
'μ' => 'Μ',
|
271 |
+
'ν' => 'Ν',
|
272 |
+
'ξ' => 'Ξ',
|
273 |
+
'ο' => 'Ο',
|
274 |
+
'π' => 'Π',
|
275 |
+
'ρ' => 'Ρ',
|
276 |
+
'ς' => 'Σ',
|
277 |
+
'σ' => 'Σ',
|
278 |
+
'τ' => 'Τ',
|
279 |
+
'υ' => 'Υ',
|
280 |
+
'φ' => 'Φ',
|
281 |
+
'χ' => 'Χ',
|
282 |
+
'ψ' => 'Ψ',
|
283 |
+
'ω' => 'Ω',
|
284 |
+
'ϊ' => 'Ϊ',
|
285 |
+
'ϋ' => 'Ϋ',
|
286 |
+
'ό' => 'Ό',
|
287 |
+
'ύ' => 'Ύ',
|
288 |
+
'ώ' => 'Ώ',
|
289 |
+
'ϐ' => 'Β',
|
290 |
+
'ϑ' => 'Θ',
|
291 |
+
'ϕ' => 'Φ',
|
292 |
+
'ϖ' => 'Π',
|
293 |
+
'ϗ' => 'Ϗ',
|
294 |
+
'ϙ' => 'Ϙ',
|
295 |
+
'ϛ' => 'Ϛ',
|
296 |
+
'ϝ' => 'Ϝ',
|
297 |
+
'ϟ' => 'Ϟ',
|
298 |
+
'ϡ' => 'Ϡ',
|
299 |
+
'ϣ' => 'Ϣ',
|
300 |
+
'ϥ' => 'Ϥ',
|
301 |
+
'ϧ' => 'Ϧ',
|
302 |
+
'ϩ' => 'Ϩ',
|
303 |
+
'ϫ' => 'Ϫ',
|
304 |
+
'ϭ' => 'Ϭ',
|
305 |
+
'ϯ' => 'Ϯ',
|
306 |
+
'ϰ' => 'Κ',
|
307 |
+
'ϱ' => 'Ρ',
|
308 |
+
'ϲ' => 'Ϲ',
|
309 |
+
'ϳ' => 'Ϳ',
|
310 |
+
'ϵ' => 'Ε',
|
311 |
+
'ϸ' => 'Ϸ',
|
312 |
+
'ϻ' => 'Ϻ',
|
313 |
+
'а' => 'А',
|
314 |
+
'б' => 'Б',
|
315 |
+
'в' => 'В',
|
316 |
+
'г' => 'Г',
|
317 |
+
'д' => 'Д',
|
318 |
+
'е' => 'Е',
|
319 |
+
'ж' => 'Ж',
|
320 |
+
'з' => 'З',
|
321 |
+
'и' => 'И',
|
322 |
+
'й' => 'Й',
|
323 |
+
'к' => 'К',
|
324 |
+
'л' => 'Л',
|
325 |
+
'м' => 'М',
|
326 |
+
'н' => 'Н',
|
327 |
+
'о' => 'О',
|
328 |
+
'п' => 'П',
|
329 |
+
'р' => 'Р',
|
330 |
+
'с' => 'С',
|
331 |
+
'т' => 'Т',
|
332 |
+
'у' => 'У',
|
333 |
+
'ф' => 'Ф',
|
334 |
+
'х' => 'Х',
|
335 |
+
'ц' => 'Ц',
|
336 |
+
'ч' => 'Ч',
|
337 |
+
'ш' => 'Ш',
|
338 |
+
'щ' => 'Щ',
|
339 |
+
'ъ' => 'Ъ',
|
340 |
+
'ы' => 'Ы',
|
341 |
+
'ь' => 'Ь',
|
342 |
+
'э' => 'Э',
|
343 |
+
'ю' => 'Ю',
|
344 |
+
'я' => 'Я',
|
345 |
+
'ѐ' => 'Ѐ',
|
346 |
+
'ё' => 'Ё',
|
347 |
+
'ђ' => 'Ђ',
|
348 |
+
'ѓ' => 'Ѓ',
|
349 |
+
'є' => 'Є',
|
350 |
+
'ѕ' => 'Ѕ',
|
351 |
+
'і' => 'І',
|
352 |
+
'ї' => 'Ї',
|
353 |
+
'ј' => 'Ј',
|
354 |
+
'љ' => 'Љ',
|
355 |
+
'њ' => 'Њ',
|
356 |
+
'ћ' => 'Ћ',
|
357 |
+
'ќ' => 'Ќ',
|
358 |
+
'ѝ' => 'Ѝ',
|
359 |
+
'ў' => 'Ў',
|
360 |
+
'џ' => 'Џ',
|
361 |
+
'ѡ' => 'Ѡ',
|
362 |
+
'ѣ' => 'Ѣ',
|
363 |
+
'ѥ' => 'Ѥ',
|
364 |
+
'ѧ' => 'Ѧ',
|
365 |
+
'ѩ' => 'Ѩ',
|
366 |
+
'ѫ' => 'Ѫ',
|
367 |
+
'ѭ' => 'Ѭ',
|
368 |
+
'ѯ' => 'Ѯ',
|
369 |
+
'ѱ' => 'Ѱ',
|
370 |
+
'ѳ' => 'Ѳ',
|
371 |
+
'ѵ' => 'Ѵ',
|
372 |
+
'ѷ' => 'Ѷ',
|
373 |
+
'ѹ' => 'Ѹ',
|
374 |
+
'ѻ' => 'Ѻ',
|
375 |
+
'ѽ' => 'Ѽ',
|
376 |
+
'ѿ' => 'Ѿ',
|
377 |
+
'ҁ' => 'Ҁ',
|
378 |
+
'ҋ' => 'Ҋ',
|
379 |
+
'ҍ' => 'Ҍ',
|
380 |
+
'ҏ' => 'Ҏ',
|
381 |
+
'ґ' => 'Ґ',
|
382 |
+
'ғ' => 'Ғ',
|
383 |
+
'ҕ' => 'Ҕ',
|
384 |
+
'җ' => 'Җ',
|
385 |
+
'ҙ' => 'Ҙ',
|
386 |
+
'қ' => 'Қ',
|
387 |
+
'ҝ' => 'Ҝ',
|
388 |
+
'ҟ' => 'Ҟ',
|
389 |
+
'ҡ' => 'Ҡ',
|
390 |
+
'ң' => 'Ң',
|
391 |
+
'ҥ' => 'Ҥ',
|
392 |
+
'ҧ' => 'Ҧ',
|
393 |
+
'ҩ' => 'Ҩ',
|
394 |
+
'ҫ' => 'Ҫ',
|
395 |
+
'ҭ' => 'Ҭ',
|
396 |
+
'ү' => 'Ү',
|
397 |
+
'ұ' => 'Ұ',
|
398 |
+
'ҳ' => 'Ҳ',
|
399 |
+
'ҵ' => 'Ҵ',
|
400 |
+
'ҷ' => 'Ҷ',
|
401 |
+
'ҹ' => 'Ҹ',
|
402 |
+
'һ' => 'Һ',
|
403 |
+
'ҽ' => 'Ҽ',
|
404 |
+
'ҿ' => 'Ҿ',
|
405 |
+
'ӂ' => 'Ӂ',
|
406 |
+
'ӄ' => 'Ӄ',
|
407 |
+
'ӆ' => 'Ӆ',
|
408 |
+
'ӈ' => 'Ӈ',
|
409 |
+
'ӊ' => 'Ӊ',
|
410 |
+
'ӌ' => 'Ӌ',
|
411 |
+
'ӎ' => 'Ӎ',
|
412 |
+
'ӏ' => 'Ӏ',
|
413 |
+
'ӑ' => 'Ӑ',
|
414 |
+
'ӓ' => 'Ӓ',
|
415 |
+
'ӕ' => 'Ӕ',
|
416 |
+
'ӗ' => 'Ӗ',
|
417 |
+
'ә' => 'Ә',
|
418 |
+
'ӛ' => 'Ӛ',
|
419 |
+
'ӝ' => 'Ӝ',
|
420 |
+
'ӟ' => 'Ӟ',
|
421 |
+
'ӡ' => 'Ӡ',
|
422 |
+
'ӣ' => 'Ӣ',
|
423 |
+
'ӥ' => 'Ӥ',
|
424 |
+
'ӧ' => 'Ӧ',
|
425 |
+
'ө' => 'Ө',
|
426 |
+
'ӫ' => 'Ӫ',
|
427 |
+
'ӭ' => 'Ӭ',
|
428 |
+
'ӯ' => 'Ӯ',
|
429 |
+
'ӱ' => 'Ӱ',
|
430 |
+
'ӳ' => 'Ӳ',
|
431 |
+
'ӵ' => 'Ӵ',
|
432 |
+
'ӷ' => 'Ӷ',
|
433 |
+
'ӹ' => 'Ӹ',
|
434 |
+
'ӻ' => 'Ӻ',
|
435 |
+
'ӽ' => 'Ӽ',
|
436 |
+
'ӿ' => 'Ӿ',
|
437 |
+
'ԁ' => 'Ԁ',
|
438 |
+
'ԃ' => 'Ԃ',
|
439 |
+
'ԅ' => 'Ԅ',
|
440 |
+
'ԇ' => 'Ԇ',
|
441 |
+
'ԉ' => 'Ԉ',
|
442 |
+
'ԋ' => 'Ԋ',
|
443 |
+
'ԍ' => 'Ԍ',
|
444 |
+
'ԏ' => 'Ԏ',
|
445 |
+
'ԑ' => 'Ԑ',
|
446 |
+
'ԓ' => 'Ԓ',
|
447 |
+
'ԕ' => 'Ԕ',
|
448 |
+
'ԗ' => 'Ԗ',
|
449 |
+
'ԙ' => 'Ԙ',
|
450 |
+
'ԛ' => 'Ԛ',
|
451 |
+
'ԝ' => 'Ԝ',
|
452 |
+
'ԟ' => 'Ԟ',
|
453 |
+
'ԡ' => 'Ԡ',
|
454 |
+
'ԣ' => 'Ԣ',
|
455 |
+
'ԥ' => 'Ԥ',
|
456 |
+
'ԧ' => 'Ԧ',
|
457 |
+
'ԩ' => 'Ԩ',
|
458 |
+
'ԫ' => 'Ԫ',
|
459 |
+
'ԭ' => 'Ԭ',
|
460 |
+
'ԯ' => 'Ԯ',
|
461 |
+
'ա' => 'Ա',
|
462 |
+
'բ' => 'Բ',
|
463 |
+
'գ' => 'Գ',
|
464 |
+
'դ' => 'Դ',
|
465 |
+
'ե' => 'Ե',
|
466 |
+
'զ' => 'Զ',
|
467 |
+
'է' => 'Է',
|
468 |
+
'ը' => 'Ը',
|
469 |
+
'թ' => 'Թ',
|
470 |
+
'ժ' => 'Ժ',
|
471 |
+
'ի' => 'Ի',
|
472 |
+
'լ' => 'Լ',
|
473 |
+
'խ' => 'Խ',
|
474 |
+
'ծ' => 'Ծ',
|
475 |
+
'կ' => 'Կ',
|
476 |
+
'հ' => 'Հ',
|
477 |
+
'ձ' => 'Ձ',
|
478 |
+
'ղ' => 'Ղ',
|
479 |
+
'ճ' => 'Ճ',
|
480 |
+
'մ' => 'Մ',
|
481 |
+
'յ' => 'Յ',
|
482 |
+
'ն' => 'Ն',
|
483 |
+
'շ' => 'Շ',
|
484 |
+
'ո' => 'Ո',
|
485 |
+
'չ' => 'Չ',
|
486 |
+
'պ' => 'Պ',
|
487 |
+
'ջ' => 'Ջ',
|
488 |
+
'ռ' => 'Ռ',
|
489 |
+
'ս' => 'Ս',
|
490 |
+
'վ' => 'Վ',
|
491 |
+
'տ' => 'Տ',
|
492 |
+
'ր' => 'Ր',
|
493 |
+
'ց' => 'Ց',
|
494 |
+
'ւ' => 'Ւ',
|
495 |
+
'փ' => 'Փ',
|
496 |
+
'ք' => 'Ք',
|
497 |
+
'օ' => 'Օ',
|
498 |
+
'ֆ' => 'Ֆ',
|
499 |
+
'ა' => 'Ა',
|
500 |
+
'ბ' => 'Ბ',
|
501 |
+
'გ' => 'Გ',
|
502 |
+
'დ' => 'Დ',
|
503 |
+
'ე' => 'Ე',
|
504 |
+
'ვ' => 'Ვ',
|
505 |
+
'ზ' => 'Ზ',
|
506 |
+
'თ' => 'Თ',
|
507 |
+
'ი' => 'Ი',
|
508 |
+
'კ' => 'Კ',
|
509 |
+
'ლ' => 'Ლ',
|
510 |
+
'მ' => 'Მ',
|
511 |
+
'ნ' => 'Ნ',
|
512 |
+
'ო' => 'Ო',
|
513 |
+
'პ' => 'Პ',
|
514 |
+
'ჟ' => 'Ჟ',
|
515 |
+
'რ' => 'Რ',
|
516 |
+
'ს' => 'Ს',
|
517 |
+
'ტ' => 'Ტ',
|
518 |
+
'უ' => 'Უ',
|
519 |
+
'ფ' => 'Ფ',
|
520 |
+
'ქ' => 'Ქ',
|
521 |
+
'ღ' => 'Ღ',
|
522 |
+
'ყ' => 'Ყ',
|
523 |
+
'შ' => 'Შ',
|
524 |
+
'ჩ' => 'Ჩ',
|
525 |
+
'ც' => 'Ც',
|
526 |
+
'ძ' => 'Ძ',
|
527 |
+
'წ' => 'Წ',
|
528 |
+
'ჭ' => 'Ჭ',
|
529 |
+
'ხ' => 'Ხ',
|
530 |
+
'ჯ' => 'Ჯ',
|
531 |
+
'ჰ' => 'Ჰ',
|
532 |
+
'ჱ' => 'Ჱ',
|
533 |
+
'ჲ' => 'Ჲ',
|
534 |
+
'ჳ' => 'Ჳ',
|
535 |
+
'ჴ' => 'Ჴ',
|
536 |
+
'ჵ' => 'Ჵ',
|
537 |
+
'ჶ' => 'Ჶ',
|
538 |
+
'ჷ' => 'Ჷ',
|
539 |
+
'ჸ' => 'Ჸ',
|
540 |
+
'ჹ' => 'Ჹ',
|
541 |
+
'ჺ' => 'Ჺ',
|
542 |
+
'ჽ' => 'Ჽ',
|
543 |
+
'ჾ' => 'Ჾ',
|
544 |
+
'ჿ' => 'Ჿ',
|
545 |
+
'ᏸ' => 'Ᏸ',
|
546 |
+
'ᏹ' => 'Ᏹ',
|
547 |
+
'ᏺ' => 'Ᏺ',
|
548 |
+
'ᏻ' => 'Ᏻ',
|
549 |
+
'ᏼ' => 'Ᏼ',
|
550 |
+
'ᏽ' => 'Ᏽ',
|
551 |
+
'ᲀ' => 'В',
|
552 |
+
'ᲁ' => 'Д',
|
553 |
+
'ᲂ' => 'О',
|
554 |
+
'ᲃ' => 'С',
|
555 |
+
'ᲄ' => 'Т',
|
556 |
+
'ᲅ' => 'Т',
|
557 |
+
'ᲆ' => 'Ъ',
|
558 |
+
'ᲇ' => 'Ѣ',
|
559 |
+
'ᲈ' => 'Ꙋ',
|
560 |
+
'ᵹ' => 'Ᵹ',
|
561 |
+
'ᵽ' => 'Ᵽ',
|
562 |
+
'ᶎ' => 'Ᶎ',
|
563 |
+
'ḁ' => 'Ḁ',
|
564 |
+
'ḃ' => 'Ḃ',
|
565 |
+
'ḅ' => 'Ḅ',
|
566 |
+
'ḇ' => 'Ḇ',
|
567 |
+
'ḉ' => 'Ḉ',
|
568 |
+
'ḋ' => 'Ḋ',
|
569 |
+
'ḍ' => 'Ḍ',
|
570 |
+
'ḏ' => 'Ḏ',
|
571 |
+
'ḑ' => 'Ḑ',
|
572 |
+
'ḓ' => 'Ḓ',
|
573 |
+
'ḕ' => 'Ḕ',
|
574 |
+
'ḗ' => 'Ḗ',
|
575 |
+
'ḙ' => 'Ḙ',
|
576 |
+
'ḛ' => 'Ḛ',
|
577 |
+
'ḝ' => 'Ḝ',
|
578 |
+
'ḟ' => 'Ḟ',
|
579 |
+
'ḡ' => 'Ḡ',
|
580 |
+
'ḣ' => 'Ḣ',
|
581 |
+
'ḥ' => 'Ḥ',
|
582 |
+
'ḧ' => 'Ḧ',
|
583 |
+
'ḩ' => 'Ḩ',
|
584 |
+
'ḫ' => 'Ḫ',
|
585 |
+
'ḭ' => 'Ḭ',
|
586 |
+
'ḯ' => 'Ḯ',
|
587 |
+
'ḱ' => 'Ḱ',
|
588 |
+
'ḳ' => 'Ḳ',
|
589 |
+
'ḵ' => 'Ḵ',
|
590 |
+
'ḷ' => 'Ḷ',
|
591 |
+
'ḹ' => 'Ḹ',
|
592 |
+
'ḻ' => 'Ḻ',
|
593 |
+
'ḽ' => 'Ḽ',
|
594 |
+
'ḿ' => 'Ḿ',
|
595 |
+
'ṁ' => 'Ṁ',
|
596 |
+
'ṃ' => 'Ṃ',
|
597 |
+
'ṅ' => 'Ṅ',
|
598 |
+
'ṇ' => 'Ṇ',
|
599 |
+
'ṉ' => 'Ṉ',
|
600 |
+
'ṋ' => 'Ṋ',
|
601 |
+
'ṍ' => 'Ṍ',
|
602 |
+
'ṏ' => 'Ṏ',
|
603 |
+
'ṑ' => 'Ṑ',
|
604 |
+
'ṓ' => 'Ṓ',
|
605 |
+
'ṕ' => 'Ṕ',
|
606 |
+
'ṗ' => 'Ṗ',
|
607 |
+
'ṙ' => 'Ṙ',
|
608 |
+
'ṛ' => 'Ṛ',
|
609 |
+
'ṝ' => 'Ṝ',
|
610 |
+
'ṟ' => 'Ṟ',
|
611 |
+
'ṡ' => 'Ṡ',
|
612 |
+
'ṣ' => 'Ṣ',
|
613 |
+
'ṥ' => 'Ṥ',
|
614 |
+
'ṧ' => 'Ṧ',
|
615 |
+
'ṩ' => 'Ṩ',
|
616 |
+
'ṫ' => 'Ṫ',
|
617 |
+
'ṭ' => 'Ṭ',
|
618 |
+
'ṯ' => 'Ṯ',
|
619 |
+
'ṱ' => 'Ṱ',
|
620 |
+
'ṳ' => 'Ṳ',
|
621 |
+
'ṵ' => 'Ṵ',
|
622 |
+
'ṷ' => 'Ṷ',
|
623 |
+
'ṹ' => 'Ṹ',
|
624 |
+
'ṻ' => 'Ṻ',
|
625 |
+
'ṽ' => 'Ṽ',
|
626 |
+
'ṿ' => 'Ṿ',
|
627 |
+
'ẁ' => 'Ẁ',
|
628 |
+
'ẃ' => 'Ẃ',
|
629 |
+
'ẅ' => 'Ẅ',
|
630 |
+
'ẇ' => 'Ẇ',
|
631 |
+
'ẉ' => 'Ẉ',
|
632 |
+
'ẋ' => 'Ẋ',
|
633 |
+
'ẍ' => 'Ẍ',
|
634 |
+
'ẏ' => 'Ẏ',
|
635 |
+
'ẑ' => 'Ẑ',
|
636 |
+
'ẓ' => 'Ẓ',
|
637 |
+
'ẕ' => 'Ẕ',
|
638 |
+
'ẛ' => 'Ṡ',
|
639 |
+
'ạ' => 'Ạ',
|
640 |
+
'ả' => 'Ả',
|
641 |
+
'ấ' => 'Ấ',
|
642 |
+
'ầ' => 'Ầ',
|
643 |
+
'ẩ' => 'Ẩ',
|
644 |
+
'ẫ' => 'Ẫ',
|
645 |
+
'ậ' => 'Ậ',
|
646 |
+
'ắ' => 'Ắ',
|
647 |
+
'ằ' => 'Ằ',
|
648 |
+
'ẳ' => 'Ẳ',
|
649 |
+
'ẵ' => 'Ẵ',
|
650 |
+
'ặ' => 'Ặ',
|
651 |
+
'ẹ' => 'Ẹ',
|
652 |
+
'ẻ' => 'Ẻ',
|
653 |
+
'ẽ' => 'Ẽ',
|
654 |
+
'ế' => 'Ế',
|
655 |
+
'ề' => 'Ề',
|
656 |
+
'ể' => 'Ể',
|
657 |
+
'ễ' => 'Ễ',
|
658 |
+
'ệ' => 'Ệ',
|
659 |
+
'ỉ' => 'Ỉ',
|
660 |
+
'ị' => 'Ị',
|
661 |
+
'ọ' => 'Ọ',
|
662 |
+
'ỏ' => 'Ỏ',
|
663 |
+
'ố' => 'Ố',
|
664 |
+
'ồ' => 'Ồ',
|
665 |
+
'ổ' => 'Ổ',
|
666 |
+
'ỗ' => 'Ỗ',
|
667 |
+
'ộ' => 'Ộ',
|
668 |
+
'ớ' => 'Ớ',
|
669 |
+
'ờ' => 'Ờ',
|
670 |
+
'ở' => 'Ở',
|
671 |
+
'ỡ' => 'Ỡ',
|
672 |
+
'ợ' => 'Ợ',
|
673 |
+
'ụ' => 'Ụ',
|
674 |
+
'ủ' => 'Ủ',
|
675 |
+
'ứ' => 'Ứ',
|
676 |
+
'ừ' => 'Ừ',
|
677 |
+
'ử' => 'Ử',
|
678 |
+
'ữ' => 'Ữ',
|
679 |
+
'ự' => 'Ự',
|
680 |
+
'ỳ' => 'Ỳ',
|
681 |
+
'ỵ' => 'Ỵ',
|
682 |
+
'ỷ' => 'Ỷ',
|
683 |
+
'ỹ' => 'Ỹ',
|
684 |
+
'ỻ' => 'Ỻ',
|
685 |
+
'ỽ' => 'Ỽ',
|
686 |
+
'ỿ' => 'Ỿ',
|
687 |
+
'ἀ' => 'Ἀ',
|
688 |
+
'ἁ' => 'Ἁ',
|
689 |
+
'ἂ' => 'Ἂ',
|
690 |
+
'ἃ' => 'Ἃ',
|
691 |
+
'ἄ' => 'Ἄ',
|
692 |
+
'ἅ' => 'Ἅ',
|
693 |
+
'ἆ' => 'Ἆ',
|
694 |
+
'ἇ' => 'Ἇ',
|
695 |
+
'ἐ' => 'Ἐ',
|
696 |
+
'ἑ' => 'Ἑ',
|
697 |
+
'ἒ' => 'Ἒ',
|
698 |
+
'ἓ' => 'Ἓ',
|
699 |
+
'ἔ' => 'Ἔ',
|
700 |
+
'ἕ' => 'Ἕ',
|
701 |
+
'ἠ' => 'Ἠ',
|
702 |
+
'ἡ' => 'Ἡ',
|
703 |
+
'ἢ' => 'Ἢ',
|
704 |
+
'ἣ' => 'Ἣ',
|
705 |
+
'ἤ' => 'Ἤ',
|
706 |
+
'ἥ' => 'Ἥ',
|
707 |
+
'ἦ' => 'Ἦ',
|
708 |
+
'ἧ' => 'Ἧ',
|
709 |
+
'ἰ' => 'Ἰ',
|
710 |
+
'ἱ' => 'Ἱ',
|
711 |
+
'ἲ' => 'Ἲ',
|
712 |
+
'ἳ' => 'Ἳ',
|
713 |
+
'ἴ' => 'Ἴ',
|
714 |
+
'ἵ' => 'Ἵ',
|
715 |
+
'ἶ' => 'Ἶ',
|
716 |
+
'ἷ' => 'Ἷ',
|
717 |
+
'ὀ' => 'Ὀ',
|
718 |
+
'ὁ' => 'Ὁ',
|
719 |
+
'ὂ' => 'Ὂ',
|
720 |
+
'ὃ' => 'Ὃ',
|
721 |
+
'ὄ' => 'Ὄ',
|
722 |
+
'ὅ' => 'Ὅ',
|
723 |
+
'ὑ' => 'Ὑ',
|
724 |
+
'ὓ' => 'Ὓ',
|
725 |
+
'ὕ' => 'Ὕ',
|
726 |
+
'ὗ' => 'Ὗ',
|
727 |
+
'ὠ' => 'Ὠ',
|
728 |
+
'ὡ' => 'Ὡ',
|
729 |
+
'ὢ' => 'Ὢ',
|
730 |
+
'ὣ' => 'Ὣ',
|
731 |
+
'ὤ' => 'Ὤ',
|
732 |
+
'ὥ' => 'Ὥ',
|
733 |
+
'ὦ' => 'Ὦ',
|
734 |
+
'ὧ' => 'Ὧ',
|
735 |
+
'ὰ' => 'Ὰ',
|
736 |
+
'ά' => 'Ά',
|
737 |
+
'ὲ' => 'Ὲ',
|
738 |
+
'έ' => 'Έ',
|
739 |
+
'ὴ' => 'Ὴ',
|
740 |
+
'ή' => 'Ή',
|
741 |
+
'ὶ' => 'Ὶ',
|
742 |
+
'ί' => 'Ί',
|
743 |
+
'ὸ' => 'Ὸ',
|
744 |
+
'ό' => 'Ό',
|
745 |
+
'ὺ' => 'Ὺ',
|
746 |
+
'ύ' => 'Ύ',
|
747 |
+
'ὼ' => 'Ὼ',
|
748 |
+
'ώ' => 'Ώ',
|
749 |
+
'ᾀ' => 'ᾈ',
|
750 |
+
'ᾁ' => 'ᾉ',
|
751 |
+
'ᾂ' => 'ᾊ',
|
752 |
+
'ᾃ' => 'ᾋ',
|
753 |
+
'ᾄ' => 'ᾌ',
|
754 |
+
'ᾅ' => 'ᾍ',
|
755 |
+
'ᾆ' => 'ᾎ',
|
756 |
+
'ᾇ' => 'ᾏ',
|
757 |
+
'ᾐ' => 'ᾘ',
|
758 |
+
'ᾑ' => 'ᾙ',
|
759 |
+
'ᾒ' => 'ᾚ',
|
760 |
+
'ᾓ' => 'ᾛ',
|
761 |
+
'ᾔ' => 'ᾜ',
|
762 |
+
'ᾕ' => 'ᾝ',
|
763 |
+
'ᾖ' => 'ᾞ',
|
764 |
+
'ᾗ' => 'ᾟ',
|
765 |
+
'ᾠ' => 'ᾨ',
|
766 |
+
'ᾡ' => 'ᾩ',
|
767 |
+
'ᾢ' => 'ᾪ',
|
768 |
+
'ᾣ' => 'ᾫ',
|
769 |
+
'ᾤ' => 'ᾬ',
|
770 |
+
'ᾥ' => 'ᾭ',
|
771 |
+
'ᾦ' => 'ᾮ',
|
772 |
+
'ᾧ' => 'ᾯ',
|
773 |
+
'ᾰ' => 'Ᾰ',
|
774 |
+
'ᾱ' => 'Ᾱ',
|
775 |
+
'ᾳ' => 'ᾼ',
|
776 |
+
'ι' => 'Ι',
|
777 |
+
'ῃ' => 'ῌ',
|
778 |
+
'ῐ' => 'Ῐ',
|
779 |
+
'ῑ' => 'Ῑ',
|
780 |
+
'ῠ' => 'Ῠ',
|
781 |
+
'ῡ' => 'Ῡ',
|
782 |
+
'ῥ' => 'Ῥ',
|
783 |
+
'ῳ' => 'ῼ',
|
784 |
+
'ⅎ' => 'Ⅎ',
|
785 |
+
'ⅰ' => 'Ⅰ',
|
786 |
+
'ⅱ' => 'Ⅱ',
|
787 |
+
'ⅲ' => 'Ⅲ',
|
788 |
+
'ⅳ' => 'Ⅳ',
|
789 |
+
'ⅴ' => 'Ⅴ',
|
790 |
+
'ⅵ' => 'Ⅵ',
|
791 |
+
'ⅶ' => 'Ⅶ',
|
792 |
+
'ⅷ' => 'Ⅷ',
|
793 |
+
'ⅸ' => 'Ⅸ',
|
794 |
+
'ⅹ' => 'Ⅹ',
|
795 |
+
'ⅺ' => 'Ⅺ',
|
796 |
+
'ⅻ' => 'Ⅻ',
|
797 |
+
'ⅼ' => 'Ⅼ',
|
798 |
+
'ⅽ' => 'Ⅽ',
|
799 |
+
'ⅾ' => 'Ⅾ',
|
800 |
+
'ⅿ' => 'Ⅿ',
|
801 |
+
'ↄ' => 'Ↄ',
|
802 |
+
'ⓐ' => 'Ⓐ',
|
803 |
+
'ⓑ' => 'Ⓑ',
|
804 |
+
'ⓒ' => 'Ⓒ',
|
805 |
+
'ⓓ' => 'Ⓓ',
|
806 |
+
'ⓔ' => 'Ⓔ',
|
807 |
+
'ⓕ' => 'Ⓕ',
|
808 |
+
'ⓖ' => 'Ⓖ',
|
809 |
+
'ⓗ' => 'Ⓗ',
|
810 |
+
'ⓘ' => 'Ⓘ',
|
811 |
+
'ⓙ' => 'Ⓙ',
|
812 |
+
'ⓚ' => 'Ⓚ',
|
813 |
+
'ⓛ' => 'Ⓛ',
|
814 |
+
'ⓜ' => 'Ⓜ',
|
815 |
+
'ⓝ' => 'Ⓝ',
|
816 |
+
'ⓞ' => 'Ⓞ',
|
817 |
+
'ⓟ' => 'Ⓟ',
|
818 |
+
'ⓠ' => 'Ⓠ',
|
819 |
+
'ⓡ' => 'Ⓡ',
|
820 |
+
'ⓢ' => 'Ⓢ',
|
821 |
+
'ⓣ' => 'Ⓣ',
|
822 |
+
'ⓤ' => 'Ⓤ',
|
823 |
+
'ⓥ' => 'Ⓥ',
|
824 |
+
'ⓦ' => 'Ⓦ',
|
825 |
+
'ⓧ' => 'Ⓧ',
|
826 |
+
'ⓨ' => 'Ⓨ',
|
827 |
+
'ⓩ' => 'Ⓩ',
|
828 |
+
'ⰰ' => 'Ⰰ',
|
829 |
+
'ⰱ' => 'Ⰱ',
|
830 |
+
'ⰲ' => 'Ⰲ',
|
831 |
+
'ⰳ' => 'Ⰳ',
|
832 |
+
'ⰴ' => 'Ⰴ',
|
833 |
+
'ⰵ' => 'Ⰵ',
|
834 |
+
'ⰶ' => 'Ⰶ',
|
835 |
+
'ⰷ' => 'Ⰷ',
|
836 |
+
'ⰸ' => 'Ⰸ',
|
837 |
+
'ⰹ' => 'Ⰹ',
|
838 |
+
'ⰺ' => 'Ⰺ',
|
839 |
+
'ⰻ' => 'Ⰻ',
|
840 |
+
'ⰼ' => 'Ⰼ',
|
841 |
+
'ⰽ' => 'Ⰽ',
|
842 |
+
'ⰾ' => 'Ⰾ',
|
843 |
+
'ⰿ' => 'Ⰿ',
|
844 |
+
'ⱀ' => 'Ⱀ',
|
845 |
+
'ⱁ' => 'Ⱁ',
|
846 |
+
'ⱂ' => 'Ⱂ',
|
847 |
+
'ⱃ' => 'Ⱃ',
|
848 |
+
'ⱄ' => 'Ⱄ',
|
849 |
+
'ⱅ' => 'Ⱅ',
|
850 |
+
'ⱆ' => 'Ⱆ',
|
851 |
+
'ⱇ' => 'Ⱇ',
|
852 |
+
'ⱈ' => 'Ⱈ',
|
853 |
+
'ⱉ' => 'Ⱉ',
|
854 |
+
'ⱊ' => 'Ⱊ',
|
855 |
+
'ⱋ' => 'Ⱋ',
|
856 |
+
'ⱌ' => 'Ⱌ',
|
857 |
+
'ⱍ' => 'Ⱍ',
|
858 |
+
'ⱎ' => 'Ⱎ',
|
859 |
+
'ⱏ' => 'Ⱏ',
|
860 |
+
'ⱐ' => 'Ⱐ',
|
861 |
+
'ⱑ' => 'Ⱑ',
|
862 |
+
'ⱒ' => 'Ⱒ',
|
863 |
+
'ⱓ' => 'Ⱓ',
|
864 |
+
'ⱔ' => 'Ⱔ',
|
865 |
+
'ⱕ' => 'Ⱕ',
|
866 |
+
'ⱖ' => 'Ⱖ',
|
867 |
+
'ⱗ' => 'Ⱗ',
|
868 |
+
'ⱘ' => 'Ⱘ',
|
869 |
+
'ⱙ' => 'Ⱙ',
|
870 |
+
'ⱚ' => 'Ⱚ',
|
871 |
+
'ⱛ' => 'Ⱛ',
|
872 |
+
'ⱜ' => 'Ⱜ',
|
873 |
+
'ⱝ' => 'Ⱝ',
|
874 |
+
'ⱞ' => 'Ⱞ',
|
875 |
+
'ⱡ' => 'Ⱡ',
|
876 |
+
'ⱥ' => 'Ⱥ',
|
877 |
+
'ⱦ' => 'Ⱦ',
|
878 |
+
'ⱨ' => 'Ⱨ',
|
879 |
+
'ⱪ' => 'Ⱪ',
|
880 |
+
'ⱬ' => 'Ⱬ',
|
881 |
+
'ⱳ' => 'Ⱳ',
|
882 |
+
'ⱶ' => 'Ⱶ',
|
883 |
+
'ⲁ' => 'Ⲁ',
|
884 |
+
'ⲃ' => 'Ⲃ',
|
885 |
+
'ⲅ' => 'Ⲅ',
|
886 |
+
'ⲇ' => 'Ⲇ',
|
887 |
+
'ⲉ' => 'Ⲉ',
|
888 |
+
'ⲋ' => 'Ⲋ',
|
889 |
+
'ⲍ' => 'Ⲍ',
|
890 |
+
'ⲏ' => 'Ⲏ',
|
891 |
+
'ⲑ' => 'Ⲑ',
|
892 |
+
'ⲓ' => 'Ⲓ',
|
893 |
+
'ⲕ' => 'Ⲕ',
|
894 |
+
'ⲗ' => 'Ⲗ',
|
895 |
+
'ⲙ' => 'Ⲙ',
|
896 |
+
'ⲛ' => 'Ⲛ',
|
897 |
+
'ⲝ' => 'Ⲝ',
|
898 |
+
'ⲟ' => 'Ⲟ',
|
899 |
+
'ⲡ' => 'Ⲡ',
|
900 |
+
'ⲣ' => 'Ⲣ',
|
901 |
+
'ⲥ' => 'Ⲥ',
|
902 |
+
'ⲧ' => 'Ⲧ',
|
903 |
+
'ⲩ' => 'Ⲩ',
|
904 |
+
'ⲫ' => 'Ⲫ',
|
905 |
+
'ⲭ' => 'Ⲭ',
|
906 |
+
'ⲯ' => 'Ⲯ',
|
907 |
+
'ⲱ' => 'Ⲱ',
|
908 |
+
'ⲳ' => 'Ⲳ',
|
909 |
+
'ⲵ' => 'Ⲵ',
|
910 |
+
'ⲷ' => 'Ⲷ',
|
911 |
+
'ⲹ' => 'Ⲹ',
|
912 |
+
'ⲻ' => 'Ⲻ',
|
913 |
+
'ⲽ' => 'Ⲽ',
|
914 |
+
'ⲿ' => 'Ⲿ',
|
915 |
+
'ⳁ' => 'Ⳁ',
|
916 |
+
'ⳃ' => 'Ⳃ',
|
917 |
+
'ⳅ' => 'Ⳅ',
|
918 |
+
'ⳇ' => 'Ⳇ',
|
919 |
+
'ⳉ' => 'Ⳉ',
|
920 |
+
'ⳋ' => 'Ⳋ',
|
921 |
+
'ⳍ' => 'Ⳍ',
|
922 |
+
'ⳏ' => 'Ⳏ',
|
923 |
+
'ⳑ' => 'Ⳑ',
|
924 |
+
'ⳓ' => 'Ⳓ',
|
925 |
+
'ⳕ' => 'Ⳕ',
|
926 |
+
'ⳗ' => 'Ⳗ',
|
927 |
+
'ⳙ' => 'Ⳙ',
|
928 |
+
'ⳛ' => 'Ⳛ',
|
929 |
+
'ⳝ' => 'Ⳝ',
|
930 |
+
'ⳟ' => 'Ⳟ',
|
931 |
+
'ⳡ' => 'Ⳡ',
|
932 |
+
'ⳣ' => 'Ⳣ',
|
933 |
+
'ⳬ' => 'Ⳬ',
|
934 |
+
'ⳮ' => 'Ⳮ',
|
935 |
+
'ⳳ' => 'Ⳳ',
|
936 |
+
'ⴀ' => 'Ⴀ',
|
937 |
+
'ⴁ' => 'Ⴁ',
|
938 |
+
'ⴂ' => 'Ⴂ',
|
939 |
+
'ⴃ' => 'Ⴃ',
|
940 |
+
'ⴄ' => 'Ⴄ',
|
941 |
+
'ⴅ' => 'Ⴅ',
|
942 |
+
'ⴆ' => 'Ⴆ',
|
943 |
+
'ⴇ' => 'Ⴇ',
|
944 |
+
'ⴈ' => 'Ⴈ',
|
945 |
+
'ⴉ' => 'Ⴉ',
|
946 |
+
'ⴊ' => 'Ⴊ',
|
947 |
+
'ⴋ' => 'Ⴋ',
|
948 |
+
'ⴌ' => 'Ⴌ',
|
949 |
+
'ⴍ' => 'Ⴍ',
|
950 |
+
'ⴎ' => 'Ⴎ',
|
951 |
+
'ⴏ' => 'Ⴏ',
|
952 |
+
'ⴐ' => 'Ⴐ',
|
953 |
+
'ⴑ' => 'Ⴑ',
|
954 |
+
'ⴒ' => 'Ⴒ',
|
955 |
+
'ⴓ' => 'Ⴓ',
|
956 |
+
'ⴔ' => 'Ⴔ',
|
957 |
+
'ⴕ' => 'Ⴕ',
|
958 |
+
'ⴖ' => 'Ⴖ',
|
959 |
+
'ⴗ' => 'Ⴗ',
|
960 |
+
'ⴘ' => 'Ⴘ',
|
961 |
+
'ⴙ' => 'Ⴙ',
|
962 |
+
'ⴚ' => 'Ⴚ',
|
963 |
+
'ⴛ' => 'Ⴛ',
|
964 |
+
'ⴜ' => 'Ⴜ',
|
965 |
+
'ⴝ' => 'Ⴝ',
|
966 |
+
'ⴞ' => 'Ⴞ',
|
967 |
+
'ⴟ' => 'Ⴟ',
|
968 |
+
'ⴠ' => 'Ⴠ',
|
969 |
+
'ⴡ' => 'Ⴡ',
|
970 |
+
'ⴢ' => 'Ⴢ',
|
971 |
+
'ⴣ' => 'Ⴣ',
|
972 |
+
'ⴤ' => 'Ⴤ',
|
973 |
+
'ⴥ' => 'Ⴥ',
|
974 |
+
'ⴧ' => 'Ⴧ',
|
975 |
+
'ⴭ' => 'Ⴭ',
|
976 |
+
'ꙁ' => 'Ꙁ',
|
977 |
+
'ꙃ' => 'Ꙃ',
|
978 |
+
'ꙅ' => 'Ꙅ',
|
979 |
+
'ꙇ' => 'Ꙇ',
|
980 |
+
'ꙉ' => 'Ꙉ',
|
981 |
+
'ꙋ' => 'Ꙋ',
|
982 |
+
'ꙍ' => 'Ꙍ',
|
983 |
+
'ꙏ' => 'Ꙏ',
|
984 |
+
'ꙑ' => 'Ꙑ',
|
985 |
+
'ꙓ' => 'Ꙓ',
|
986 |
+
'ꙕ' => 'Ꙕ',
|
987 |
+
'ꙗ' => 'Ꙗ',
|
988 |
+
'ꙙ' => 'Ꙙ',
|
989 |
+
'ꙛ' => 'Ꙛ',
|
990 |
+
'ꙝ' => 'Ꙝ',
|
991 |
+
'ꙟ' => 'Ꙟ',
|
992 |
+
'ꙡ' => 'Ꙡ',
|
993 |
+
'ꙣ' => 'Ꙣ',
|
994 |
+
'ꙥ' => 'Ꙥ',
|
995 |
+
'ꙧ' => 'Ꙧ',
|
996 |
+
'ꙩ' => 'Ꙩ',
|
997 |
+
'ꙫ' => 'Ꙫ',
|
998 |
+
'ꙭ' => 'Ꙭ',
|
999 |
+
'ꚁ' => 'Ꚁ',
|
1000 |
+
'ꚃ' => 'Ꚃ',
|
1001 |
+
'ꚅ' => 'Ꚅ',
|
1002 |
+
'ꚇ' => 'Ꚇ',
|
1003 |
+
'ꚉ' => 'Ꚉ',
|
1004 |
+
'ꚋ' => 'Ꚋ',
|
1005 |
+
'ꚍ' => 'Ꚍ',
|
1006 |
+
'ꚏ' => 'Ꚏ',
|
1007 |
+
'ꚑ' => 'Ꚑ',
|
1008 |
+
'ꚓ' => 'Ꚓ',
|
1009 |
+
'ꚕ' => 'Ꚕ',
|
1010 |
+
'ꚗ' => 'Ꚗ',
|
1011 |
+
'ꚙ' => 'Ꚙ',
|
1012 |
+
'ꚛ' => 'Ꚛ',
|
1013 |
+
'ꜣ' => 'Ꜣ',
|
1014 |
+
'ꜥ' => 'Ꜥ',
|
1015 |
+
'ꜧ' => 'Ꜧ',
|
1016 |
+
'ꜩ' => 'Ꜩ',
|
1017 |
+
'ꜫ' => 'Ꜫ',
|
1018 |
+
'ꜭ' => 'Ꜭ',
|
1019 |
+
'ꜯ' => 'Ꜯ',
|
1020 |
+
'ꜳ' => 'Ꜳ',
|
1021 |
+
'ꜵ' => 'Ꜵ',
|
1022 |
+
'ꜷ' => 'Ꜷ',
|
1023 |
+
'ꜹ' => 'Ꜹ',
|
1024 |
+
'ꜻ' => 'Ꜻ',
|
1025 |
+
'ꜽ' => 'Ꜽ',
|
1026 |
+
'ꜿ' => 'Ꜿ',
|
1027 |
+
'ꝁ' => 'Ꝁ',
|
1028 |
+
'ꝃ' => 'Ꝃ',
|
1029 |
+
'ꝅ' => 'Ꝅ',
|
1030 |
+
'ꝇ' => 'Ꝇ',
|
1031 |
+
'ꝉ' => 'Ꝉ',
|
1032 |
+
'ꝋ' => 'Ꝋ',
|
1033 |
+
'ꝍ' => 'Ꝍ',
|
1034 |
+
'ꝏ' => 'Ꝏ',
|
1035 |
+
'ꝑ' => 'Ꝑ',
|
1036 |
+
'ꝓ' => 'Ꝓ',
|
1037 |
+
'ꝕ' => 'Ꝕ',
|
1038 |
+
'ꝗ' => 'Ꝗ',
|
1039 |
+
'ꝙ' => 'Ꝙ',
|
1040 |
+
'ꝛ' => 'Ꝛ',
|
1041 |
+
'ꝝ' => 'Ꝝ',
|
1042 |
+
'ꝟ' => 'Ꝟ',
|
1043 |
+
'ꝡ' => 'Ꝡ',
|
1044 |
+
'ꝣ' => 'Ꝣ',
|
1045 |
+
'ꝥ' => 'Ꝥ',
|
1046 |
+
'ꝧ' => 'Ꝧ',
|
1047 |
+
'ꝩ' => 'Ꝩ',
|
1048 |
+
'ꝫ' => 'Ꝫ',
|
1049 |
+
'ꝭ' => 'Ꝭ',
|
1050 |
+
'ꝯ' => 'Ꝯ',
|
1051 |
+
'ꝺ' => 'Ꝺ',
|
1052 |
+
'ꝼ' => 'Ꝼ',
|
1053 |
+
'ꝿ' => 'Ꝿ',
|
1054 |
+
'ꞁ' => 'Ꞁ',
|
1055 |
+
'ꞃ' => 'Ꞃ',
|
1056 |
+
'ꞅ' => 'Ꞅ',
|
1057 |
+
'ꞇ' => 'Ꞇ',
|
1058 |
+
'ꞌ' => 'Ꞌ',
|
1059 |
+
'ꞑ' => 'Ꞑ',
|
1060 |
+
'ꞓ' => 'Ꞓ',
|
1061 |
+
'ꞔ' => 'Ꞔ',
|
1062 |
+
'ꞗ' => 'Ꞗ',
|
1063 |
+
'ꞙ' => 'Ꞙ',
|
1064 |
+
'ꞛ' => 'Ꞛ',
|
1065 |
+
'ꞝ' => 'Ꞝ',
|
1066 |
+
'ꞟ' => 'Ꞟ',
|
1067 |
+
'ꞡ' => 'Ꞡ',
|
1068 |
+
'ꞣ' => 'Ꞣ',
|
1069 |
+
'ꞥ' => 'Ꞥ',
|
1070 |
+
'ꞧ' => 'Ꞧ',
|
1071 |
+
'ꞩ' => 'Ꞩ',
|
1072 |
+
'ꞵ' => 'Ꞵ',
|
1073 |
+
'ꞷ' => 'Ꞷ',
|
1074 |
+
'ꞹ' => 'Ꞹ',
|
1075 |
+
'ꞻ' => 'Ꞻ',
|
1076 |
+
'ꞽ' => 'Ꞽ',
|
1077 |
+
'ꞿ' => 'Ꞿ',
|
1078 |
+
'ꟃ' => 'Ꟃ',
|
1079 |
+
'ꟈ' => 'Ꟈ',
|
1080 |
+
'ꟊ' => 'Ꟊ',
|
1081 |
+
'ꟶ' => 'Ꟶ',
|
1082 |
+
'ꭓ' => 'Ꭓ',
|
1083 |
+
'ꭰ' => 'Ꭰ',
|
1084 |
+
'ꭱ' => 'Ꭱ',
|
1085 |
+
'ꭲ' => 'Ꭲ',
|
1086 |
+
'ꭳ' => 'Ꭳ',
|
1087 |
+
'ꭴ' => 'Ꭴ',
|
1088 |
+
'ꭵ' => 'Ꭵ',
|
1089 |
+
'ꭶ' => 'Ꭶ',
|
1090 |
+
'ꭷ' => 'Ꭷ',
|
1091 |
+
'ꭸ' => 'Ꭸ',
|
1092 |
+
'ꭹ' => 'Ꭹ',
|
1093 |
+
'ꭺ' => 'Ꭺ',
|
1094 |
+
'ꭻ' => 'Ꭻ',
|
1095 |
+
'ꭼ' => 'Ꭼ',
|
1096 |
+
'ꭽ' => 'Ꭽ',
|
1097 |
+
'ꭾ' => 'Ꭾ',
|
1098 |
+
'ꭿ' => 'Ꭿ',
|
1099 |
+
'ꮀ' => 'Ꮀ',
|
1100 |
+
'ꮁ' => 'Ꮁ',
|
1101 |
+
'ꮂ' => 'Ꮂ',
|
1102 |
+
'ꮃ' => 'Ꮃ',
|
1103 |
+
'ꮄ' => 'Ꮄ',
|
1104 |
+
'ꮅ' => 'Ꮅ',
|
1105 |
+
'ꮆ' => 'Ꮆ',
|
1106 |
+
'ꮇ' => 'Ꮇ',
|
1107 |
+
'ꮈ' => 'Ꮈ',
|
1108 |
+
'ꮉ' => 'Ꮉ',
|
1109 |
+
'ꮊ' => 'Ꮊ',
|
1110 |
+
'ꮋ' => 'Ꮋ',
|
1111 |
+
'ꮌ' => 'Ꮌ',
|
1112 |
+
'ꮍ' => 'Ꮍ',
|
1113 |
+
'ꮎ' => 'Ꮎ',
|
1114 |
+
'ꮏ' => 'Ꮏ',
|
1115 |
+
'ꮐ' => 'Ꮐ',
|
1116 |
+
'ꮑ' => 'Ꮑ',
|
1117 |
+
'ꮒ' => 'Ꮒ',
|
1118 |
+
'ꮓ' => 'Ꮓ',
|
1119 |
+
'ꮔ' => 'Ꮔ',
|
1120 |
+
'ꮕ' => 'Ꮕ',
|
1121 |
+
'ꮖ' => 'Ꮖ',
|
1122 |
+
'ꮗ' => 'Ꮗ',
|
1123 |
+
'ꮘ' => 'Ꮘ',
|
1124 |
+
'ꮙ' => 'Ꮙ',
|
1125 |
+
'ꮚ' => 'Ꮚ',
|
1126 |
+
'ꮛ' => 'Ꮛ',
|
1127 |
+
'ꮜ' => 'Ꮜ',
|
1128 |
+
'ꮝ' => 'Ꮝ',
|
1129 |
+
'ꮞ' => 'Ꮞ',
|
1130 |
+
'ꮟ' => 'Ꮟ',
|
1131 |
+
'ꮠ' => 'Ꮠ',
|
1132 |
+
'ꮡ' => 'Ꮡ',
|
1133 |
+
'ꮢ' => 'Ꮢ',
|
1134 |
+
'ꮣ' => 'Ꮣ',
|
1135 |
+
'ꮤ' => 'Ꮤ',
|
1136 |
+
'ꮥ' => 'Ꮥ',
|
1137 |
+
'ꮦ' => 'Ꮦ',
|
1138 |
+
'ꮧ' => 'Ꮧ',
|
1139 |
+
'ꮨ' => 'Ꮨ',
|
1140 |
+
'ꮩ' => 'Ꮩ',
|
1141 |
+
'ꮪ' => 'Ꮪ',
|
1142 |
+
'ꮫ' => 'Ꮫ',
|
1143 |
+
'ꮬ' => 'Ꮬ',
|
1144 |
+
'ꮭ' => 'Ꮭ',
|
1145 |
+
'ꮮ' => 'Ꮮ',
|
1146 |
+
'ꮯ' => 'Ꮯ',
|
1147 |
+
'ꮰ' => 'Ꮰ',
|
1148 |
+
'ꮱ' => 'Ꮱ',
|
1149 |
+
'ꮲ' => 'Ꮲ',
|
1150 |
+
'ꮳ' => 'Ꮳ',
|
1151 |
+
'ꮴ' => 'Ꮴ',
|
1152 |
+
'ꮵ' => 'Ꮵ',
|
1153 |
+
'ꮶ' => 'Ꮶ',
|
1154 |
+
'ꮷ' => 'Ꮷ',
|
1155 |
+
'ꮸ' => 'Ꮸ',
|
1156 |
+
'ꮹ' => 'Ꮹ',
|
1157 |
+
'ꮺ' => 'Ꮺ',
|
1158 |
+
'ꮻ' => 'Ꮻ',
|
1159 |
+
'ꮼ' => 'Ꮼ',
|
1160 |
+
'ꮽ' => 'Ꮽ',
|
1161 |
+
'ꮾ' => 'Ꮾ',
|
1162 |
+
'ꮿ' => 'Ꮿ',
|
1163 |
+
'a' => 'A',
|
1164 |
+
'b' => 'B',
|
1165 |
+
'c' => 'C',
|
1166 |
+
'd' => 'D',
|
1167 |
+
'e' => 'E',
|
1168 |
+
'f' => 'F',
|
1169 |
+
'g' => 'G',
|
1170 |
+
'h' => 'H',
|
1171 |
+
'i' => 'I',
|
1172 |
+
'j' => 'J',
|
1173 |
+
'k' => 'K',
|
1174 |
+
'l' => 'L',
|
1175 |
+
'm' => 'M',
|
1176 |
+
'n' => 'N',
|
1177 |
+
'o' => 'O',
|
1178 |
+
'p' => 'P',
|
1179 |
+
'q' => 'Q',
|
1180 |
+
'r' => 'R',
|
1181 |
+
's' => 'S',
|
1182 |
+
't' => 'T',
|
1183 |
+
'u' => 'U',
|
1184 |
+
'v' => 'V',
|
1185 |
+
'w' => 'W',
|
1186 |
+
'x' => 'X',
|
1187 |
+
'y' => 'Y',
|
1188 |
+
'z' => 'Z',
|
1189 |
+
'𐐨' => '𐐀',
|
1190 |
+
'𐐩' => '𐐁',
|
1191 |
+
'𐐪' => '𐐂',
|
1192 |
+
'𐐫' => '𐐃',
|
1193 |
+
'𐐬' => '𐐄',
|
1194 |
+
'𐐭' => '𐐅',
|
1195 |
+
'𐐮' => '𐐆',
|
1196 |
+
'𐐯' => '𐐇',
|
1197 |
+
'𐐰' => '𐐈',
|
1198 |
+
'𐐱' => '𐐉',
|
1199 |
+
'𐐲' => '𐐊',
|
1200 |
+
'𐐳' => '𐐋',
|
1201 |
+
'𐐴' => '𐐌',
|
1202 |
+
'𐐵' => '𐐍',
|
1203 |
+
'𐐶' => '𐐎',
|
1204 |
+
'𐐷' => '𐐏',
|
1205 |
+
'𐐸' => '𐐐',
|
1206 |
+
'𐐹' => '𐐑',
|
1207 |
+
'𐐺' => '𐐒',
|
1208 |
+
'𐐻' => '𐐓',
|
1209 |
+
'𐐼' => '𐐔',
|
1210 |
+
'𐐽' => '𐐕',
|
1211 |
+
'𐐾' => '𐐖',
|
1212 |
+
'𐐿' => '𐐗',
|
1213 |
+
'𐑀' => '𐐘',
|
1214 |
+
'𐑁' => '𐐙',
|
1215 |
+
'𐑂' => '𐐚',
|
1216 |
+
'𐑃' => '𐐛',
|
1217 |
+
'𐑄' => '𐐜',
|
1218 |
+
'𐑅' => '𐐝',
|
1219 |
+
'𐑆' => '𐐞',
|
1220 |
+
'𐑇' => '𐐟',
|
1221 |
+
'𐑈' => '𐐠',
|
1222 |
+
'𐑉' => '𐐡',
|
1223 |
+
'𐑊' => '𐐢',
|
1224 |
+
'𐑋' => '𐐣',
|
1225 |
+
'𐑌' => '𐐤',
|
1226 |
+
'𐑍' => '𐐥',
|
1227 |
+
'𐑎' => '𐐦',
|
1228 |
+
'𐑏' => '𐐧',
|
1229 |
+
'𐓘' => '𐒰',
|
1230 |
+
'𐓙' => '𐒱',
|
1231 |
+
'𐓚' => '𐒲',
|
1232 |
+
'𐓛' => '𐒳',
|
1233 |
+
'𐓜' => '𐒴',
|
1234 |
+
'𐓝' => '𐒵',
|
1235 |
+
'𐓞' => '𐒶',
|
1236 |
+
'𐓟' => '𐒷',
|
1237 |
+
'𐓠' => '𐒸',
|
1238 |
+
'𐓡' => '𐒹',
|
1239 |
+
'𐓢' => '𐒺',
|
1240 |
+
'𐓣' => '𐒻',
|
1241 |
+
'𐓤' => '𐒼',
|
1242 |
+
'𐓥' => '𐒽',
|
1243 |
+
'𐓦' => '𐒾',
|
1244 |
+
'𐓧' => '𐒿',
|
1245 |
+
'𐓨' => '𐓀',
|
1246 |
+
'𐓩' => '𐓁',
|
1247 |
+
'𐓪' => '𐓂',
|
1248 |
+
'𐓫' => '𐓃',
|
1249 |
+
'𐓬' => '𐓄',
|
1250 |
+
'𐓭' => '𐓅',
|
1251 |
+
'𐓮' => '𐓆',
|
1252 |
+
'𐓯' => '𐓇',
|
1253 |
+
'𐓰' => '𐓈',
|
1254 |
+
'𐓱' => '𐓉',
|
1255 |
+
'𐓲' => '𐓊',
|
1256 |
+
'𐓳' => '𐓋',
|
1257 |
+
'𐓴' => '𐓌',
|
1258 |
+
'𐓵' => '𐓍',
|
1259 |
+
'𐓶' => '𐓎',
|
1260 |
+
'𐓷' => '𐓏',
|
1261 |
+
'𐓸' => '𐓐',
|
1262 |
+
'𐓹' => '𐓑',
|
1263 |
+
'𐓺' => '𐓒',
|
1264 |
+
'𐓻' => '𐓓',
|
1265 |
+
'𐳀' => '𐲀',
|
1266 |
+
'𐳁' => '𐲁',
|
1267 |
+
'𐳂' => '𐲂',
|
1268 |
+
'𐳃' => '𐲃',
|
1269 |
+
'𐳄' => '𐲄',
|
1270 |
+
'𐳅' => '𐲅',
|
1271 |
+
'𐳆' => '𐲆',
|
1272 |
+
'𐳇' => '𐲇',
|
1273 |
+
'𐳈' => '𐲈',
|
1274 |
+
'𐳉' => '𐲉',
|
1275 |
+
'𐳊' => '𐲊',
|
1276 |
+
'𐳋' => '𐲋',
|
1277 |
+
'𐳌' => '𐲌',
|
1278 |
+
'𐳍' => '𐲍',
|
1279 |
+
'𐳎' => '𐲎',
|
1280 |
+
'𐳏' => '𐲏',
|
1281 |
+
'𐳐' => '𐲐',
|
1282 |
+
'𐳑' => '𐲑',
|
1283 |
+
'𐳒' => '𐲒',
|
1284 |
+
'𐳓' => '𐲓',
|
1285 |
+
'𐳔' => '𐲔',
|
1286 |
+
'𐳕' => '𐲕',
|
1287 |
+
'𐳖' => '𐲖',
|
1288 |
+
'𐳗' => '𐲗',
|
1289 |
+
'𐳘' => '𐲘',
|
1290 |
+
'𐳙' => '𐲙',
|
1291 |
+
'𐳚' => '𐲚',
|
1292 |
+
'𐳛' => '𐲛',
|
1293 |
+
'𐳜' => '𐲜',
|
1294 |
+
'𐳝' => '𐲝',
|
1295 |
+
'𐳞' => '𐲞',
|
1296 |
+
'𐳟' => '𐲟',
|
1297 |
+
'𐳠' => '𐲠',
|
1298 |
+
'𐳡' => '𐲡',
|
1299 |
+
'𐳢' => '𐲢',
|
1300 |
+
'𐳣' => '𐲣',
|
1301 |
+
'𐳤' => '𐲤',
|
1302 |
+
'𐳥' => '𐲥',
|
1303 |
+
'𐳦' => '𐲦',
|
1304 |
+
'𐳧' => '𐲧',
|
1305 |
+
'𐳨' => '𐲨',
|
1306 |
+
'𐳩' => '𐲩',
|
1307 |
+
'𐳪' => '𐲪',
|
1308 |
+
'𐳫' => '𐲫',
|
1309 |
+
'𐳬' => '𐲬',
|
1310 |
+
'𐳭' => '𐲭',
|
1311 |
+
'𐳮' => '𐲮',
|
1312 |
+
'𐳯' => '𐲯',
|
1313 |
+
'𐳰' => '𐲰',
|
1314 |
+
'𐳱' => '𐲱',
|
1315 |
+
'𐳲' => '𐲲',
|
1316 |
+
'𑣀' => '𑢠',
|
1317 |
+
'𑣁' => '𑢡',
|
1318 |
+
'𑣂' => '𑢢',
|
1319 |
+
'𑣃' => '𑢣',
|
1320 |
+
'𑣄' => '𑢤',
|
1321 |
+
'𑣅' => '𑢥',
|
1322 |
+
'𑣆' => '𑢦',
|
1323 |
+
'𑣇' => '𑢧',
|
1324 |
+
'𑣈' => '𑢨',
|
1325 |
+
'𑣉' => '𑢩',
|
1326 |
+
'𑣊' => '𑢪',
|
1327 |
+
'𑣋' => '𑢫',
|
1328 |
+
'𑣌' => '𑢬',
|
1329 |
+
'𑣍' => '𑢭',
|
1330 |
+
'𑣎' => '𑢮',
|
1331 |
+
'𑣏' => '𑢯',
|
1332 |
+
'𑣐' => '𑢰',
|
1333 |
+
'𑣑' => '𑢱',
|
1334 |
+
'𑣒' => '𑢲',
|
1335 |
+
'𑣓' => '𑢳',
|
1336 |
+
'𑣔' => '𑢴',
|
1337 |
+
'𑣕' => '𑢵',
|
1338 |
+
'𑣖' => '𑢶',
|
1339 |
+
'𑣗' => '𑢷',
|
1340 |
+
'𑣘' => '𑢸',
|
1341 |
+
'𑣙' => '𑢹',
|
1342 |
+
'𑣚' => '𑢺',
|
1343 |
+
'𑣛' => '𑢻',
|
1344 |
+
'𑣜' => '𑢼',
|
1345 |
+
'𑣝' => '𑢽',
|
1346 |
+
'𑣞' => '𑢾',
|
1347 |
+
'𑣟' => '𑢿',
|
1348 |
+
'𖹠' => '𖹀',
|
1349 |
+
'𖹡' => '𖹁',
|
1350 |
+
'𖹢' => '𖹂',
|
1351 |
+
'𖹣' => '𖹃',
|
1352 |
+
'𖹤' => '𖹄',
|
1353 |
+
'𖹥' => '𖹅',
|
1354 |
+
'𖹦' => '𖹆',
|
1355 |
+
'𖹧' => '𖹇',
|
1356 |
+
'𖹨' => '𖹈',
|
1357 |
+
'𖹩' => '𖹉',
|
1358 |
+
'𖹪' => '𖹊',
|
1359 |
+
'𖹫' => '𖹋',
|
1360 |
+
'𖹬' => '𖹌',
|
1361 |
+
'𖹭' => '𖹍',
|
1362 |
+
'𖹮' => '𖹎',
|
1363 |
+
'𖹯' => '𖹏',
|
1364 |
+
'𖹰' => '𖹐',
|
1365 |
+
'𖹱' => '𖹑',
|
1366 |
+
'𖹲' => '𖹒',
|
1367 |
+
'𖹳' => '𖹓',
|
1368 |
+
'𖹴' => '𖹔',
|
1369 |
+
'𖹵' => '𖹕',
|
1370 |
+
'𖹶' => '𖹖',
|
1371 |
+
'𖹷' => '𖹗',
|
1372 |
+
'𖹸' => '𖹘',
|
1373 |
+
'𖹹' => '𖹙',
|
1374 |
+
'𖹺' => '𖹚',
|
1375 |
+
'𖹻' => '𖹛',
|
1376 |
+
'𖹼' => '𖹜',
|
1377 |
+
'𖹽' => '𖹝',
|
1378 |
+
'𖹾' => '𖹞',
|
1379 |
+
'𖹿' => '𖹟',
|
1380 |
+
'𞤢' => '𞤀',
|
1381 |
+
'𞤣' => '𞤁',
|
1382 |
+
'𞤤' => '𞤂',
|
1383 |
+
'𞤥' => '𞤃',
|
1384 |
+
'𞤦' => '𞤄',
|
1385 |
+
'𞤧' => '𞤅',
|
1386 |
+
'𞤨' => '𞤆',
|
1387 |
+
'𞤩' => '𞤇',
|
1388 |
+
'𞤪' => '𞤈',
|
1389 |
+
'𞤫' => '𞤉',
|
1390 |
+
'𞤬' => '𞤊',
|
1391 |
+
'𞤭' => '𞤋',
|
1392 |
+
'𞤮' => '𞤌',
|
1393 |
+
'𞤯' => '𞤍',
|
1394 |
+
'𞤰' => '𞤎',
|
1395 |
+
'𞤱' => '𞤏',
|
1396 |
+
'𞤲' => '𞤐',
|
1397 |
+
'𞤳' => '𞤑',
|
1398 |
+
'𞤴' => '𞤒',
|
1399 |
+
'𞤵' => '𞤓',
|
1400 |
+
'𞤶' => '𞤔',
|
1401 |
+
'𞤷' => '𞤕',
|
1402 |
+
'𞤸' => '𞤖',
|
1403 |
+
'𞤹' => '𞤗',
|
1404 |
+
'𞤺' => '𞤘',
|
1405 |
+
'𞤻' => '𞤙',
|
1406 |
+
'𞤼' => '𞤚',
|
1407 |
+
'𞤽' => '𞤛',
|
1408 |
+
'𞤾' => '𞤜',
|
1409 |
+
'𞤿' => '𞤝',
|
1410 |
+
'𞥀' => '𞤞',
|
1411 |
+
'𞥁' => '𞤟',
|
1412 |
+
'𞥂' => '𞤠',
|
1413 |
+
'𞥃' => '𞤡',
|
1414 |
+
);
|
vendor/symfony/polyfill-mbstring/bootstrap.php
ADDED
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
use Symfony\Polyfill\Mbstring as p;
|
13 |
+
|
14 |
+
if (!function_exists('mb_convert_encoding')) {
|
15 |
+
function mb_convert_encoding($s, $to, $from = null) { return p\Mbstring::mb_convert_encoding($s, $to, $from); }
|
16 |
+
}
|
17 |
+
if (!function_exists('mb_decode_mimeheader')) {
|
18 |
+
function mb_decode_mimeheader($s) { return p\Mbstring::mb_decode_mimeheader($s); }
|
19 |
+
}
|
20 |
+
if (!function_exists('mb_encode_mimeheader')) {
|
21 |
+
function mb_encode_mimeheader($s, $charset = null, $transferEnc = null, $lf = null, $indent = null) { return p\Mbstring::mb_encode_mimeheader($s, $charset, $transferEnc, $lf, $indent); }
|
22 |
+
}
|
23 |
+
if (!function_exists('mb_decode_numericentity')) {
|
24 |
+
function mb_decode_numericentity($s, $convmap, $enc = null) { return p\Mbstring::mb_decode_numericentity($s, $convmap, $enc); }
|
25 |
+
}
|
26 |
+
if (!function_exists('mb_encode_numericentity')) {
|
27 |
+
function mb_encode_numericentity($s, $convmap, $enc = null, $is_hex = false) { return p\Mbstring::mb_encode_numericentity($s, $convmap, $enc, $is_hex); }
|
28 |
+
}
|
29 |
+
if (!function_exists('mb_convert_case')) {
|
30 |
+
function mb_convert_case($s, $mode, $enc = null) { return p\Mbstring::mb_convert_case($s, $mode, $enc); }
|
31 |
+
}
|
32 |
+
if (!function_exists('mb_internal_encoding')) {
|
33 |
+
function mb_internal_encoding($enc = null) { return p\Mbstring::mb_internal_encoding($enc); }
|
34 |
+
}
|
35 |
+
if (!function_exists('mb_language')) {
|
36 |
+
function mb_language($lang = null) { return p\Mbstring::mb_language($lang); }
|
37 |
+
}
|
38 |
+
if (!function_exists('mb_list_encodings')) {
|
39 |
+
function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); }
|
40 |
+
}
|
41 |
+
if (!function_exists('mb_encoding_aliases')) {
|
42 |
+
function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); }
|
43 |
+
}
|
44 |
+
if (!function_exists('mb_check_encoding')) {
|
45 |
+
function mb_check_encoding($var = null, $encoding = null) { return p\Mbstring::mb_check_encoding($var, $encoding); }
|
46 |
+
}
|
47 |
+
if (!function_exists('mb_detect_encoding')) {
|
48 |
+
function mb_detect_encoding($str, $encodingList = null, $strict = false) { return p\Mbstring::mb_detect_encoding($str, $encodingList, $strict); }
|
49 |
+
}
|
50 |
+
if (!function_exists('mb_detect_order')) {
|
51 |
+
function mb_detect_order($encodingList = null) { return p\Mbstring::mb_detect_order($encodingList); }
|
52 |
+
}
|
53 |
+
if (!function_exists('mb_parse_str')) {
|
54 |
+
function mb_parse_str($s, &$result = array()) { parse_str($s, $result); }
|
55 |
+
}
|
56 |
+
if (!function_exists('mb_strlen')) {
|
57 |
+
function mb_strlen($s, $enc = null) { return p\Mbstring::mb_strlen($s, $enc); }
|
58 |
+
}
|
59 |
+
if (!function_exists('mb_strpos')) {
|
60 |
+
function mb_strpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strpos($s, $needle, $offset, $enc); }
|
61 |
+
}
|
62 |
+
if (!function_exists('mb_strtolower')) {
|
63 |
+
function mb_strtolower($s, $enc = null) { return p\Mbstring::mb_strtolower($s, $enc); }
|
64 |
+
}
|
65 |
+
if (!function_exists('mb_strtoupper')) {
|
66 |
+
function mb_strtoupper($s, $enc = null) { return p\Mbstring::mb_strtoupper($s, $enc); }
|
67 |
+
}
|
68 |
+
if (!function_exists('mb_substitute_character')) {
|
69 |
+
function mb_substitute_character($char = null) { return p\Mbstring::mb_substitute_character($char); }
|
70 |
+
}
|
71 |
+
if (!function_exists('mb_substr')) {
|
72 |
+
function mb_substr($s, $start, $length = 2147483647, $enc = null) { return p\Mbstring::mb_substr($s, $start, $length, $enc); }
|
73 |
+
}
|
74 |
+
if (!function_exists('mb_stripos')) {
|
75 |
+
function mb_stripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_stripos($s, $needle, $offset, $enc); }
|
76 |
+
}
|
77 |
+
if (!function_exists('mb_stristr')) {
|
78 |
+
function mb_stristr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_stristr($s, $needle, $part, $enc); }
|
79 |
+
}
|
80 |
+
if (!function_exists('mb_strrchr')) {
|
81 |
+
function mb_strrchr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrchr($s, $needle, $part, $enc); }
|
82 |
+
}
|
83 |
+
if (!function_exists('mb_strrichr')) {
|
84 |
+
function mb_strrichr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrichr($s, $needle, $part, $enc); }
|
85 |
+
}
|
86 |
+
if (!function_exists('mb_strripos')) {
|
87 |
+
function mb_strripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strripos($s, $needle, $offset, $enc); }
|
88 |
+
}
|
89 |
+
if (!function_exists('mb_strrpos')) {
|
90 |
+
function mb_strrpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strrpos($s, $needle, $offset, $enc); }
|
91 |
+
}
|
92 |
+
if (!function_exists('mb_strstr')) {
|
93 |
+
function mb_strstr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strstr($s, $needle, $part, $enc); }
|
94 |
+
}
|
95 |
+
if (!function_exists('mb_get_info')) {
|
96 |
+
function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); }
|
97 |
+
}
|
98 |
+
if (!function_exists('mb_http_output')) {
|
99 |
+
function mb_http_output($enc = null) { return p\Mbstring::mb_http_output($enc); }
|
100 |
+
}
|
101 |
+
if (!function_exists('mb_strwidth')) {
|
102 |
+
function mb_strwidth($s, $enc = null) { return p\Mbstring::mb_strwidth($s, $enc); }
|
103 |
+
}
|
104 |
+
if (!function_exists('mb_substr_count')) {
|
105 |
+
function mb_substr_count($haystack, $needle, $enc = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $enc); }
|
106 |
+
}
|
107 |
+
if (!function_exists('mb_output_handler')) {
|
108 |
+
function mb_output_handler($contents, $status) { return p\Mbstring::mb_output_handler($contents, $status); }
|
109 |
+
}
|
110 |
+
if (!function_exists('mb_http_input')) {
|
111 |
+
function mb_http_input($type = '') { return p\Mbstring::mb_http_input($type); }
|
112 |
+
}
|
113 |
+
if (!function_exists('mb_convert_variables')) {
|
114 |
+
function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) { return p\Mbstring::mb_convert_variables($toEncoding, $fromEncoding, $a, $b, $c, $d, $e, $f); }
|
115 |
+
}
|
116 |
+
if (!function_exists('mb_ord')) {
|
117 |
+
function mb_ord($s, $enc = null) { return p\Mbstring::mb_ord($s, $enc); }
|
118 |
+
}
|
119 |
+
if (!function_exists('mb_chr')) {
|
120 |
+
function mb_chr($code, $enc = null) { return p\Mbstring::mb_chr($code, $enc); }
|
121 |
+
}
|
122 |
+
if (!function_exists('mb_scrub')) {
|
123 |
+
function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); }
|
124 |
+
}
|
125 |
+
if (!function_exists('mb_str_split')) {
|
126 |
+
function mb_str_split($string, $split_length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $split_length, $encoding); }
|
127 |
+
}
|
128 |
+
|
129 |
+
if (extension_loaded('mbstring')) {
|
130 |
+
return;
|
131 |
+
}
|
132 |
+
|
133 |
+
if (!defined('MB_CASE_UPPER')) {
|
134 |
+
define('MB_CASE_UPPER', 0);
|
135 |
+
}
|
136 |
+
if (!defined('MB_CASE_LOWER')) {
|
137 |
+
define('MB_CASE_LOWER', 1);
|
138 |
+
}
|
139 |
+
if (!defined('MB_CASE_TITLE')) {
|
140 |
+
define('MB_CASE_TITLE', 2);
|
141 |
+
}
|
vendor/symfony/polyfill-mbstring/composer.json
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "symfony/polyfill-mbstring",
|
3 |
+
"type": "library",
|
4 |
+
"description": "Symfony polyfill for the Mbstring extension",
|
5 |
+
"keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"],
|
6 |
+
"homepage": "https://symfony.com",
|
7 |
+
"license": "MIT",
|
8 |
+
"authors": [
|
9 |
+
{
|
10 |
+
"name": "Nicolas Grekas",
|
11 |
+
"email": "p@tchwork.com"
|
12 |
+
},
|
13 |
+
{
|
14 |
+
"name": "Symfony Community",
|
15 |
+
"homepage": "https://symfony.com/contributors"
|
16 |
+
}
|
17 |
+
],
|
18 |
+
"require": {
|
19 |
+
"php": ">=5.3.3"
|
20 |
+
},
|
21 |
+
"autoload": {
|
22 |
+
"psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" },
|
23 |
+
"files": [ "bootstrap.php" ]
|
24 |
+
},
|
25 |
+
"suggest": {
|
26 |
+
"ext-mbstring": "For best performance"
|
27 |
+
},
|
28 |
+
"minimum-stability": "dev",
|
29 |
+
"extra": {
|
30 |
+
"branch-alias": {
|
31 |
+
"dev-master": "1.17-dev"
|
32 |
+
},
|
33 |
+
"thanks": {
|
34 |
+
"name": "symfony/polyfill",
|
35 |
+
"url": "https://github.com/symfony/polyfill"
|
36 |
+
}
|
37 |
+
}
|
38 |
+
}
|
vendor/symfony/translation/.gitignore
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
vendor/
|
2 |
+
composer.lock
|
3 |
+
phpunit.xml
|
vendor/symfony/translation/Catalogue/AbstractOperation.php
ADDED
@@ -0,0 +1,155 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Catalogue;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
use Symfony\Component\Translation\MessageCatalogueInterface;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Base catalogues binary operation class.
|
19 |
+
*
|
20 |
+
* A catalogue binary operation performs operation on
|
21 |
+
* source (the left argument) and target (the right argument) catalogues.
|
22 |
+
*
|
23 |
+
* @author Jean-François Simon <contact@jfsimon.fr>
|
24 |
+
*/
|
25 |
+
abstract class AbstractOperation implements OperationInterface
|
26 |
+
{
|
27 |
+
protected $source;
|
28 |
+
protected $target;
|
29 |
+
protected $result;
|
30 |
+
|
31 |
+
/**
|
32 |
+
* @var array|null The domains affected by this operation
|
33 |
+
*/
|
34 |
+
private $domains;
|
35 |
+
|
36 |
+
/**
|
37 |
+
* This array stores 'all', 'new' and 'obsolete' messages for all valid domains.
|
38 |
+
*
|
39 |
+
* The data structure of this array is as follows:
|
40 |
+
*
|
41 |
+
* array(
|
42 |
+
* 'domain 1' => array(
|
43 |
+
* 'all' => array(...),
|
44 |
+
* 'new' => array(...),
|
45 |
+
* 'obsolete' => array(...)
|
46 |
+
* ),
|
47 |
+
* 'domain 2' => array(
|
48 |
+
* 'all' => array(...),
|
49 |
+
* 'new' => array(...),
|
50 |
+
* 'obsolete' => array(...)
|
51 |
+
* ),
|
52 |
+
* ...
|
53 |
+
* )
|
54 |
+
*
|
55 |
+
* @var array The array that stores 'all', 'new' and 'obsolete' messages
|
56 |
+
*/
|
57 |
+
protected $messages;
|
58 |
+
|
59 |
+
/**
|
60 |
+
* @throws \LogicException
|
61 |
+
*/
|
62 |
+
public function __construct(MessageCatalogueInterface $source, MessageCatalogueInterface $target)
|
63 |
+
{
|
64 |
+
if ($source->getLocale() !== $target->getLocale()) {
|
65 |
+
throw new \LogicException('Operated catalogues must belong to the same locale.');
|
66 |
+
}
|
67 |
+
|
68 |
+
$this->source = $source;
|
69 |
+
$this->target = $target;
|
70 |
+
$this->result = new MessageCatalogue($source->getLocale());
|
71 |
+
$this->messages = array();
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* {@inheritdoc}
|
76 |
+
*/
|
77 |
+
public function getDomains()
|
78 |
+
{
|
79 |
+
if (null === $this->domains) {
|
80 |
+
$this->domains = array_values(array_unique(array_merge($this->source->getDomains(), $this->target->getDomains())));
|
81 |
+
}
|
82 |
+
|
83 |
+
return $this->domains;
|
84 |
+
}
|
85 |
+
|
86 |
+
/**
|
87 |
+
* {@inheritdoc}
|
88 |
+
*/
|
89 |
+
public function getMessages($domain)
|
90 |
+
{
|
91 |
+
if (!\in_array($domain, $this->getDomains())) {
|
92 |
+
throw new \InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
|
93 |
+
}
|
94 |
+
|
95 |
+
if (!isset($this->messages[$domain]['all'])) {
|
96 |
+
$this->processDomain($domain);
|
97 |
+
}
|
98 |
+
|
99 |
+
return $this->messages[$domain]['all'];
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* {@inheritdoc}
|
104 |
+
*/
|
105 |
+
public function getNewMessages($domain)
|
106 |
+
{
|
107 |
+
if (!\in_array($domain, $this->getDomains())) {
|
108 |
+
throw new \InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
|
109 |
+
}
|
110 |
+
|
111 |
+
if (!isset($this->messages[$domain]['new'])) {
|
112 |
+
$this->processDomain($domain);
|
113 |
+
}
|
114 |
+
|
115 |
+
return $this->messages[$domain]['new'];
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* {@inheritdoc}
|
120 |
+
*/
|
121 |
+
public function getObsoleteMessages($domain)
|
122 |
+
{
|
123 |
+
if (!\in_array($domain, $this->getDomains())) {
|
124 |
+
throw new \InvalidArgumentException(sprintf('Invalid domain: %s.', $domain));
|
125 |
+
}
|
126 |
+
|
127 |
+
if (!isset($this->messages[$domain]['obsolete'])) {
|
128 |
+
$this->processDomain($domain);
|
129 |
+
}
|
130 |
+
|
131 |
+
return $this->messages[$domain]['obsolete'];
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* {@inheritdoc}
|
136 |
+
*/
|
137 |
+
public function getResult()
|
138 |
+
{
|
139 |
+
foreach ($this->getDomains() as $domain) {
|
140 |
+
if (!isset($this->messages[$domain])) {
|
141 |
+
$this->processDomain($domain);
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
145 |
+
return $this->result;
|
146 |
+
}
|
147 |
+
|
148 |
+
/**
|
149 |
+
* Performs operation on source and target catalogues for the given domain and
|
150 |
+
* stores the results.
|
151 |
+
*
|
152 |
+
* @param string $domain The domain which the operation will be performed for
|
153 |
+
*/
|
154 |
+
abstract protected function processDomain($domain);
|
155 |
+
}
|
vendor/symfony/translation/Catalogue/DiffOperation.php
ADDED
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Catalogue;
|
13 |
+
|
14 |
+
@trigger_error('The '.__NAMESPACE__.'\DiffOperation class is deprecated since Symfony 2.8 and will be removed in 3.0. Use the TargetOperation class in the same namespace instead.', E_USER_DEPRECATED);
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Diff operation between two catalogues.
|
18 |
+
*
|
19 |
+
* The name of 'Diff' is misleading because the operation
|
20 |
+
* has nothing to do with diff:
|
21 |
+
*
|
22 |
+
* intersection = source ∩ target = {x: x ∈ source ∧ x ∈ target}
|
23 |
+
* all = intersection ∪ (target ∖ intersection) = target
|
24 |
+
* new = all ∖ source = {x: x ∈ target ∧ x ∉ source}
|
25 |
+
* obsolete = source ∖ all = source ∖ target = {x: x ∈ source ∧ x ∉ target}
|
26 |
+
*
|
27 |
+
* @author Jean-François Simon <contact@jfsimon.fr>
|
28 |
+
*
|
29 |
+
* @deprecated since version 2.8, to be removed in 3.0. Use TargetOperation instead.
|
30 |
+
*/
|
31 |
+
class DiffOperation extends TargetOperation
|
32 |
+
{
|
33 |
+
}
|
vendor/symfony/translation/Catalogue/MergeOperation.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Catalogue;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Merge operation between two catalogues as follows:
|
16 |
+
* all = source ∪ target = {x: x ∈ source ∨ x ∈ target}
|
17 |
+
* new = all ∖ source = {x: x ∈ target ∧ x ∉ source}
|
18 |
+
* obsolete = source ∖ all = {x: x ∈ source ∧ x ∉ source ∧ x ∉ target} = ∅
|
19 |
+
* Basically, the result contains messages from both catalogues.
|
20 |
+
*
|
21 |
+
* @author Jean-François Simon <contact@jfsimon.fr>
|
22 |
+
*/
|
23 |
+
class MergeOperation extends AbstractOperation
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* {@inheritdoc}
|
27 |
+
*/
|
28 |
+
protected function processDomain($domain)
|
29 |
+
{
|
30 |
+
$this->messages[$domain] = array(
|
31 |
+
'all' => array(),
|
32 |
+
'new' => array(),
|
33 |
+
'obsolete' => array(),
|
34 |
+
);
|
35 |
+
|
36 |
+
foreach ($this->source->all($domain) as $id => $message) {
|
37 |
+
$this->messages[$domain]['all'][$id] = $message;
|
38 |
+
$this->result->add(array($id => $message), $domain);
|
39 |
+
if (null !== $keyMetadata = $this->source->getMetadata($id, $domain)) {
|
40 |
+
$this->result->setMetadata($id, $keyMetadata, $domain);
|
41 |
+
}
|
42 |
+
}
|
43 |
+
|
44 |
+
foreach ($this->target->all($domain) as $id => $message) {
|
45 |
+
if (!$this->source->has($id, $domain)) {
|
46 |
+
$this->messages[$domain]['all'][$id] = $message;
|
47 |
+
$this->messages[$domain]['new'][$id] = $message;
|
48 |
+
$this->result->add(array($id => $message), $domain);
|
49 |
+
if (null !== $keyMetadata = $this->target->getMetadata($id, $domain)) {
|
50 |
+
$this->result->setMetadata($id, $keyMetadata, $domain);
|
51 |
+
}
|
52 |
+
}
|
53 |
+
}
|
54 |
+
}
|
55 |
+
}
|
vendor/symfony/translation/Catalogue/OperationInterface.php
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Catalogue;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogueInterface;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Represents an operation on catalogue(s).
|
18 |
+
*
|
19 |
+
* An instance of this interface performs an operation on one or more catalogues and
|
20 |
+
* stores intermediate and final results of the operation.
|
21 |
+
*
|
22 |
+
* The first catalogue in its argument(s) is called the 'source catalogue' or 'source' and
|
23 |
+
* the following results are stored:
|
24 |
+
*
|
25 |
+
* Messages: also called 'all', are valid messages for the given domain after the operation is performed.
|
26 |
+
*
|
27 |
+
* New Messages: also called 'new' (new = all ∖ source = {x: x ∈ all ∧ x ∉ source}).
|
28 |
+
*
|
29 |
+
* Obsolete Messages: also called 'obsolete' (obsolete = source ∖ all = {x: x ∈ source ∧ x ∉ all}).
|
30 |
+
*
|
31 |
+
* Result: also called 'result', is the resulting catalogue for the given domain that holds the same messages as 'all'.
|
32 |
+
*
|
33 |
+
* @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com>
|
34 |
+
*/
|
35 |
+
interface OperationInterface
|
36 |
+
{
|
37 |
+
/**
|
38 |
+
* Returns domains affected by operation.
|
39 |
+
*
|
40 |
+
* @return array
|
41 |
+
*/
|
42 |
+
public function getDomains();
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Returns all valid messages ('all') after operation.
|
46 |
+
*
|
47 |
+
* @param string $domain
|
48 |
+
*
|
49 |
+
* @return array
|
50 |
+
*/
|
51 |
+
public function getMessages($domain);
|
52 |
+
|
53 |
+
/**
|
54 |
+
* Returns new messages ('new') after operation.
|
55 |
+
*
|
56 |
+
* @param string $domain
|
57 |
+
*
|
58 |
+
* @return array
|
59 |
+
*/
|
60 |
+
public function getNewMessages($domain);
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Returns obsolete messages ('obsolete') after operation.
|
64 |
+
*
|
65 |
+
* @param string $domain
|
66 |
+
*
|
67 |
+
* @return array
|
68 |
+
*/
|
69 |
+
public function getObsoleteMessages($domain);
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Returns resulting catalogue ('result').
|
73 |
+
*
|
74 |
+
* @return MessageCatalogueInterface
|
75 |
+
*/
|
76 |
+
public function getResult();
|
77 |
+
}
|
vendor/symfony/translation/Catalogue/TargetOperation.php
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Catalogue;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Target operation between two catalogues:
|
16 |
+
* intersection = source ∩ target = {x: x ∈ source ∧ x ∈ target}
|
17 |
+
* all = intersection ∪ (target ∖ intersection) = target
|
18 |
+
* new = all ∖ source = {x: x ∈ target ∧ x ∉ source}
|
19 |
+
* obsolete = source ∖ all = source ∖ target = {x: x ∈ source ∧ x ∉ target}
|
20 |
+
* Basically, the result contains messages from the target catalogue.
|
21 |
+
*
|
22 |
+
* @author Michael Lee <michael.lee@zerustech.com>
|
23 |
+
*/
|
24 |
+
class TargetOperation extends AbstractOperation
|
25 |
+
{
|
26 |
+
/**
|
27 |
+
* {@inheritdoc}
|
28 |
+
*/
|
29 |
+
protected function processDomain($domain)
|
30 |
+
{
|
31 |
+
$this->messages[$domain] = array(
|
32 |
+
'all' => array(),
|
33 |
+
'new' => array(),
|
34 |
+
'obsolete' => array(),
|
35 |
+
);
|
36 |
+
|
37 |
+
// For 'all' messages, the code can't be simplified as ``$this->messages[$domain]['all'] = $target->all($domain);``,
|
38 |
+
// because doing so will drop messages like {x: x ∈ source ∧ x ∉ target.all ∧ x ∈ target.fallback}
|
39 |
+
//
|
40 |
+
// For 'new' messages, the code can't be simplied as ``array_diff_assoc($this->target->all($domain), $this->source->all($domain));``
|
41 |
+
// because doing so will not exclude messages like {x: x ∈ target ∧ x ∉ source.all ∧ x ∈ source.fallback}
|
42 |
+
//
|
43 |
+
// For 'obsolete' messages, the code can't be simplifed as ``array_diff_assoc($this->source->all($domain), $this->target->all($domain))``
|
44 |
+
// because doing so will not exclude messages like {x: x ∈ source ∧ x ∉ target.all ∧ x ∈ target.fallback}
|
45 |
+
|
46 |
+
foreach ($this->source->all($domain) as $id => $message) {
|
47 |
+
if ($this->target->has($id, $domain)) {
|
48 |
+
$this->messages[$domain]['all'][$id] = $message;
|
49 |
+
$this->result->add(array($id => $message), $domain);
|
50 |
+
if (null !== $keyMetadata = $this->source->getMetadata($id, $domain)) {
|
51 |
+
$this->result->setMetadata($id, $keyMetadata, $domain);
|
52 |
+
}
|
53 |
+
} else {
|
54 |
+
$this->messages[$domain]['obsolete'][$id] = $message;
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
+
foreach ($this->target->all($domain) as $id => $message) {
|
59 |
+
if (!$this->source->has($id, $domain)) {
|
60 |
+
$this->messages[$domain]['all'][$id] = $message;
|
61 |
+
$this->messages[$domain]['new'][$id] = $message;
|
62 |
+
$this->result->add(array($id => $message), $domain);
|
63 |
+
if (null !== $keyMetadata = $this->target->getMetadata($id, $domain)) {
|
64 |
+
$this->result->setMetadata($id, $keyMetadata, $domain);
|
65 |
+
}
|
66 |
+
}
|
67 |
+
}
|
68 |
+
}
|
69 |
+
}
|
vendor/symfony/translation/DataCollector/TranslationDataCollector.php
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\DataCollector;
|
13 |
+
|
14 |
+
use Symfony\Component\HttpFoundation\Request;
|
15 |
+
use Symfony\Component\HttpFoundation\Response;
|
16 |
+
use Symfony\Component\HttpKernel\DataCollector\DataCollector;
|
17 |
+
use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
|
18 |
+
use Symfony\Component\Translation\DataCollectorTranslator;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
|
22 |
+
*/
|
23 |
+
class TranslationDataCollector extends DataCollector implements LateDataCollectorInterface
|
24 |
+
{
|
25 |
+
private $translator;
|
26 |
+
|
27 |
+
public function __construct(DataCollectorTranslator $translator)
|
28 |
+
{
|
29 |
+
$this->translator = $translator;
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* {@inheritdoc}
|
34 |
+
*/
|
35 |
+
public function lateCollect()
|
36 |
+
{
|
37 |
+
$messages = $this->sanitizeCollectedMessages($this->translator->getCollectedMessages());
|
38 |
+
|
39 |
+
$this->data = $this->computeCount($messages);
|
40 |
+
$this->data['messages'] = $messages;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* {@inheritdoc}
|
45 |
+
*/
|
46 |
+
public function collect(Request $request, Response $response, \Exception $exception = null)
|
47 |
+
{
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @return array
|
52 |
+
*/
|
53 |
+
public function getMessages()
|
54 |
+
{
|
55 |
+
return isset($this->data['messages']) ? $this->data['messages'] : array();
|
56 |
+
}
|
57 |
+
|
58 |
+
/**
|
59 |
+
* @return int
|
60 |
+
*/
|
61 |
+
public function getCountMissings()
|
62 |
+
{
|
63 |
+
return isset($this->data[DataCollectorTranslator::MESSAGE_MISSING]) ? $this->data[DataCollectorTranslator::MESSAGE_MISSING] : 0;
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* @return int
|
68 |
+
*/
|
69 |
+
public function getCountFallbacks()
|
70 |
+
{
|
71 |
+
return isset($this->data[DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK]) ? $this->data[DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK] : 0;
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* @return int
|
76 |
+
*/
|
77 |
+
public function getCountDefines()
|
78 |
+
{
|
79 |
+
return isset($this->data[DataCollectorTranslator::MESSAGE_DEFINED]) ? $this->data[DataCollectorTranslator::MESSAGE_DEFINED] : 0;
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* {@inheritdoc}
|
84 |
+
*/
|
85 |
+
public function getName()
|
86 |
+
{
|
87 |
+
return 'translation';
|
88 |
+
}
|
89 |
+
|
90 |
+
private function sanitizeCollectedMessages($messages)
|
91 |
+
{
|
92 |
+
$result = array();
|
93 |
+
foreach ($messages as $key => $message) {
|
94 |
+
$messageId = $message['locale'].$message['domain'].$message['id'];
|
95 |
+
|
96 |
+
if (!isset($result[$messageId])) {
|
97 |
+
$message['count'] = 1;
|
98 |
+
$message['parameters'] = !empty($message['parameters']) ? array($message['parameters']) : array();
|
99 |
+
$messages[$key]['translation'] = $this->sanitizeString($message['translation']);
|
100 |
+
$result[$messageId] = $message;
|
101 |
+
} else {
|
102 |
+
if (!empty($message['parameters'])) {
|
103 |
+
$result[$messageId]['parameters'][] = $message['parameters'];
|
104 |
+
}
|
105 |
+
|
106 |
+
++$result[$messageId]['count'];
|
107 |
+
}
|
108 |
+
|
109 |
+
unset($messages[$key]);
|
110 |
+
}
|
111 |
+
|
112 |
+
return $result;
|
113 |
+
}
|
114 |
+
|
115 |
+
private function computeCount($messages)
|
116 |
+
{
|
117 |
+
$count = array(
|
118 |
+
DataCollectorTranslator::MESSAGE_DEFINED => 0,
|
119 |
+
DataCollectorTranslator::MESSAGE_MISSING => 0,
|
120 |
+
DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK => 0,
|
121 |
+
);
|
122 |
+
|
123 |
+
foreach ($messages as $message) {
|
124 |
+
++$count[$message['state']];
|
125 |
+
}
|
126 |
+
|
127 |
+
return $count;
|
128 |
+
}
|
129 |
+
|
130 |
+
private function sanitizeString($string, $length = 80)
|
131 |
+
{
|
132 |
+
$string = trim(preg_replace('/\s+/', ' ', $string));
|
133 |
+
|
134 |
+
if (false !== $encoding = mb_detect_encoding($string, null, true)) {
|
135 |
+
if (mb_strlen($string, $encoding) > $length) {
|
136 |
+
return mb_substr($string, 0, $length - 3, $encoding).'...';
|
137 |
+
}
|
138 |
+
} elseif (\strlen($string) > $length) {
|
139 |
+
return substr($string, 0, $length - 3).'...';
|
140 |
+
}
|
141 |
+
|
142 |
+
return $string;
|
143 |
+
}
|
144 |
+
}
|
vendor/symfony/translation/DataCollectorTranslator.php
ADDED
@@ -0,0 +1,163 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
|
16 |
+
*/
|
17 |
+
class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInterface
|
18 |
+
{
|
19 |
+
const MESSAGE_DEFINED = 0;
|
20 |
+
const MESSAGE_MISSING = 1;
|
21 |
+
const MESSAGE_EQUALS_FALLBACK = 2;
|
22 |
+
|
23 |
+
/**
|
24 |
+
* @var TranslatorInterface|TranslatorBagInterface
|
25 |
+
*/
|
26 |
+
private $translator;
|
27 |
+
|
28 |
+
private $messages = array();
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @param TranslatorInterface $translator The translator must implement TranslatorBagInterface
|
32 |
+
*/
|
33 |
+
public function __construct(TranslatorInterface $translator)
|
34 |
+
{
|
35 |
+
if (!$translator instanceof TranslatorBagInterface) {
|
36 |
+
throw new \InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface and TranslatorBagInterface.', \get_class($translator)));
|
37 |
+
}
|
38 |
+
|
39 |
+
$this->translator = $translator;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* {@inheritdoc}
|
44 |
+
*/
|
45 |
+
public function trans($id, array $parameters = array(), $domain = null, $locale = null)
|
46 |
+
{
|
47 |
+
$trans = $this->translator->trans($id, $parameters, $domain, $locale);
|
48 |
+
$this->collectMessage($locale, $domain, $id, $trans, $parameters);
|
49 |
+
|
50 |
+
return $trans;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* {@inheritdoc}
|
55 |
+
*/
|
56 |
+
public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
|
57 |
+
{
|
58 |
+
$trans = $this->translator->transChoice($id, $number, $parameters, $domain, $locale);
|
59 |
+
$this->collectMessage($locale, $domain, $id, $trans, $parameters, $number);
|
60 |
+
|
61 |
+
return $trans;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* {@inheritdoc}
|
66 |
+
*/
|
67 |
+
public function setLocale($locale)
|
68 |
+
{
|
69 |
+
$this->translator->setLocale($locale);
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* {@inheritdoc}
|
74 |
+
*/
|
75 |
+
public function getLocale()
|
76 |
+
{
|
77 |
+
return $this->translator->getLocale();
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* {@inheritdoc}
|
82 |
+
*/
|
83 |
+
public function getCatalogue($locale = null)
|
84 |
+
{
|
85 |
+
return $this->translator->getCatalogue($locale);
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Gets the fallback locales.
|
90 |
+
*
|
91 |
+
* @return array The fallback locales
|
92 |
+
*/
|
93 |
+
public function getFallbackLocales()
|
94 |
+
{
|
95 |
+
if ($this->translator instanceof Translator || method_exists($this->translator, 'getFallbackLocales')) {
|
96 |
+
return $this->translator->getFallbackLocales();
|
97 |
+
}
|
98 |
+
|
99 |
+
return array();
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Passes through all unknown calls onto the translator object.
|
104 |
+
*/
|
105 |
+
public function __call($method, $args)
|
106 |
+
{
|
107 |
+
return \call_user_func_array(array($this->translator, $method), $args);
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* @return array
|
112 |
+
*/
|
113 |
+
public function getCollectedMessages()
|
114 |
+
{
|
115 |
+
return $this->messages;
|
116 |
+
}
|
117 |
+
|
118 |
+
/**
|
119 |
+
* @param string|null $locale
|
120 |
+
* @param string|null $domain
|
121 |
+
* @param string $id
|
122 |
+
* @param string $translation
|
123 |
+
* @param array|null $parameters
|
124 |
+
* @param int|null $number
|
125 |
+
*/
|
126 |
+
private function collectMessage($locale, $domain, $id, $translation, $parameters = array(), $number = null)
|
127 |
+
{
|
128 |
+
if (null === $domain) {
|
129 |
+
$domain = 'messages';
|
130 |
+
}
|
131 |
+
|
132 |
+
$id = (string) $id;
|
133 |
+
$catalogue = $this->translator->getCatalogue($locale);
|
134 |
+
$locale = $catalogue->getLocale();
|
135 |
+
if ($catalogue->defines($id, $domain)) {
|
136 |
+
$state = self::MESSAGE_DEFINED;
|
137 |
+
} elseif ($catalogue->has($id, $domain)) {
|
138 |
+
$state = self::MESSAGE_EQUALS_FALLBACK;
|
139 |
+
|
140 |
+
$fallbackCatalogue = $catalogue->getFallbackCatalogue();
|
141 |
+
while ($fallbackCatalogue) {
|
142 |
+
if ($fallbackCatalogue->defines($id, $domain)) {
|
143 |
+
$locale = $fallbackCatalogue->getLocale();
|
144 |
+
break;
|
145 |
+
}
|
146 |
+
|
147 |
+
$fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue();
|
148 |
+
}
|
149 |
+
} else {
|
150 |
+
$state = self::MESSAGE_MISSING;
|
151 |
+
}
|
152 |
+
|
153 |
+
$this->messages[] = array(
|
154 |
+
'locale' => $locale,
|
155 |
+
'domain' => $domain,
|
156 |
+
'id' => $id,
|
157 |
+
'translation' => $translation,
|
158 |
+
'parameters' => $parameters,
|
159 |
+
'transChoiceNumber' => $number,
|
160 |
+
'state' => $state,
|
161 |
+
);
|
162 |
+
}
|
163 |
+
}
|
vendor/symfony/translation/Dumper/CsvFileDumper.php
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* CsvFileDumper generates a csv formatted string representation of a message catalogue.
|
18 |
+
*
|
19 |
+
* @author Stealth35
|
20 |
+
*/
|
21 |
+
class CsvFileDumper extends FileDumper
|
22 |
+
{
|
23 |
+
private $delimiter = ';';
|
24 |
+
private $enclosure = '"';
|
25 |
+
|
26 |
+
/**
|
27 |
+
* {@inheritdoc}
|
28 |
+
*/
|
29 |
+
public function format(MessageCatalogue $messages, $domain = 'messages')
|
30 |
+
{
|
31 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.', E_USER_DEPRECATED);
|
32 |
+
|
33 |
+
return $this->formatCatalogue($messages, $domain);
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* {@inheritdoc}
|
38 |
+
*/
|
39 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
40 |
+
{
|
41 |
+
$handle = fopen('php://memory', 'r+b');
|
42 |
+
|
43 |
+
foreach ($messages->all($domain) as $source => $target) {
|
44 |
+
fputcsv($handle, array($source, $target), $this->delimiter, $this->enclosure);
|
45 |
+
}
|
46 |
+
|
47 |
+
rewind($handle);
|
48 |
+
$output = stream_get_contents($handle);
|
49 |
+
fclose($handle);
|
50 |
+
|
51 |
+
return $output;
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* Sets the delimiter and escape character for CSV.
|
56 |
+
*
|
57 |
+
* @param string $delimiter Delimiter character
|
58 |
+
* @param string $enclosure Enclosure character
|
59 |
+
*/
|
60 |
+
public function setCsvControl($delimiter = ';', $enclosure = '"')
|
61 |
+
{
|
62 |
+
$this->delimiter = $delimiter;
|
63 |
+
$this->enclosure = $enclosure;
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* {@inheritdoc}
|
68 |
+
*/
|
69 |
+
protected function getExtension()
|
70 |
+
{
|
71 |
+
return 'csv';
|
72 |
+
}
|
73 |
+
}
|
vendor/symfony/translation/Dumper/DumperInterface.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* DumperInterface is the interface implemented by all translation dumpers.
|
18 |
+
* There is no common option.
|
19 |
+
*
|
20 |
+
* @author Michel Salib <michelsalib@hotmail.com>
|
21 |
+
*/
|
22 |
+
interface DumperInterface
|
23 |
+
{
|
24 |
+
/**
|
25 |
+
* Dumps the message catalogue.
|
26 |
+
*
|
27 |
+
* @param MessageCatalogue $messages The message catalogue
|
28 |
+
* @param array $options Options that are used by the dumper
|
29 |
+
*/
|
30 |
+
public function dump(MessageCatalogue $messages, $options = array());
|
31 |
+
}
|
vendor/symfony/translation/Dumper/FileDumper.php
ADDED
@@ -0,0 +1,145 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* FileDumper is an implementation of DumperInterface that dump a message catalogue to file(s).
|
18 |
+
* Performs backup of already existing files.
|
19 |
+
*
|
20 |
+
* Options:
|
21 |
+
* - path (mandatory): the directory where the files should be saved
|
22 |
+
*
|
23 |
+
* @author Michel Salib <michelsalib@hotmail.com>
|
24 |
+
*/
|
25 |
+
abstract class FileDumper implements DumperInterface
|
26 |
+
{
|
27 |
+
/**
|
28 |
+
* A template for the relative paths to files.
|
29 |
+
*
|
30 |
+
* @var string
|
31 |
+
*/
|
32 |
+
protected $relativePathTemplate = '%domain%.%locale%.%extension%';
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Make file backup before the dump.
|
36 |
+
*
|
37 |
+
* @var bool
|
38 |
+
*/
|
39 |
+
private $backup = true;
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Sets the template for the relative paths to files.
|
43 |
+
*
|
44 |
+
* @param string $relativePathTemplate A template for the relative paths to files
|
45 |
+
*/
|
46 |
+
public function setRelativePathTemplate($relativePathTemplate)
|
47 |
+
{
|
48 |
+
$this->relativePathTemplate = $relativePathTemplate;
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Sets backup flag.
|
53 |
+
*
|
54 |
+
* @param bool $backup
|
55 |
+
*/
|
56 |
+
public function setBackup($backup)
|
57 |
+
{
|
58 |
+
$this->backup = $backup;
|
59 |
+
}
|
60 |
+
|
61 |
+
/**
|
62 |
+
* {@inheritdoc}
|
63 |
+
*/
|
64 |
+
public function dump(MessageCatalogue $messages, $options = array())
|
65 |
+
{
|
66 |
+
if (!array_key_exists('path', $options)) {
|
67 |
+
throw new \InvalidArgumentException('The file dumper needs a path option.');
|
68 |
+
}
|
69 |
+
|
70 |
+
// save a file for each domain
|
71 |
+
foreach ($messages->getDomains() as $domain) {
|
72 |
+
// backup
|
73 |
+
$fullpath = $options['path'].'/'.$this->getRelativePath($domain, $messages->getLocale());
|
74 |
+
if (file_exists($fullpath)) {
|
75 |
+
if ($this->backup) {
|
76 |
+
copy($fullpath, $fullpath.'~');
|
77 |
+
}
|
78 |
+
} else {
|
79 |
+
$directory = \dirname($fullpath);
|
80 |
+
if (!file_exists($directory) && !@mkdir($directory, 0777, true)) {
|
81 |
+
throw new \RuntimeException(sprintf('Unable to create directory "%s".', $directory));
|
82 |
+
}
|
83 |
+
}
|
84 |
+
// save file
|
85 |
+
file_put_contents($fullpath, $this->formatCatalogue($messages, $domain, $options));
|
86 |
+
}
|
87 |
+
}
|
88 |
+
|
89 |
+
/**
|
90 |
+
* Transforms a domain of a message catalogue to its string representation.
|
91 |
+
*
|
92 |
+
* Override this function in child class if $options is used for message formatting.
|
93 |
+
*
|
94 |
+
* @param MessageCatalogue $messages
|
95 |
+
* @param string $domain
|
96 |
+
* @param array $options
|
97 |
+
*
|
98 |
+
* @return string representation
|
99 |
+
*/
|
100 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
101 |
+
{
|
102 |
+
@trigger_error('The '.__METHOD__.' method will replace the format method in 3.0. You should overwrite it instead of overwriting format instead.', E_USER_DEPRECATED);
|
103 |
+
|
104 |
+
return $this->format($messages, $domain);
|
105 |
+
}
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Transforms a domain of a message catalogue to its string representation.
|
109 |
+
*
|
110 |
+
* @param MessageCatalogue $messages
|
111 |
+
* @param string $domain
|
112 |
+
*
|
113 |
+
* @return string representation
|
114 |
+
*
|
115 |
+
* @deprecated since version 2.8, to be removed in 3.0. Overwrite formatCatalogue() instead.
|
116 |
+
*/
|
117 |
+
protected function format(MessageCatalogue $messages, $domain)
|
118 |
+
{
|
119 |
+
throw new \LogicException('The "FileDumper::format" method needs to be overwritten, you should implement either "format" or "formatCatalogue".');
|
120 |
+
}
|
121 |
+
|
122 |
+
/**
|
123 |
+
* Gets the file extension of the dumper.
|
124 |
+
*
|
125 |
+
* @return string file extension
|
126 |
+
*/
|
127 |
+
abstract protected function getExtension();
|
128 |
+
|
129 |
+
/**
|
130 |
+
* Gets the relative file path using the template.
|
131 |
+
*
|
132 |
+
* @param string $domain The domain
|
133 |
+
* @param string $locale The locale
|
134 |
+
*
|
135 |
+
* @return string The relative file path
|
136 |
+
*/
|
137 |
+
private function getRelativePath($domain, $locale)
|
138 |
+
{
|
139 |
+
return strtr($this->relativePathTemplate, array(
|
140 |
+
'%domain%' => $domain,
|
141 |
+
'%locale%' => $locale,
|
142 |
+
'%extension%' => $this->getExtension(),
|
143 |
+
));
|
144 |
+
}
|
145 |
+
}
|
vendor/symfony/translation/Dumper/IcuResFileDumper.php
ADDED
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* IcuResDumper generates an ICU ResourceBundle formatted string representation of a message catalogue.
|
18 |
+
*
|
19 |
+
* @author Stealth35
|
20 |
+
*/
|
21 |
+
class IcuResFileDumper extends FileDumper
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* {@inheritdoc}
|
25 |
+
*/
|
26 |
+
protected $relativePathTemplate = '%domain%/%locale%.%extension%';
|
27 |
+
|
28 |
+
/**
|
29 |
+
* {@inheritdoc}
|
30 |
+
*/
|
31 |
+
public function format(MessageCatalogue $messages, $domain = 'messages')
|
32 |
+
{
|
33 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.', E_USER_DEPRECATED);
|
34 |
+
|
35 |
+
return $this->formatCatalogue($messages, $domain);
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* {@inheritdoc}
|
40 |
+
*/
|
41 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
42 |
+
{
|
43 |
+
$data = $indexes = $resources = '';
|
44 |
+
|
45 |
+
foreach ($messages->all($domain) as $source => $target) {
|
46 |
+
$indexes .= pack('v', \strlen($data) + 28);
|
47 |
+
$data .= $source."\0";
|
48 |
+
}
|
49 |
+
|
50 |
+
$data .= $this->writePadding($data);
|
51 |
+
|
52 |
+
$keyTop = $this->getPosition($data);
|
53 |
+
|
54 |
+
foreach ($messages->all($domain) as $source => $target) {
|
55 |
+
$resources .= pack('V', $this->getPosition($data));
|
56 |
+
|
57 |
+
$data .= pack('V', \strlen($target))
|
58 |
+
.mb_convert_encoding($target."\0", 'UTF-16LE', 'UTF-8')
|
59 |
+
.$this->writePadding($data)
|
60 |
+
;
|
61 |
+
}
|
62 |
+
|
63 |
+
$resOffset = $this->getPosition($data);
|
64 |
+
|
65 |
+
$data .= pack('v', \count($messages->all($domain)))
|
66 |
+
.$indexes
|
67 |
+
.$this->writePadding($data)
|
68 |
+
.$resources
|
69 |
+
;
|
70 |
+
|
71 |
+
$bundleTop = $this->getPosition($data);
|
72 |
+
|
73 |
+
$root = pack('V7',
|
74 |
+
$resOffset + (2 << 28), // Resource Offset + Resource Type
|
75 |
+
6, // Index length
|
76 |
+
$keyTop, // Index keys top
|
77 |
+
$bundleTop, // Index resources top
|
78 |
+
$bundleTop, // Index bundle top
|
79 |
+
\count($messages->all($domain)), // Index max table length
|
80 |
+
0 // Index attributes
|
81 |
+
);
|
82 |
+
|
83 |
+
$header = pack('vC2v4C12@32',
|
84 |
+
32, // Header size
|
85 |
+
0xDA, 0x27, // Magic number 1 and 2
|
86 |
+
20, 0, 0, 2, // Rest of the header, ..., Size of a char
|
87 |
+
0x52, 0x65, 0x73, 0x42, // Data format identifier
|
88 |
+
1, 2, 0, 0, // Data version
|
89 |
+
1, 4, 0, 0 // Unicode version
|
90 |
+
);
|
91 |
+
|
92 |
+
return $header.$root.$data;
|
93 |
+
}
|
94 |
+
|
95 |
+
private function writePadding($data)
|
96 |
+
{
|
97 |
+
$padding = \strlen($data) % 4;
|
98 |
+
|
99 |
+
if ($padding) {
|
100 |
+
return str_repeat("\xAA", 4 - $padding);
|
101 |
+
}
|
102 |
+
}
|
103 |
+
|
104 |
+
private function getPosition($data)
|
105 |
+
{
|
106 |
+
return (\strlen($data) + 28) / 4;
|
107 |
+
}
|
108 |
+
|
109 |
+
/**
|
110 |
+
* {@inheritdoc}
|
111 |
+
*/
|
112 |
+
protected function getExtension()
|
113 |
+
{
|
114 |
+
return 'res';
|
115 |
+
}
|
116 |
+
}
|
vendor/symfony/translation/Dumper/IniFileDumper.php
ADDED
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* IniFileDumper generates an ini formatted string representation of a message catalogue.
|
18 |
+
*
|
19 |
+
* @author Stealth35
|
20 |
+
*/
|
21 |
+
class IniFileDumper extends FileDumper
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* {@inheritdoc}
|
25 |
+
*/
|
26 |
+
public function format(MessageCatalogue $messages, $domain = 'messages')
|
27 |
+
{
|
28 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.', E_USER_DEPRECATED);
|
29 |
+
|
30 |
+
return $this->formatCatalogue($messages, $domain);
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* {@inheritdoc}
|
35 |
+
*/
|
36 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
37 |
+
{
|
38 |
+
$output = '';
|
39 |
+
|
40 |
+
foreach ($messages->all($domain) as $source => $target) {
|
41 |
+
$escapeTarget = str_replace('"', '\"', $target);
|
42 |
+
$output .= $source.'="'.$escapeTarget."\"\n";
|
43 |
+
}
|
44 |
+
|
45 |
+
return $output;
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* {@inheritdoc}
|
50 |
+
*/
|
51 |
+
protected function getExtension()
|
52 |
+
{
|
53 |
+
return 'ini';
|
54 |
+
}
|
55 |
+
}
|
vendor/symfony/translation/Dumper/JsonFileDumper.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* JsonFileDumper generates an json formatted string representation of a message catalogue.
|
18 |
+
*
|
19 |
+
* @author singles
|
20 |
+
*/
|
21 |
+
class JsonFileDumper extends FileDumper
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* {@inheritdoc}
|
25 |
+
*/
|
26 |
+
public function format(MessageCatalogue $messages, $domain = 'messages')
|
27 |
+
{
|
28 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.', E_USER_DEPRECATED);
|
29 |
+
|
30 |
+
return $this->formatCatalogue($messages, $domain);
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* {@inheritdoc}
|
35 |
+
*/
|
36 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
37 |
+
{
|
38 |
+
if (isset($options['json_encoding'])) {
|
39 |
+
$flags = $options['json_encoding'];
|
40 |
+
} else {
|
41 |
+
$flags = \defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0;
|
42 |
+
}
|
43 |
+
|
44 |
+
return json_encode($messages->all($domain), $flags);
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* {@inheritdoc}
|
49 |
+
*/
|
50 |
+
protected function getExtension()
|
51 |
+
{
|
52 |
+
return 'json';
|
53 |
+
}
|
54 |
+
}
|
vendor/symfony/translation/Dumper/MoFileDumper.php
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\Loader\MoFileLoader;
|
15 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* MoFileDumper generates a gettext formatted string representation of a message catalogue.
|
19 |
+
*
|
20 |
+
* @author Stealth35
|
21 |
+
*/
|
22 |
+
class MoFileDumper extends FileDumper
|
23 |
+
{
|
24 |
+
/**
|
25 |
+
* {@inheritdoc}
|
26 |
+
*/
|
27 |
+
public function format(MessageCatalogue $messages, $domain = 'messages')
|
28 |
+
{
|
29 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.', E_USER_DEPRECATED);
|
30 |
+
|
31 |
+
return $this->formatCatalogue($messages, $domain);
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* {@inheritdoc}
|
36 |
+
*/
|
37 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
38 |
+
{
|
39 |
+
$sources = $targets = $sourceOffsets = $targetOffsets = '';
|
40 |
+
$offsets = array();
|
41 |
+
$size = 0;
|
42 |
+
|
43 |
+
foreach ($messages->all($domain) as $source => $target) {
|
44 |
+
$offsets[] = array_map('strlen', array($sources, $source, $targets, $target));
|
45 |
+
$sources .= "\0".$source;
|
46 |
+
$targets .= "\0".$target;
|
47 |
+
++$size;
|
48 |
+
}
|
49 |
+
|
50 |
+
$header = array(
|
51 |
+
'magicNumber' => MoFileLoader::MO_LITTLE_ENDIAN_MAGIC,
|
52 |
+
'formatRevision' => 0,
|
53 |
+
'count' => $size,
|
54 |
+
'offsetId' => MoFileLoader::MO_HEADER_SIZE,
|
55 |
+
'offsetTranslated' => MoFileLoader::MO_HEADER_SIZE + (8 * $size),
|
56 |
+
'sizeHashes' => 0,
|
57 |
+
'offsetHashes' => MoFileLoader::MO_HEADER_SIZE + (16 * $size),
|
58 |
+
);
|
59 |
+
|
60 |
+
$sourcesSize = \strlen($sources);
|
61 |
+
$sourcesStart = $header['offsetHashes'] + 1;
|
62 |
+
|
63 |
+
foreach ($offsets as $offset) {
|
64 |
+
$sourceOffsets .= $this->writeLong($offset[1])
|
65 |
+
.$this->writeLong($offset[0] + $sourcesStart);
|
66 |
+
$targetOffsets .= $this->writeLong($offset[3])
|
67 |
+
.$this->writeLong($offset[2] + $sourcesStart + $sourcesSize);
|
68 |
+
}
|
69 |
+
|
70 |
+
$output = implode('', array_map(array($this, 'writeLong'), $header))
|
71 |
+
.$sourceOffsets
|
72 |
+
.$targetOffsets
|
73 |
+
.$sources
|
74 |
+
.$targets
|
75 |
+
;
|
76 |
+
|
77 |
+
return $output;
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* {@inheritdoc}
|
82 |
+
*/
|
83 |
+
protected function getExtension()
|
84 |
+
{
|
85 |
+
return 'mo';
|
86 |
+
}
|
87 |
+
|
88 |
+
private function writeLong($str)
|
89 |
+
{
|
90 |
+
return pack('V*', $str);
|
91 |
+
}
|
92 |
+
}
|
vendor/symfony/translation/Dumper/PhpFileDumper.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* PhpFileDumper generates PHP files from a message catalogue.
|
18 |
+
*
|
19 |
+
* @author Michel Salib <michelsalib@hotmail.com>
|
20 |
+
*/
|
21 |
+
class PhpFileDumper extends FileDumper
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* {@inheritdoc}
|
25 |
+
*/
|
26 |
+
protected function format(MessageCatalogue $messages, $domain)
|
27 |
+
{
|
28 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.', E_USER_DEPRECATED);
|
29 |
+
|
30 |
+
return $this->formatCatalogue($messages, $domain);
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* {@inheritdoc}
|
35 |
+
*/
|
36 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
37 |
+
{
|
38 |
+
return "<?php\n\nreturn ".var_export($messages->all($domain), true).";\n";
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* {@inheritdoc}
|
43 |
+
*/
|
44 |
+
protected function getExtension()
|
45 |
+
{
|
46 |
+
return 'php';
|
47 |
+
}
|
48 |
+
}
|
vendor/symfony/translation/Dumper/PoFileDumper.php
ADDED
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* PoFileDumper generates a gettext formatted string representation of a message catalogue.
|
18 |
+
*
|
19 |
+
* @author Stealth35
|
20 |
+
*/
|
21 |
+
class PoFileDumper extends FileDumper
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* {@inheritdoc}
|
25 |
+
*/
|
26 |
+
public function format(MessageCatalogue $messages, $domain = 'messages')
|
27 |
+
{
|
28 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.', E_USER_DEPRECATED);
|
29 |
+
|
30 |
+
return $this->formatCatalogue($messages, $domain);
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* {@inheritdoc}
|
35 |
+
*/
|
36 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
37 |
+
{
|
38 |
+
$output = 'msgid ""'."\n";
|
39 |
+
$output .= 'msgstr ""'."\n";
|
40 |
+
$output .= '"Content-Type: text/plain; charset=UTF-8\n"'."\n";
|
41 |
+
$output .= '"Content-Transfer-Encoding: 8bit\n"'."\n";
|
42 |
+
$output .= '"Language: '.$messages->getLocale().'\n"'."\n";
|
43 |
+
$output .= "\n";
|
44 |
+
|
45 |
+
$newLine = false;
|
46 |
+
foreach ($messages->all($domain) as $source => $target) {
|
47 |
+
if ($newLine) {
|
48 |
+
$output .= "\n";
|
49 |
+
} else {
|
50 |
+
$newLine = true;
|
51 |
+
}
|
52 |
+
$output .= sprintf('msgid "%s"'."\n", $this->escape($source));
|
53 |
+
$output .= sprintf('msgstr "%s"', $this->escape($target));
|
54 |
+
}
|
55 |
+
|
56 |
+
return $output;
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* {@inheritdoc}
|
61 |
+
*/
|
62 |
+
protected function getExtension()
|
63 |
+
{
|
64 |
+
return 'po';
|
65 |
+
}
|
66 |
+
|
67 |
+
private function escape($str)
|
68 |
+
{
|
69 |
+
return addcslashes($str, "\0..\37\42\134");
|
70 |
+
}
|
71 |
+
}
|
vendor/symfony/translation/Dumper/QtFileDumper.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* QtFileDumper generates ts files from a message catalogue.
|
18 |
+
*
|
19 |
+
* @author Benjamin Eberlei <kontakt@beberlei.de>
|
20 |
+
*/
|
21 |
+
class QtFileDumper extends FileDumper
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* {@inheritdoc}
|
25 |
+
*/
|
26 |
+
public function format(MessageCatalogue $messages, $domain)
|
27 |
+
{
|
28 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.', E_USER_DEPRECATED);
|
29 |
+
|
30 |
+
return $this->formatCatalogue($messages, $domain);
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* {@inheritdoc}
|
35 |
+
*/
|
36 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
37 |
+
{
|
38 |
+
$dom = new \DOMDocument('1.0', 'utf-8');
|
39 |
+
$dom->formatOutput = true;
|
40 |
+
$ts = $dom->appendChild($dom->createElement('TS'));
|
41 |
+
$context = $ts->appendChild($dom->createElement('context'));
|
42 |
+
$context->appendChild($dom->createElement('name', $domain));
|
43 |
+
|
44 |
+
foreach ($messages->all($domain) as $source => $target) {
|
45 |
+
$message = $context->appendChild($dom->createElement('message'));
|
46 |
+
$message->appendChild($dom->createElement('source', $source));
|
47 |
+
$message->appendChild($dom->createElement('translation', $target));
|
48 |
+
}
|
49 |
+
|
50 |
+
return $dom->saveXML();
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* {@inheritdoc}
|
55 |
+
*/
|
56 |
+
protected function getExtension()
|
57 |
+
{
|
58 |
+
return 'ts';
|
59 |
+
}
|
60 |
+
}
|
vendor/symfony/translation/Dumper/XliffFileDumper.php
ADDED
@@ -0,0 +1,193 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* XliffFileDumper generates xliff files from a message catalogue.
|
18 |
+
*
|
19 |
+
* @author Michel Salib <michelsalib@hotmail.com>
|
20 |
+
*/
|
21 |
+
class XliffFileDumper extends FileDumper
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* {@inheritdoc}
|
25 |
+
*/
|
26 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
27 |
+
{
|
28 |
+
$xliffVersion = '1.2';
|
29 |
+
if (array_key_exists('xliff_version', $options)) {
|
30 |
+
$xliffVersion = $options['xliff_version'];
|
31 |
+
}
|
32 |
+
|
33 |
+
if (array_key_exists('default_locale', $options)) {
|
34 |
+
$defaultLocale = $options['default_locale'];
|
35 |
+
} else {
|
36 |
+
$defaultLocale = \Locale::getDefault();
|
37 |
+
}
|
38 |
+
|
39 |
+
if ('1.2' === $xliffVersion) {
|
40 |
+
return $this->dumpXliff1($defaultLocale, $messages, $domain, $options);
|
41 |
+
}
|
42 |
+
if ('2.0' === $xliffVersion) {
|
43 |
+
return $this->dumpXliff2($defaultLocale, $messages, $domain, $options);
|
44 |
+
}
|
45 |
+
|
46 |
+
throw new \InvalidArgumentException(sprintf('No support implemented for dumping XLIFF version "%s".', $xliffVersion));
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* {@inheritdoc}
|
51 |
+
*/
|
52 |
+
protected function format(MessageCatalogue $messages, $domain)
|
53 |
+
{
|
54 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.', E_USER_DEPRECATED);
|
55 |
+
|
56 |
+
return $this->formatCatalogue($messages, $domain);
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* {@inheritdoc}
|
61 |
+
*/
|
62 |
+
protected function getExtension()
|
63 |
+
{
|
64 |
+
return 'xlf';
|
65 |
+
}
|
66 |
+
|
67 |
+
private function dumpXliff1($defaultLocale, MessageCatalogue $messages, $domain, array $options = array())
|
68 |
+
{
|
69 |
+
$toolInfo = array('tool-id' => 'symfony', 'tool-name' => 'Symfony');
|
70 |
+
if (array_key_exists('tool_info', $options)) {
|
71 |
+
$toolInfo = array_merge($toolInfo, $options['tool_info']);
|
72 |
+
}
|
73 |
+
|
74 |
+
$dom = new \DOMDocument('1.0', 'utf-8');
|
75 |
+
$dom->formatOutput = true;
|
76 |
+
|
77 |
+
$xliff = $dom->appendChild($dom->createElement('xliff'));
|
78 |
+
$xliff->setAttribute('version', '1.2');
|
79 |
+
$xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:1.2');
|
80 |
+
|
81 |
+
$xliffFile = $xliff->appendChild($dom->createElement('file'));
|
82 |
+
$xliffFile->setAttribute('source-language', str_replace('_', '-', $defaultLocale));
|
83 |
+
$xliffFile->setAttribute('target-language', str_replace('_', '-', $messages->getLocale()));
|
84 |
+
$xliffFile->setAttribute('datatype', 'plaintext');
|
85 |
+
$xliffFile->setAttribute('original', 'file.ext');
|
86 |
+
|
87 |
+
$xliffHead = $xliffFile->appendChild($dom->createElement('header'));
|
88 |
+
$xliffTool = $xliffHead->appendChild($dom->createElement('tool'));
|
89 |
+
foreach ($toolInfo as $id => $value) {
|
90 |
+
$xliffTool->setAttribute($id, $value);
|
91 |
+
}
|
92 |
+
|
93 |
+
$xliffBody = $xliffFile->appendChild($dom->createElement('body'));
|
94 |
+
foreach ($messages->all($domain) as $source => $target) {
|
95 |
+
$translation = $dom->createElement('trans-unit');
|
96 |
+
|
97 |
+
$translation->setAttribute('id', md5($source));
|
98 |
+
$translation->setAttribute('resname', $source);
|
99 |
+
|
100 |
+
$s = $translation->appendChild($dom->createElement('source'));
|
101 |
+
$s->appendChild($dom->createTextNode($source));
|
102 |
+
|
103 |
+
// Does the target contain characters requiring a CDATA section?
|
104 |
+
$text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target);
|
105 |
+
|
106 |
+
$targetElement = $dom->createElement('target');
|
107 |
+
$metadata = $messages->getMetadata($source, $domain);
|
108 |
+
if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) {
|
109 |
+
foreach ($metadata['target-attributes'] as $name => $value) {
|
110 |
+
$targetElement->setAttribute($name, $value);
|
111 |
+
}
|
112 |
+
}
|
113 |
+
$t = $translation->appendChild($targetElement);
|
114 |
+
$t->appendChild($text);
|
115 |
+
|
116 |
+
if ($this->hasMetadataArrayInfo('notes', $metadata)) {
|
117 |
+
foreach ($metadata['notes'] as $note) {
|
118 |
+
if (!isset($note['content'])) {
|
119 |
+
continue;
|
120 |
+
}
|
121 |
+
|
122 |
+
$n = $translation->appendChild($dom->createElement('note'));
|
123 |
+
$n->appendChild($dom->createTextNode($note['content']));
|
124 |
+
|
125 |
+
if (isset($note['priority'])) {
|
126 |
+
$n->setAttribute('priority', $note['priority']);
|
127 |
+
}
|
128 |
+
|
129 |
+
if (isset($note['from'])) {
|
130 |
+
$n->setAttribute('from', $note['from']);
|
131 |
+
}
|
132 |
+
}
|
133 |
+
}
|
134 |
+
|
135 |
+
$xliffBody->appendChild($translation);
|
136 |
+
}
|
137 |
+
|
138 |
+
return $dom->saveXML();
|
139 |
+
}
|
140 |
+
|
141 |
+
private function dumpXliff2($defaultLocale, MessageCatalogue $messages, $domain, array $options = array())
|
142 |
+
{
|
143 |
+
$dom = new \DOMDocument('1.0', 'utf-8');
|
144 |
+
$dom->formatOutput = true;
|
145 |
+
|
146 |
+
$xliff = $dom->appendChild($dom->createElement('xliff'));
|
147 |
+
$xliff->setAttribute('xmlns', 'urn:oasis:names:tc:xliff:document:2.0');
|
148 |
+
$xliff->setAttribute('version', '2.0');
|
149 |
+
$xliff->setAttribute('srcLang', str_replace('_', '-', $defaultLocale));
|
150 |
+
$xliff->setAttribute('trgLang', str_replace('_', '-', $messages->getLocale()));
|
151 |
+
|
152 |
+
$xliffFile = $xliff->appendChild($dom->createElement('file'));
|
153 |
+
$xliffFile->setAttribute('id', $domain.'.'.$messages->getLocale());
|
154 |
+
|
155 |
+
foreach ($messages->all($domain) as $source => $target) {
|
156 |
+
$translation = $dom->createElement('unit');
|
157 |
+
$translation->setAttribute('id', md5($source));
|
158 |
+
|
159 |
+
$segment = $translation->appendChild($dom->createElement('segment'));
|
160 |
+
|
161 |
+
$s = $segment->appendChild($dom->createElement('source'));
|
162 |
+
$s->appendChild($dom->createTextNode($source));
|
163 |
+
|
164 |
+
// Does the target contain characters requiring a CDATA section?
|
165 |
+
$text = 1 === preg_match('/[&<>]/', $target) ? $dom->createCDATASection($target) : $dom->createTextNode($target);
|
166 |
+
|
167 |
+
$targetElement = $dom->createElement('target');
|
168 |
+
$metadata = $messages->getMetadata($source, $domain);
|
169 |
+
if ($this->hasMetadataArrayInfo('target-attributes', $metadata)) {
|
170 |
+
foreach ($metadata['target-attributes'] as $name => $value) {
|
171 |
+
$targetElement->setAttribute($name, $value);
|
172 |
+
}
|
173 |
+
}
|
174 |
+
$t = $segment->appendChild($targetElement);
|
175 |
+
$t->appendChild($text);
|
176 |
+
|
177 |
+
$xliffFile->appendChild($translation);
|
178 |
+
}
|
179 |
+
|
180 |
+
return $dom->saveXML();
|
181 |
+
}
|
182 |
+
|
183 |
+
/**
|
184 |
+
* @param string $key
|
185 |
+
* @param array|null $metadata
|
186 |
+
*
|
187 |
+
* @return bool
|
188 |
+
*/
|
189 |
+
private function hasMetadataArrayInfo($key, $metadata = null)
|
190 |
+
{
|
191 |
+
return null !== $metadata && array_key_exists($key, $metadata) && ($metadata[$key] instanceof \Traversable || \is_array($metadata[$key]));
|
192 |
+
}
|
193 |
+
}
|
vendor/symfony/translation/Dumper/YamlFileDumper.php
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Dumper;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
use Symfony\Component\Translation\Util\ArrayConverter;
|
16 |
+
use Symfony\Component\Yaml\Yaml;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* YamlFileDumper generates yaml files from a message catalogue.
|
20 |
+
*
|
21 |
+
* @author Michel Salib <michelsalib@hotmail.com>
|
22 |
+
*/
|
23 |
+
class YamlFileDumper extends FileDumper
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* {@inheritdoc}
|
27 |
+
*/
|
28 |
+
public function formatCatalogue(MessageCatalogue $messages, $domain, array $options = array())
|
29 |
+
{
|
30 |
+
if (!class_exists('Symfony\Component\Yaml\Yaml')) {
|
31 |
+
throw new \LogicException('Dumping translations in the YAML format requires the Symfony Yaml component.');
|
32 |
+
}
|
33 |
+
|
34 |
+
$data = $messages->all($domain);
|
35 |
+
|
36 |
+
if (isset($options['as_tree']) && $options['as_tree']) {
|
37 |
+
$data = ArrayConverter::expandToTree($data);
|
38 |
+
}
|
39 |
+
|
40 |
+
if (isset($options['inline']) && ($inline = (int) $options['inline']) > 0) {
|
41 |
+
return Yaml::dump($data, $inline);
|
42 |
+
}
|
43 |
+
|
44 |
+
return Yaml::dump($data);
|
45 |
+
}
|
46 |
+
|
47 |
+
/**
|
48 |
+
* {@inheritdoc}
|
49 |
+
*/
|
50 |
+
protected function format(MessageCatalogue $messages, $domain)
|
51 |
+
{
|
52 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use the formatCatalogue() method instead.', E_USER_DEPRECATED);
|
53 |
+
|
54 |
+
return $this->formatCatalogue($messages, $domain);
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* {@inheritdoc}
|
59 |
+
*/
|
60 |
+
protected function getExtension()
|
61 |
+
{
|
62 |
+
return 'yml';
|
63 |
+
}
|
64 |
+
}
|
vendor/symfony/translation/Exception/ExceptionInterface.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Exception interface for all exceptions thrown by the component.
|
16 |
+
*
|
17 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
+
*/
|
19 |
+
interface ExceptionInterface
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/translation/Exception/InvalidResourceException.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Thrown when a resource cannot be loaded.
|
16 |
+
*
|
17 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
+
*/
|
19 |
+
class InvalidResourceException extends \InvalidArgumentException implements ExceptionInterface
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/translation/Exception/NotFoundResourceException.php
ADDED
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Exception;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Thrown when a resource does not exist.
|
16 |
+
*
|
17 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
+
*/
|
19 |
+
class NotFoundResourceException extends \InvalidArgumentException implements ExceptionInterface
|
20 |
+
{
|
21 |
+
}
|
vendor/symfony/translation/Extractor/AbstractFileExtractor.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Extractor;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Base class used by classes that extract translation messages from files.
|
16 |
+
*
|
17 |
+
* @author Marcos D. Sánchez <marcosdsanchez@gmail.com>
|
18 |
+
*/
|
19 |
+
abstract class AbstractFileExtractor
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* @param string|array $resource Files, a file or a directory
|
23 |
+
*
|
24 |
+
* @return array
|
25 |
+
*/
|
26 |
+
protected function extractFiles($resource)
|
27 |
+
{
|
28 |
+
if (\is_array($resource) || $resource instanceof \Traversable) {
|
29 |
+
$files = array();
|
30 |
+
foreach ($resource as $file) {
|
31 |
+
if ($this->canBeExtracted($file)) {
|
32 |
+
$files[] = $this->toSplFileInfo($file);
|
33 |
+
}
|
34 |
+
}
|
35 |
+
} elseif (is_file($resource)) {
|
36 |
+
$files = $this->canBeExtracted($resource) ? array($this->toSplFileInfo($resource)) : array();
|
37 |
+
} else {
|
38 |
+
$files = $this->extractFromDirectory($resource);
|
39 |
+
}
|
40 |
+
|
41 |
+
return $files;
|
42 |
+
}
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @param string $file
|
46 |
+
*
|
47 |
+
* @return \SplFileInfo
|
48 |
+
*/
|
49 |
+
private function toSplFileInfo($file)
|
50 |
+
{
|
51 |
+
return ($file instanceof \SplFileInfo) ? $file : new \SplFileInfo($file);
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* @param string $file
|
56 |
+
*
|
57 |
+
* @return bool
|
58 |
+
*
|
59 |
+
* @throws \InvalidArgumentException
|
60 |
+
*/
|
61 |
+
protected function isFile($file)
|
62 |
+
{
|
63 |
+
if (!is_file($file)) {
|
64 |
+
throw new \InvalidArgumentException(sprintf('The "%s" file does not exist.', $file));
|
65 |
+
}
|
66 |
+
|
67 |
+
return true;
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* @param string $file
|
72 |
+
*
|
73 |
+
* @return bool
|
74 |
+
*/
|
75 |
+
abstract protected function canBeExtracted($file);
|
76 |
+
|
77 |
+
/**
|
78 |
+
* @param string|array $resource Files, a file or a directory
|
79 |
+
*
|
80 |
+
* @return array files to be extracted
|
81 |
+
*/
|
82 |
+
abstract protected function extractFromDirectory($resource);
|
83 |
+
}
|
vendor/symfony/translation/Extractor/ChainExtractor.php
ADDED
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Extractor;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* ChainExtractor extracts translation messages from template files.
|
18 |
+
*
|
19 |
+
* @author Michel Salib <michelsalib@hotmail.com>
|
20 |
+
*/
|
21 |
+
class ChainExtractor implements ExtractorInterface
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* The extractors.
|
25 |
+
*
|
26 |
+
* @var ExtractorInterface[]
|
27 |
+
*/
|
28 |
+
private $extractors = array();
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Adds a loader to the translation extractor.
|
32 |
+
*
|
33 |
+
* @param string $format The format of the loader
|
34 |
+
* @param ExtractorInterface $extractor The loader
|
35 |
+
*/
|
36 |
+
public function addExtractor($format, ExtractorInterface $extractor)
|
37 |
+
{
|
38 |
+
$this->extractors[$format] = $extractor;
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* {@inheritdoc}
|
43 |
+
*/
|
44 |
+
public function setPrefix($prefix)
|
45 |
+
{
|
46 |
+
foreach ($this->extractors as $extractor) {
|
47 |
+
$extractor->setPrefix($prefix);
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* {@inheritdoc}
|
53 |
+
*/
|
54 |
+
public function extract($directory, MessageCatalogue $catalogue)
|
55 |
+
{
|
56 |
+
foreach ($this->extractors as $extractor) {
|
57 |
+
$extractor->extract($directory, $catalogue);
|
58 |
+
}
|
59 |
+
}
|
60 |
+
}
|
vendor/symfony/translation/Extractor/ExtractorInterface.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Extractor;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Extracts translation messages from a directory or files to the catalogue.
|
18 |
+
* New found messages are injected to the catalogue using the prefix.
|
19 |
+
*
|
20 |
+
* @author Michel Salib <michelsalib@hotmail.com>
|
21 |
+
*/
|
22 |
+
interface ExtractorInterface
|
23 |
+
{
|
24 |
+
/**
|
25 |
+
* Extracts translation messages from files, a file or a directory to the catalogue.
|
26 |
+
*
|
27 |
+
* @param string|array $resource Files, a file or a directory
|
28 |
+
* @param MessageCatalogue $catalogue The catalogue
|
29 |
+
*/
|
30 |
+
public function extract($resource, MessageCatalogue $catalogue);
|
31 |
+
|
32 |
+
/**
|
33 |
+
* Sets the prefix that should be used for new found messages.
|
34 |
+
*
|
35 |
+
* @param string $prefix The prefix
|
36 |
+
*/
|
37 |
+
public function setPrefix($prefix);
|
38 |
+
}
|
vendor/symfony/translation/IdentityTranslator.php
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* IdentityTranslator does not translate anything.
|
16 |
+
*
|
17 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
+
*/
|
19 |
+
class IdentityTranslator implements TranslatorInterface
|
20 |
+
{
|
21 |
+
private $selector;
|
22 |
+
private $locale;
|
23 |
+
|
24 |
+
/**
|
25 |
+
* @param MessageSelector|null $selector The message selector for pluralization
|
26 |
+
*/
|
27 |
+
public function __construct(MessageSelector $selector = null)
|
28 |
+
{
|
29 |
+
$this->selector = $selector ?: new MessageSelector();
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* {@inheritdoc}
|
34 |
+
*/
|
35 |
+
public function setLocale($locale)
|
36 |
+
{
|
37 |
+
$this->locale = $locale;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* {@inheritdoc}
|
42 |
+
*/
|
43 |
+
public function getLocale()
|
44 |
+
{
|
45 |
+
return $this->locale ?: \Locale::getDefault();
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* {@inheritdoc}
|
50 |
+
*/
|
51 |
+
public function trans($id, array $parameters = array(), $domain = null, $locale = null)
|
52 |
+
{
|
53 |
+
return strtr((string) $id, $parameters);
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* {@inheritdoc}
|
58 |
+
*/
|
59 |
+
public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
|
60 |
+
{
|
61 |
+
return strtr($this->selector->choose((string) $id, (int) $number, $locale ?: $this->getLocale()), $parameters);
|
62 |
+
}
|
63 |
+
}
|
vendor/symfony/translation/Interval.php
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Tests if a given number belongs to a given math interval.
|
16 |
+
*
|
17 |
+
* An interval can represent a finite set of numbers:
|
18 |
+
*
|
19 |
+
* {1,2,3,4}
|
20 |
+
*
|
21 |
+
* An interval can represent numbers between two numbers:
|
22 |
+
*
|
23 |
+
* [1, +Inf]
|
24 |
+
* ]-1,2[
|
25 |
+
*
|
26 |
+
* The left delimiter can be [ (inclusive) or ] (exclusive).
|
27 |
+
* The right delimiter can be [ (exclusive) or ] (inclusive).
|
28 |
+
* Beside numbers, you can use -Inf and +Inf for the infinite.
|
29 |
+
*
|
30 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
31 |
+
*
|
32 |
+
* @see http://en.wikipedia.org/wiki/Interval_%28mathematics%29#The_ISO_notation
|
33 |
+
*/
|
34 |
+
class Interval
|
35 |
+
{
|
36 |
+
/**
|
37 |
+
* Tests if the given number is in the math interval.
|
38 |
+
*
|
39 |
+
* @param int $number A number
|
40 |
+
* @param string $interval An interval
|
41 |
+
*
|
42 |
+
* @return bool
|
43 |
+
*
|
44 |
+
* @throws \InvalidArgumentException
|
45 |
+
*/
|
46 |
+
public static function test($number, $interval)
|
47 |
+
{
|
48 |
+
$interval = trim($interval);
|
49 |
+
|
50 |
+
if (!preg_match('/^'.self::getIntervalRegexp().'$/x', $interval, $matches)) {
|
51 |
+
throw new \InvalidArgumentException(sprintf('"%s" is not a valid interval.', $interval));
|
52 |
+
}
|
53 |
+
|
54 |
+
if ($matches[1]) {
|
55 |
+
foreach (explode(',', $matches[2]) as $n) {
|
56 |
+
if ($number == $n) {
|
57 |
+
return true;
|
58 |
+
}
|
59 |
+
}
|
60 |
+
} else {
|
61 |
+
$leftNumber = self::convertNumber($matches['left']);
|
62 |
+
$rightNumber = self::convertNumber($matches['right']);
|
63 |
+
|
64 |
+
return
|
65 |
+
('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber)
|
66 |
+
&& (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber)
|
67 |
+
;
|
68 |
+
}
|
69 |
+
|
70 |
+
return false;
|
71 |
+
}
|
72 |
+
|
73 |
+
/**
|
74 |
+
* Returns a Regexp that matches valid intervals.
|
75 |
+
*
|
76 |
+
* @return string A Regexp (without the delimiters)
|
77 |
+
*/
|
78 |
+
public static function getIntervalRegexp()
|
79 |
+
{
|
80 |
+
return <<<EOF
|
81 |
+
({\s*
|
82 |
+
(\-?\d+(\.\d+)?[\s*,\s*\-?\d+(\.\d+)?]*)
|
83 |
+
\s*})
|
84 |
+
|
85 |
+
|
|
86 |
+
|
87 |
+
(?P<left_delimiter>[\[\]])
|
88 |
+
\s*
|
89 |
+
(?P<left>-Inf|\-?\d+(\.\d+)?)
|
90 |
+
\s*,\s*
|
91 |
+
(?P<right>\+?Inf|\-?\d+(\.\d+)?)
|
92 |
+
\s*
|
93 |
+
(?P<right_delimiter>[\[\]])
|
94 |
+
EOF;
|
95 |
+
}
|
96 |
+
|
97 |
+
private static function convertNumber($number)
|
98 |
+
{
|
99 |
+
if ('-Inf' === $number) {
|
100 |
+
return log(0);
|
101 |
+
} elseif ('+Inf' === $number || 'Inf' === $number) {
|
102 |
+
return -log(0);
|
103 |
+
}
|
104 |
+
|
105 |
+
return (float) $number;
|
106 |
+
}
|
107 |
+
}
|
vendor/symfony/translation/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
Copyright (c) 2004-2018 Fabien Potencier
|
2 |
+
|
3 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
+
of this software and associated documentation files (the "Software"), to deal
|
5 |
+
in the Software without restriction, including without limitation the rights
|
6 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7 |
+
copies of the Software, and to permit persons to whom the Software is furnished
|
8 |
+
to do so, subject to the following conditions:
|
9 |
+
|
10 |
+
The above copyright notice and this permission notice shall be included in all
|
11 |
+
copies or substantial portions of the Software.
|
12 |
+
|
13 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19 |
+
THE SOFTWARE.
|
vendor/symfony/translation/Loader/ArrayLoader.php
ADDED
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* ArrayLoader loads translations from a PHP array.
|
18 |
+
*
|
19 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
20 |
+
*/
|
21 |
+
class ArrayLoader implements LoaderInterface
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* {@inheritdoc}
|
25 |
+
*/
|
26 |
+
public function load($resource, $locale, $domain = 'messages')
|
27 |
+
{
|
28 |
+
$this->flatten($resource);
|
29 |
+
$catalogue = new MessageCatalogue($locale);
|
30 |
+
$catalogue->add($resource, $domain);
|
31 |
+
|
32 |
+
return $catalogue;
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Flattens an nested array of translations.
|
37 |
+
*
|
38 |
+
* The scheme used is:
|
39 |
+
* 'key' => array('key2' => array('key3' => 'value'))
|
40 |
+
* Becomes:
|
41 |
+
* 'key.key2.key3' => 'value'
|
42 |
+
*
|
43 |
+
* This function takes an array by reference and will modify it
|
44 |
+
*
|
45 |
+
* @param array &$messages The array that will be flattened
|
46 |
+
* @param array $subnode Current subnode being parsed, used internally for recursive calls
|
47 |
+
* @param string $path Current path being parsed, used internally for recursive calls
|
48 |
+
*/
|
49 |
+
private function flatten(array &$messages, array $subnode = null, $path = null)
|
50 |
+
{
|
51 |
+
if (null === $subnode) {
|
52 |
+
$subnode = &$messages;
|
53 |
+
}
|
54 |
+
foreach ($subnode as $key => $value) {
|
55 |
+
if (\is_array($value)) {
|
56 |
+
$nodePath = $path ? $path.'.'.$key : $key;
|
57 |
+
$this->flatten($messages, $value, $nodePath);
|
58 |
+
if (null === $path) {
|
59 |
+
unset($messages[$key]);
|
60 |
+
}
|
61 |
+
} elseif (null !== $path) {
|
62 |
+
$messages[$path.'.'.$key] = $value;
|
63 |
+
}
|
64 |
+
}
|
65 |
+
}
|
66 |
+
}
|
vendor/symfony/translation/Loader/CsvFileLoader.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\Exception\NotFoundResourceException;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* CsvFileLoader loads translations from CSV files.
|
18 |
+
*
|
19 |
+
* @author Saša Stamenković <umpirsky@gmail.com>
|
20 |
+
*/
|
21 |
+
class CsvFileLoader extends FileLoader
|
22 |
+
{
|
23 |
+
private $delimiter = ';';
|
24 |
+
private $enclosure = '"';
|
25 |
+
private $escape = '\\';
|
26 |
+
|
27 |
+
/**
|
28 |
+
* {@inheritdoc}
|
29 |
+
*/
|
30 |
+
protected function loadResource($resource)
|
31 |
+
{
|
32 |
+
$messages = array();
|
33 |
+
|
34 |
+
try {
|
35 |
+
$file = new \SplFileObject($resource, 'rb');
|
36 |
+
} catch (\RuntimeException $e) {
|
37 |
+
throw new NotFoundResourceException(sprintf('Error opening file "%s".', $resource), 0, $e);
|
38 |
+
}
|
39 |
+
|
40 |
+
$file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::SKIP_EMPTY);
|
41 |
+
$file->setCsvControl($this->delimiter, $this->enclosure, $this->escape);
|
42 |
+
|
43 |
+
foreach ($file as $data) {
|
44 |
+
if ('#' !== substr($data[0], 0, 1) && isset($data[1]) && 2 === \count($data)) {
|
45 |
+
$messages[$data[0]] = $data[1];
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
return $messages;
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Sets the delimiter, enclosure, and escape character for CSV.
|
54 |
+
*
|
55 |
+
* @param string $delimiter Delimiter character
|
56 |
+
* @param string $enclosure Enclosure character
|
57 |
+
* @param string $escape Escape character
|
58 |
+
*/
|
59 |
+
public function setCsvControl($delimiter = ';', $enclosure = '"', $escape = '\\')
|
60 |
+
{
|
61 |
+
$this->delimiter = $delimiter;
|
62 |
+
$this->enclosure = $enclosure;
|
63 |
+
$this->escape = $escape;
|
64 |
+
}
|
65 |
+
}
|
vendor/symfony/translation/Loader/FileLoader.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Config\Resource\FileResource;
|
15 |
+
use Symfony\Component\Translation\Exception\InvalidResourceException;
|
16 |
+
use Symfony\Component\Translation\Exception\NotFoundResourceException;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
|
20 |
+
*/
|
21 |
+
abstract class FileLoader extends ArrayLoader
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* {@inheritdoc}
|
25 |
+
*/
|
26 |
+
public function load($resource, $locale, $domain = 'messages')
|
27 |
+
{
|
28 |
+
if (!stream_is_local($resource)) {
|
29 |
+
throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
|
30 |
+
}
|
31 |
+
|
32 |
+
if (!file_exists($resource)) {
|
33 |
+
throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
|
34 |
+
}
|
35 |
+
|
36 |
+
$messages = $this->loadResource($resource);
|
37 |
+
|
38 |
+
// empty resource
|
39 |
+
if (null === $messages) {
|
40 |
+
$messages = array();
|
41 |
+
}
|
42 |
+
|
43 |
+
// not an array
|
44 |
+
if (!\is_array($messages)) {
|
45 |
+
throw new InvalidResourceException(sprintf('Unable to load file "%s".', $resource));
|
46 |
+
}
|
47 |
+
|
48 |
+
$catalogue = parent::load($messages, $locale, $domain);
|
49 |
+
|
50 |
+
if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
|
51 |
+
$catalogue->addResource(new FileResource($resource));
|
52 |
+
}
|
53 |
+
|
54 |
+
return $catalogue;
|
55 |
+
}
|
56 |
+
|
57 |
+
/**
|
58 |
+
* @param string $resource
|
59 |
+
*
|
60 |
+
* @return array
|
61 |
+
*
|
62 |
+
* @throws InvalidResourceException if stream content has an invalid format
|
63 |
+
*/
|
64 |
+
abstract protected function loadResource($resource);
|
65 |
+
}
|
vendor/symfony/translation/Loader/IcuDatFileLoader.php
ADDED
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Config\Resource\FileResource;
|
15 |
+
use Symfony\Component\Translation\Exception\InvalidResourceException;
|
16 |
+
use Symfony\Component\Translation\Exception\NotFoundResourceException;
|
17 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* IcuResFileLoader loads translations from a resource bundle.
|
21 |
+
*
|
22 |
+
* @author stealth35
|
23 |
+
*/
|
24 |
+
class IcuDatFileLoader extends IcuResFileLoader
|
25 |
+
{
|
26 |
+
/**
|
27 |
+
* {@inheritdoc}
|
28 |
+
*/
|
29 |
+
public function load($resource, $locale, $domain = 'messages')
|
30 |
+
{
|
31 |
+
if (!stream_is_local($resource.'.dat')) {
|
32 |
+
throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
|
33 |
+
}
|
34 |
+
|
35 |
+
if (!file_exists($resource.'.dat')) {
|
36 |
+
throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
|
37 |
+
}
|
38 |
+
|
39 |
+
try {
|
40 |
+
$rb = new \ResourceBundle($locale, $resource);
|
41 |
+
} catch (\Exception $e) {
|
42 |
+
// HHVM compatibility: constructor throws on invalid resource
|
43 |
+
$rb = null;
|
44 |
+
}
|
45 |
+
|
46 |
+
if (!$rb) {
|
47 |
+
throw new InvalidResourceException(sprintf('Cannot load resource "%s"', $resource));
|
48 |
+
} elseif (intl_is_failure($rb->getErrorCode())) {
|
49 |
+
throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode());
|
50 |
+
}
|
51 |
+
|
52 |
+
$messages = $this->flatten($rb);
|
53 |
+
$catalogue = new MessageCatalogue($locale);
|
54 |
+
$catalogue->add($messages, $domain);
|
55 |
+
|
56 |
+
if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
|
57 |
+
$catalogue->addResource(new FileResource($resource.'.dat'));
|
58 |
+
}
|
59 |
+
|
60 |
+
return $catalogue;
|
61 |
+
}
|
62 |
+
}
|
vendor/symfony/translation/Loader/IcuResFileLoader.php
ADDED
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Config\Resource\DirectoryResource;
|
15 |
+
use Symfony\Component\Translation\Exception\InvalidResourceException;
|
16 |
+
use Symfony\Component\Translation\Exception\NotFoundResourceException;
|
17 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
18 |
+
|
19 |
+
/**
|
20 |
+
* IcuResFileLoader loads translations from a resource bundle.
|
21 |
+
*
|
22 |
+
* @author stealth35
|
23 |
+
*/
|
24 |
+
class IcuResFileLoader implements LoaderInterface
|
25 |
+
{
|
26 |
+
/**
|
27 |
+
* {@inheritdoc}
|
28 |
+
*/
|
29 |
+
public function load($resource, $locale, $domain = 'messages')
|
30 |
+
{
|
31 |
+
if (!stream_is_local($resource)) {
|
32 |
+
throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
|
33 |
+
}
|
34 |
+
|
35 |
+
if (!is_dir($resource)) {
|
36 |
+
throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
|
37 |
+
}
|
38 |
+
|
39 |
+
try {
|
40 |
+
$rb = new \ResourceBundle($locale, $resource);
|
41 |
+
} catch (\Exception $e) {
|
42 |
+
// HHVM compatibility: constructor throws on invalid resource
|
43 |
+
$rb = null;
|
44 |
+
}
|
45 |
+
|
46 |
+
if (!$rb) {
|
47 |
+
throw new InvalidResourceException(sprintf('Cannot load resource "%s"', $resource));
|
48 |
+
} elseif (intl_is_failure($rb->getErrorCode())) {
|
49 |
+
throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode());
|
50 |
+
}
|
51 |
+
|
52 |
+
$messages = $this->flatten($rb);
|
53 |
+
$catalogue = new MessageCatalogue($locale);
|
54 |
+
$catalogue->add($messages, $domain);
|
55 |
+
|
56 |
+
if (class_exists('Symfony\Component\Config\Resource\DirectoryResource')) {
|
57 |
+
$catalogue->addResource(new DirectoryResource($resource));
|
58 |
+
}
|
59 |
+
|
60 |
+
return $catalogue;
|
61 |
+
}
|
62 |
+
|
63 |
+
/**
|
64 |
+
* Flattens an ResourceBundle.
|
65 |
+
*
|
66 |
+
* The scheme used is:
|
67 |
+
* key { key2 { key3 { "value" } } }
|
68 |
+
* Becomes:
|
69 |
+
* 'key.key2.key3' => 'value'
|
70 |
+
*
|
71 |
+
* This function takes an array by reference and will modify it
|
72 |
+
*
|
73 |
+
* @param \ResourceBundle $rb The ResourceBundle that will be flattened
|
74 |
+
* @param array $messages Used internally for recursive calls
|
75 |
+
* @param string $path Current path being parsed, used internally for recursive calls
|
76 |
+
*
|
77 |
+
* @return array the flattened ResourceBundle
|
78 |
+
*/
|
79 |
+
protected function flatten(\ResourceBundle $rb, array &$messages = array(), $path = null)
|
80 |
+
{
|
81 |
+
foreach ($rb as $key => $value) {
|
82 |
+
$nodePath = $path ? $path.'.'.$key : $key;
|
83 |
+
if ($value instanceof \ResourceBundle) {
|
84 |
+
$this->flatten($value, $messages, $nodePath);
|
85 |
+
} else {
|
86 |
+
$messages[$nodePath] = $value;
|
87 |
+
}
|
88 |
+
}
|
89 |
+
|
90 |
+
return $messages;
|
91 |
+
}
|
92 |
+
}
|
vendor/symfony/translation/Loader/IniFileLoader.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* IniFileLoader loads translations from an ini file.
|
16 |
+
*
|
17 |
+
* @author stealth35
|
18 |
+
*/
|
19 |
+
class IniFileLoader extends FileLoader
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* {@inheritdoc}
|
23 |
+
*/
|
24 |
+
protected function loadResource($resource)
|
25 |
+
{
|
26 |
+
return parse_ini_file($resource, true);
|
27 |
+
}
|
28 |
+
}
|
vendor/symfony/translation/Loader/JsonFileLoader.php
ADDED
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\Exception\InvalidResourceException;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* JsonFileLoader loads translations from an json file.
|
18 |
+
*
|
19 |
+
* @author singles
|
20 |
+
*/
|
21 |
+
class JsonFileLoader extends FileLoader
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* {@inheritdoc}
|
25 |
+
*/
|
26 |
+
protected function loadResource($resource)
|
27 |
+
{
|
28 |
+
$messages = array();
|
29 |
+
if ($data = file_get_contents($resource)) {
|
30 |
+
$messages = json_decode($data, true);
|
31 |
+
|
32 |
+
if (0 < $errorCode = json_last_error()) {
|
33 |
+
throw new InvalidResourceException(sprintf('Error parsing JSON - %s', $this->getJSONErrorMessage($errorCode)));
|
34 |
+
}
|
35 |
+
}
|
36 |
+
|
37 |
+
return $messages;
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Translates JSON_ERROR_* constant into meaningful message.
|
42 |
+
*
|
43 |
+
* @param int $errorCode Error code returned by json_last_error() call
|
44 |
+
*
|
45 |
+
* @return string Message string
|
46 |
+
*/
|
47 |
+
private function getJSONErrorMessage($errorCode)
|
48 |
+
{
|
49 |
+
switch ($errorCode) {
|
50 |
+
case JSON_ERROR_DEPTH:
|
51 |
+
return 'Maximum stack depth exceeded';
|
52 |
+
case JSON_ERROR_STATE_MISMATCH:
|
53 |
+
return 'Underflow or the modes mismatch';
|
54 |
+
case JSON_ERROR_CTRL_CHAR:
|
55 |
+
return 'Unexpected control character found';
|
56 |
+
case JSON_ERROR_SYNTAX:
|
57 |
+
return 'Syntax error, malformed JSON';
|
58 |
+
case JSON_ERROR_UTF8:
|
59 |
+
return 'Malformed UTF-8 characters, possibly incorrectly encoded';
|
60 |
+
default:
|
61 |
+
return 'Unknown error';
|
62 |
+
}
|
63 |
+
}
|
64 |
+
}
|
vendor/symfony/translation/Loader/LoaderInterface.php
ADDED
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\Exception\InvalidResourceException;
|
15 |
+
use Symfony\Component\Translation\Exception\NotFoundResourceException;
|
16 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* LoaderInterface is the interface implemented by all translation loaders.
|
20 |
+
*
|
21 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
22 |
+
*/
|
23 |
+
interface LoaderInterface
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* Loads a locale.
|
27 |
+
*
|
28 |
+
* @param mixed $resource A resource
|
29 |
+
* @param string $locale A locale
|
30 |
+
* @param string $domain The domain
|
31 |
+
*
|
32 |
+
* @return MessageCatalogue A MessageCatalogue instance
|
33 |
+
*
|
34 |
+
* @throws NotFoundResourceException when the resource cannot be found
|
35 |
+
* @throws InvalidResourceException when the resource cannot be loaded
|
36 |
+
*/
|
37 |
+
public function load($resource, $locale, $domain = 'messages');
|
38 |
+
}
|
vendor/symfony/translation/Loader/MoFileLoader.php
ADDED
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\Exception\InvalidResourceException;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @copyright Copyright (c) 2010, Union of RAD http://union-of-rad.org (http://lithify.me/)
|
18 |
+
*/
|
19 |
+
class MoFileLoader extends FileLoader
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* Magic used for validating the format of a MO file as well as
|
23 |
+
* detecting if the machine used to create that file was little endian.
|
24 |
+
*/
|
25 |
+
const MO_LITTLE_ENDIAN_MAGIC = 0x950412de;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* Magic used for validating the format of a MO file as well as
|
29 |
+
* detecting if the machine used to create that file was big endian.
|
30 |
+
*/
|
31 |
+
const MO_BIG_ENDIAN_MAGIC = 0xde120495;
|
32 |
+
|
33 |
+
/**
|
34 |
+
* The size of the header of a MO file in bytes.
|
35 |
+
*/
|
36 |
+
const MO_HEADER_SIZE = 28;
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Parses machine object (MO) format, independent of the machine's endian it
|
40 |
+
* was created on. Both 32bit and 64bit systems are supported.
|
41 |
+
*
|
42 |
+
* {@inheritdoc}
|
43 |
+
*/
|
44 |
+
protected function loadResource($resource)
|
45 |
+
{
|
46 |
+
$stream = fopen($resource, 'r');
|
47 |
+
|
48 |
+
$stat = fstat($stream);
|
49 |
+
|
50 |
+
if ($stat['size'] < self::MO_HEADER_SIZE) {
|
51 |
+
throw new InvalidResourceException('MO stream content has an invalid format.');
|
52 |
+
}
|
53 |
+
$magic = unpack('V1', fread($stream, 4));
|
54 |
+
$magic = hexdec(substr(dechex(current($magic)), -8));
|
55 |
+
|
56 |
+
if (self::MO_LITTLE_ENDIAN_MAGIC == $magic) {
|
57 |
+
$isBigEndian = false;
|
58 |
+
} elseif (self::MO_BIG_ENDIAN_MAGIC == $magic) {
|
59 |
+
$isBigEndian = true;
|
60 |
+
} else {
|
61 |
+
throw new InvalidResourceException('MO stream content has an invalid format.');
|
62 |
+
}
|
63 |
+
|
64 |
+
// formatRevision
|
65 |
+
$this->readLong($stream, $isBigEndian);
|
66 |
+
$count = $this->readLong($stream, $isBigEndian);
|
67 |
+
$offsetId = $this->readLong($stream, $isBigEndian);
|
68 |
+
$offsetTranslated = $this->readLong($stream, $isBigEndian);
|
69 |
+
// sizeHashes
|
70 |
+
$this->readLong($stream, $isBigEndian);
|
71 |
+
// offsetHashes
|
72 |
+
$this->readLong($stream, $isBigEndian);
|
73 |
+
|
74 |
+
$messages = array();
|
75 |
+
|
76 |
+
for ($i = 0; $i < $count; ++$i) {
|
77 |
+
$pluralId = null;
|
78 |
+
$translated = null;
|
79 |
+
|
80 |
+
fseek($stream, $offsetId + $i * 8);
|
81 |
+
|
82 |
+
$length = $this->readLong($stream, $isBigEndian);
|
83 |
+
$offset = $this->readLong($stream, $isBigEndian);
|
84 |
+
|
85 |
+
if ($length < 1) {
|
86 |
+
continue;
|
87 |
+
}
|
88 |
+
|
89 |
+
fseek($stream, $offset);
|
90 |
+
$singularId = fread($stream, $length);
|
91 |
+
|
92 |
+
if (false !== strpos($singularId, "\000")) {
|
93 |
+
list($singularId, $pluralId) = explode("\000", $singularId);
|
94 |
+
}
|
95 |
+
|
96 |
+
fseek($stream, $offsetTranslated + $i * 8);
|
97 |
+
$length = $this->readLong($stream, $isBigEndian);
|
98 |
+
$offset = $this->readLong($stream, $isBigEndian);
|
99 |
+
|
100 |
+
if ($length < 1) {
|
101 |
+
continue;
|
102 |
+
}
|
103 |
+
|
104 |
+
fseek($stream, $offset);
|
105 |
+
$translated = fread($stream, $length);
|
106 |
+
|
107 |
+
if (false !== strpos($translated, "\000")) {
|
108 |
+
$translated = explode("\000", $translated);
|
109 |
+
}
|
110 |
+
|
111 |
+
$ids = array('singular' => $singularId, 'plural' => $pluralId);
|
112 |
+
$item = compact('ids', 'translated');
|
113 |
+
|
114 |
+
if (\is_array($item['translated'])) {
|
115 |
+
$messages[$item['ids']['singular']] = stripcslashes($item['translated'][0]);
|
116 |
+
if (isset($item['ids']['plural'])) {
|
117 |
+
$plurals = array();
|
118 |
+
foreach ($item['translated'] as $plural => $translated) {
|
119 |
+
$plurals[] = sprintf('{%d} %s', $plural, $translated);
|
120 |
+
}
|
121 |
+
$messages[$item['ids']['plural']] = stripcslashes(implode('|', $plurals));
|
122 |
+
}
|
123 |
+
} elseif (!empty($item['ids']['singular'])) {
|
124 |
+
$messages[$item['ids']['singular']] = stripcslashes($item['translated']);
|
125 |
+
}
|
126 |
+
}
|
127 |
+
|
128 |
+
fclose($stream);
|
129 |
+
|
130 |
+
return array_filter($messages);
|
131 |
+
}
|
132 |
+
|
133 |
+
/**
|
134 |
+
* Reads an unsigned long from stream respecting endianness.
|
135 |
+
*
|
136 |
+
* @param resource $stream
|
137 |
+
* @param bool $isBigEndian
|
138 |
+
*
|
139 |
+
* @return int
|
140 |
+
*/
|
141 |
+
private function readLong($stream, $isBigEndian)
|
142 |
+
{
|
143 |
+
$result = unpack($isBigEndian ? 'N1' : 'V1', fread($stream, 4));
|
144 |
+
$result = current($result);
|
145 |
+
|
146 |
+
return (int) substr($result, -8);
|
147 |
+
}
|
148 |
+
}
|
vendor/symfony/translation/Loader/PhpFileLoader.php
ADDED
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* PhpFileLoader loads translations from PHP files returning an array of translations.
|
16 |
+
*
|
17 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
+
*/
|
19 |
+
class PhpFileLoader extends FileLoader
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* {@inheritdoc}
|
23 |
+
*/
|
24 |
+
protected function loadResource($resource)
|
25 |
+
{
|
26 |
+
return require $resource;
|
27 |
+
}
|
28 |
+
}
|
vendor/symfony/translation/Loader/PoFileLoader.php
ADDED
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* @copyright Copyright (c) 2010, Union of RAD http://union-of-rad.org (http://lithify.me/)
|
16 |
+
* @copyright Copyright (c) 2012, Clemens Tolboom
|
17 |
+
*/
|
18 |
+
class PoFileLoader extends FileLoader
|
19 |
+
{
|
20 |
+
/**
|
21 |
+
* Parses portable object (PO) format.
|
22 |
+
*
|
23 |
+
* From http://www.gnu.org/software/gettext/manual/gettext.html#PO-Files
|
24 |
+
* we should be able to parse files having:
|
25 |
+
*
|
26 |
+
* white-space
|
27 |
+
* # translator-comments
|
28 |
+
* #. extracted-comments
|
29 |
+
* #: reference...
|
30 |
+
* #, flag...
|
31 |
+
* #| msgid previous-untranslated-string
|
32 |
+
* msgid untranslated-string
|
33 |
+
* msgstr translated-string
|
34 |
+
*
|
35 |
+
* extra or different lines are:
|
36 |
+
*
|
37 |
+
* #| msgctxt previous-context
|
38 |
+
* #| msgid previous-untranslated-string
|
39 |
+
* msgctxt context
|
40 |
+
*
|
41 |
+
* #| msgid previous-untranslated-string-singular
|
42 |
+
* #| msgid_plural previous-untranslated-string-plural
|
43 |
+
* msgid untranslated-string-singular
|
44 |
+
* msgid_plural untranslated-string-plural
|
45 |
+
* msgstr[0] translated-string-case-0
|
46 |
+
* ...
|
47 |
+
* msgstr[N] translated-string-case-n
|
48 |
+
*
|
49 |
+
* The definition states:
|
50 |
+
* - white-space and comments are optional.
|
51 |
+
* - msgid "" that an empty singleline defines a header.
|
52 |
+
*
|
53 |
+
* This parser sacrifices some features of the reference implementation the
|
54 |
+
* differences to that implementation are as follows.
|
55 |
+
* - No support for comments spanning multiple lines.
|
56 |
+
* - Translator and extracted comments are treated as being the same type.
|
57 |
+
* - Message IDs are allowed to have other encodings as just US-ASCII.
|
58 |
+
*
|
59 |
+
* Items with an empty id are ignored.
|
60 |
+
*
|
61 |
+
* {@inheritdoc}
|
62 |
+
*/
|
63 |
+
protected function loadResource($resource)
|
64 |
+
{
|
65 |
+
$stream = fopen($resource, 'r');
|
66 |
+
|
67 |
+
$defaults = array(
|
68 |
+
'ids' => array(),
|
69 |
+
'translated' => null,
|
70 |
+
);
|
71 |
+
|
72 |
+
$messages = array();
|
73 |
+
$item = $defaults;
|
74 |
+
$flags = array();
|
75 |
+
|
76 |
+
while ($line = fgets($stream)) {
|
77 |
+
$line = trim($line);
|
78 |
+
|
79 |
+
if ('' === $line) {
|
80 |
+
// Whitespace indicated current item is done
|
81 |
+
if (!\in_array('fuzzy', $flags)) {
|
82 |
+
$this->addMessage($messages, $item);
|
83 |
+
}
|
84 |
+
$item = $defaults;
|
85 |
+
$flags = array();
|
86 |
+
} elseif ('#,' === substr($line, 0, 2)) {
|
87 |
+
$flags = array_map('trim', explode(',', substr($line, 2)));
|
88 |
+
} elseif ('msgid "' === substr($line, 0, 7)) {
|
89 |
+
// We start a new msg so save previous
|
90 |
+
// TODO: this fails when comments or contexts are added
|
91 |
+
$this->addMessage($messages, $item);
|
92 |
+
$item = $defaults;
|
93 |
+
$item['ids']['singular'] = substr($line, 7, -1);
|
94 |
+
} elseif ('msgstr "' === substr($line, 0, 8)) {
|
95 |
+
$item['translated'] = substr($line, 8, -1);
|
96 |
+
} elseif ('"' === $line[0]) {
|
97 |
+
$continues = isset($item['translated']) ? 'translated' : 'ids';
|
98 |
+
|
99 |
+
if (\is_array($item[$continues])) {
|
100 |
+
end($item[$continues]);
|
101 |
+
$item[$continues][key($item[$continues])] .= substr($line, 1, -1);
|
102 |
+
} else {
|
103 |
+
$item[$continues] .= substr($line, 1, -1);
|
104 |
+
}
|
105 |
+
} elseif ('msgid_plural "' === substr($line, 0, 14)) {
|
106 |
+
$item['ids']['plural'] = substr($line, 14, -1);
|
107 |
+
} elseif ('msgstr[' === substr($line, 0, 7)) {
|
108 |
+
$size = strpos($line, ']');
|
109 |
+
$item['translated'][(int) substr($line, 7, 1)] = substr($line, $size + 3, -1);
|
110 |
+
}
|
111 |
+
}
|
112 |
+
// save last item
|
113 |
+
if (!\in_array('fuzzy', $flags)) {
|
114 |
+
$this->addMessage($messages, $item);
|
115 |
+
}
|
116 |
+
fclose($stream);
|
117 |
+
|
118 |
+
return $messages;
|
119 |
+
}
|
120 |
+
|
121 |
+
/**
|
122 |
+
* Save a translation item to the messages.
|
123 |
+
*
|
124 |
+
* A .po file could contain by error missing plural indexes. We need to
|
125 |
+
* fix these before saving them.
|
126 |
+
*/
|
127 |
+
private function addMessage(array &$messages, array $item)
|
128 |
+
{
|
129 |
+
if (\is_array($item['translated'])) {
|
130 |
+
$messages[stripcslashes($item['ids']['singular'])] = stripcslashes($item['translated'][0]);
|
131 |
+
if (isset($item['ids']['plural'])) {
|
132 |
+
$plurals = $item['translated'];
|
133 |
+
// PO are by definition indexed so sort by index.
|
134 |
+
ksort($plurals);
|
135 |
+
// Make sure every index is filled.
|
136 |
+
end($plurals);
|
137 |
+
$count = key($plurals);
|
138 |
+
// Fill missing spots with '-'.
|
139 |
+
$empties = array_fill(0, $count + 1, '-');
|
140 |
+
$plurals += $empties;
|
141 |
+
ksort($plurals);
|
142 |
+
$messages[stripcslashes($item['ids']['plural'])] = stripcslashes(implode('|', $plurals));
|
143 |
+
}
|
144 |
+
} elseif (!empty($item['ids']['singular'])) {
|
145 |
+
$messages[stripcslashes($item['ids']['singular'])] = stripcslashes($item['translated']);
|
146 |
+
}
|
147 |
+
}
|
148 |
+
}
|
vendor/symfony/translation/Loader/QtFileLoader.php
ADDED
@@ -0,0 +1,77 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Config\Resource\FileResource;
|
15 |
+
use Symfony\Component\Config\Util\XmlUtils;
|
16 |
+
use Symfony\Component\Translation\Exception\InvalidResourceException;
|
17 |
+
use Symfony\Component\Translation\Exception\NotFoundResourceException;
|
18 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* QtFileLoader loads translations from QT Translations XML files.
|
22 |
+
*
|
23 |
+
* @author Benjamin Eberlei <kontakt@beberlei.de>
|
24 |
+
*/
|
25 |
+
class QtFileLoader implements LoaderInterface
|
26 |
+
{
|
27 |
+
/**
|
28 |
+
* {@inheritdoc}
|
29 |
+
*/
|
30 |
+
public function load($resource, $locale, $domain = 'messages')
|
31 |
+
{
|
32 |
+
if (!stream_is_local($resource)) {
|
33 |
+
throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
|
34 |
+
}
|
35 |
+
|
36 |
+
if (!file_exists($resource)) {
|
37 |
+
throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
|
38 |
+
}
|
39 |
+
|
40 |
+
try {
|
41 |
+
$dom = XmlUtils::loadFile($resource);
|
42 |
+
} catch (\InvalidArgumentException $e) {
|
43 |
+
throw new InvalidResourceException(sprintf('Unable to load "%s".', $resource), $e->getCode(), $e);
|
44 |
+
}
|
45 |
+
|
46 |
+
$internalErrors = libxml_use_internal_errors(true);
|
47 |
+
libxml_clear_errors();
|
48 |
+
|
49 |
+
$xpath = new \DOMXPath($dom);
|
50 |
+
$nodes = $xpath->evaluate('//TS/context/name[text()="'.$domain.'"]');
|
51 |
+
|
52 |
+
$catalogue = new MessageCatalogue($locale);
|
53 |
+
if (1 == $nodes->length) {
|
54 |
+
$translations = $nodes->item(0)->nextSibling->parentNode->parentNode->getElementsByTagName('message');
|
55 |
+
foreach ($translations as $translation) {
|
56 |
+
$translationValue = (string) $translation->getElementsByTagName('translation')->item(0)->nodeValue;
|
57 |
+
|
58 |
+
if (!empty($translationValue)) {
|
59 |
+
$catalogue->set(
|
60 |
+
(string) $translation->getElementsByTagName('source')->item(0)->nodeValue,
|
61 |
+
$translationValue,
|
62 |
+
$domain
|
63 |
+
);
|
64 |
+
}
|
65 |
+
$translation = $translation->nextSibling;
|
66 |
+
}
|
67 |
+
|
68 |
+
if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
|
69 |
+
$catalogue->addResource(new FileResource($resource));
|
70 |
+
}
|
71 |
+
}
|
72 |
+
|
73 |
+
libxml_use_internal_errors($internalErrors);
|
74 |
+
|
75 |
+
return $catalogue;
|
76 |
+
}
|
77 |
+
}
|
vendor/symfony/translation/Loader/XliffFileLoader.php
ADDED
@@ -0,0 +1,326 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Config\Resource\FileResource;
|
15 |
+
use Symfony\Component\Config\Util\XmlUtils;
|
16 |
+
use Symfony\Component\Translation\Exception\InvalidResourceException;
|
17 |
+
use Symfony\Component\Translation\Exception\NotFoundResourceException;
|
18 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* XliffFileLoader loads translations from XLIFF files.
|
22 |
+
*
|
23 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
24 |
+
*/
|
25 |
+
class XliffFileLoader implements LoaderInterface
|
26 |
+
{
|
27 |
+
/**
|
28 |
+
* {@inheritdoc}
|
29 |
+
*/
|
30 |
+
public function load($resource, $locale, $domain = 'messages')
|
31 |
+
{
|
32 |
+
if (!stream_is_local($resource)) {
|
33 |
+
throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource));
|
34 |
+
}
|
35 |
+
|
36 |
+
if (!file_exists($resource)) {
|
37 |
+
throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource));
|
38 |
+
}
|
39 |
+
|
40 |
+
$catalogue = new MessageCatalogue($locale);
|
41 |
+
$this->extract($resource, $catalogue, $domain);
|
42 |
+
|
43 |
+
if (class_exists('Symfony\Component\Config\Resource\FileResource')) {
|
44 |
+
$catalogue->addResource(new FileResource($resource));
|
45 |
+
}
|
46 |
+
|
47 |
+
return $catalogue;
|
48 |
+
}
|
49 |
+
|
50 |
+
private function extract($resource, MessageCatalogue $catalogue, $domain)
|
51 |
+
{
|
52 |
+
try {
|
53 |
+
$dom = XmlUtils::loadFile($resource);
|
54 |
+
} catch (\InvalidArgumentException $e) {
|
55 |
+
throw new InvalidResourceException(sprintf('Unable to load "%s": %s', $resource, $e->getMessage()), $e->getCode(), $e);
|
56 |
+
}
|
57 |
+
|
58 |
+
$xliffVersion = $this->getVersionNumber($dom);
|
59 |
+
$this->validateSchema($xliffVersion, $dom, $this->getSchema($xliffVersion));
|
60 |
+
|
61 |
+
if ('1.2' === $xliffVersion) {
|
62 |
+
$this->extractXliff1($dom, $catalogue, $domain);
|
63 |
+
}
|
64 |
+
|
65 |
+
if ('2.0' === $xliffVersion) {
|
66 |
+
$this->extractXliff2($dom, $catalogue, $domain);
|
67 |
+
}
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* Extract messages and metadata from DOMDocument into a MessageCatalogue.
|
72 |
+
*
|
73 |
+
* @param \DOMDocument $dom Source to extract messages and metadata
|
74 |
+
* @param MessageCatalogue $catalogue Catalogue where we'll collect messages and metadata
|
75 |
+
* @param string $domain The domain
|
76 |
+
*/
|
77 |
+
private function extractXliff1(\DOMDocument $dom, MessageCatalogue $catalogue, $domain)
|
78 |
+
{
|
79 |
+
$xml = simplexml_import_dom($dom);
|
80 |
+
$encoding = strtoupper($dom->encoding);
|
81 |
+
|
82 |
+
$xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:1.2');
|
83 |
+
foreach ($xml->xpath('//xliff:trans-unit') as $translation) {
|
84 |
+
$attributes = $translation->attributes();
|
85 |
+
|
86 |
+
if (!(isset($attributes['resname']) || isset($translation->source))) {
|
87 |
+
continue;
|
88 |
+
}
|
89 |
+
|
90 |
+
$source = isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source;
|
91 |
+
// If the xlf file has another encoding specified, try to convert it because
|
92 |
+
// simple_xml will always return utf-8 encoded values
|
93 |
+
$target = $this->utf8ToCharset((string) (isset($translation->target) ? $translation->target : $translation->source), $encoding);
|
94 |
+
|
95 |
+
$catalogue->set((string) $source, $target, $domain);
|
96 |
+
|
97 |
+
$metadata = array();
|
98 |
+
if ($notes = $this->parseNotesMetadata($translation->note, $encoding)) {
|
99 |
+
$metadata['notes'] = $notes;
|
100 |
+
}
|
101 |
+
if (isset($translation->target) && $translation->target->attributes()) {
|
102 |
+
$metadata['target-attributes'] = array();
|
103 |
+
foreach ($translation->target->attributes() as $key => $value) {
|
104 |
+
$metadata['target-attributes'][$key] = (string) $value;
|
105 |
+
}
|
106 |
+
}
|
107 |
+
|
108 |
+
$catalogue->setMetadata((string) $source, $metadata, $domain);
|
109 |
+
}
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* @param \DOMDocument $dom
|
114 |
+
* @param MessageCatalogue $catalogue
|
115 |
+
* @param string $domain
|
116 |
+
*/
|
117 |
+
private function extractXliff2(\DOMDocument $dom, MessageCatalogue $catalogue, $domain)
|
118 |
+
{
|
119 |
+
$xml = simplexml_import_dom($dom);
|
120 |
+
$encoding = strtoupper($dom->encoding);
|
121 |
+
|
122 |
+
$xml->registerXPathNamespace('xliff', 'urn:oasis:names:tc:xliff:document:2.0');
|
123 |
+
|
124 |
+
foreach ($xml->xpath('//xliff:unit/xliff:segment') as $segment) {
|
125 |
+
$source = $segment->source;
|
126 |
+
|
127 |
+
// If the xlf file has another encoding specified, try to convert it because
|
128 |
+
// simple_xml will always return utf-8 encoded values
|
129 |
+
$target = $this->utf8ToCharset((string) (isset($segment->target) ? $segment->target : $source), $encoding);
|
130 |
+
|
131 |
+
$catalogue->set((string) $source, $target, $domain);
|
132 |
+
|
133 |
+
$metadata = array();
|
134 |
+
if (isset($segment->target) && $segment->target->attributes()) {
|
135 |
+
$metadata['target-attributes'] = array();
|
136 |
+
foreach ($segment->target->attributes() as $key => $value) {
|
137 |
+
$metadata['target-attributes'][$key] = (string) $value;
|
138 |
+
}
|
139 |
+
}
|
140 |
+
|
141 |
+
$catalogue->setMetadata((string) $source, $metadata, $domain);
|
142 |
+
}
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Convert a UTF8 string to the specified encoding.
|
147 |
+
*
|
148 |
+
* @param string $content String to decode
|
149 |
+
* @param string $encoding Target encoding
|
150 |
+
*
|
151 |
+
* @return string
|
152 |
+
*/
|
153 |
+
private function utf8ToCharset($content, $encoding = null)
|
154 |
+
{
|
155 |
+
if ('UTF-8' !== $encoding && !empty($encoding)) {
|
156 |
+
return mb_convert_encoding($content, $encoding, 'UTF-8');
|
157 |
+
}
|
158 |
+
|
159 |
+
return $content;
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
* Validates and parses the given file into a DOMDocument.
|
164 |
+
*
|
165 |
+
* @param string $file
|
166 |
+
* @param \DOMDocument $dom
|
167 |
+
* @param string $schema source of the schema
|
168 |
+
*
|
169 |
+
* @throws \RuntimeException
|
170 |
+
* @throws InvalidResourceException
|
171 |
+
*/
|
172 |
+
private function validateSchema($file, \DOMDocument $dom, $schema)
|
173 |
+
{
|
174 |
+
$internalErrors = libxml_use_internal_errors(true);
|
175 |
+
|
176 |
+
$disableEntities = libxml_disable_entity_loader(false);
|
177 |
+
|
178 |
+
if (!@$dom->schemaValidateSource($schema)) {
|
179 |
+
libxml_disable_entity_loader($disableEntities);
|
180 |
+
|
181 |
+
throw new InvalidResourceException(sprintf('Invalid resource provided: "%s"; Errors: %s', $file, implode("\n", $this->getXmlErrors($internalErrors))));
|
182 |
+
}
|
183 |
+
|
184 |
+
libxml_disable_entity_loader($disableEntities);
|
185 |
+
|
186 |
+
$dom->normalizeDocument();
|
187 |
+
|
188 |
+
libxml_clear_errors();
|
189 |
+
libxml_use_internal_errors($internalErrors);
|
190 |
+
}
|
191 |
+
|
192 |
+
private function getSchema($xliffVersion)
|
193 |
+
{
|
194 |
+
if ('1.2' === $xliffVersion) {
|
195 |
+
$schemaSource = file_get_contents(__DIR__.'/schema/dic/xliff-core/xliff-core-1.2-strict.xsd');
|
196 |
+
$xmlUri = 'http://www.w3.org/2001/xml.xsd';
|
197 |
+
} elseif ('2.0' === $xliffVersion) {
|
198 |
+
$schemaSource = file_get_contents(__DIR__.'/schema/dic/xliff-core/xliff-core-2.0.xsd');
|
199 |
+
$xmlUri = 'informativeCopiesOf3rdPartySchemas/w3c/xml.xsd';
|
200 |
+
} else {
|
201 |
+
throw new \InvalidArgumentException(sprintf('No support implemented for loading XLIFF version "%s".', $xliffVersion));
|
202 |
+
}
|
203 |
+
|
204 |
+
return $this->fixXmlLocation($schemaSource, $xmlUri);
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* Internally changes the URI of a dependent xsd to be loaded locally.
|
209 |
+
*
|
210 |
+
* @param string $schemaSource Current content of schema file
|
211 |
+
* @param string $xmlUri External URI of XML to convert to local
|
212 |
+
*
|
213 |
+
* @return string
|
214 |
+
*/
|
215 |
+
private function fixXmlLocation($schemaSource, $xmlUri)
|
216 |
+
{
|
217 |
+
$newPath = str_replace('\\', '/', __DIR__).'/schema/dic/xliff-core/xml.xsd';
|
218 |
+
$parts = explode('/', $newPath);
|
219 |
+
$locationstart = 'file:///';
|
220 |
+
if (0 === stripos($newPath, 'phar://')) {
|
221 |
+
$tmpfile = tempnam(sys_get_temp_dir(), 'sf2');
|
222 |
+
if ($tmpfile) {
|
223 |
+
copy($newPath, $tmpfile);
|
224 |
+
$parts = explode('/', str_replace('\\', '/', $tmpfile));
|
225 |
+
} else {
|
226 |
+
array_shift($parts);
|
227 |
+
$locationstart = 'phar:///';
|
228 |
+
}
|
229 |
+
}
|
230 |
+
$drive = '\\' === \DIRECTORY_SEPARATOR ? array_shift($parts).'/' : '';
|
231 |
+
$newPath = $locationstart.$drive.implode('/', array_map('rawurlencode', $parts));
|
232 |
+
|
233 |
+
return str_replace($xmlUri, $newPath, $schemaSource);
|
234 |
+
}
|
235 |
+
|
236 |
+
/**
|
237 |
+
* Returns the XML errors of the internal XML parser.
|
238 |
+
*
|
239 |
+
* @param bool $internalErrors
|
240 |
+
*
|
241 |
+
* @return array An array of errors
|
242 |
+
*/
|
243 |
+
private function getXmlErrors($internalErrors)
|
244 |
+
{
|
245 |
+
$errors = array();
|
246 |
+
foreach (libxml_get_errors() as $error) {
|
247 |
+
$errors[] = sprintf('[%s %s] %s (in %s - line %d, column %d)',
|
248 |
+
LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR',
|
249 |
+
$error->code,
|
250 |
+
trim($error->message),
|
251 |
+
$error->file ?: 'n/a',
|
252 |
+
$error->line,
|
253 |
+
$error->column
|
254 |
+
);
|
255 |
+
}
|
256 |
+
|
257 |
+
libxml_clear_errors();
|
258 |
+
libxml_use_internal_errors($internalErrors);
|
259 |
+
|
260 |
+
return $errors;
|
261 |
+
}
|
262 |
+
|
263 |
+
/**
|
264 |
+
* Gets xliff file version based on the root "version" attribute.
|
265 |
+
* Defaults to 1.2 for backwards compatibility.
|
266 |
+
*
|
267 |
+
* @param \DOMDocument $dom
|
268 |
+
*
|
269 |
+
* @throws \InvalidArgumentException
|
270 |
+
*
|
271 |
+
* @return string
|
272 |
+
*/
|
273 |
+
private function getVersionNumber(\DOMDocument $dom)
|
274 |
+
{
|
275 |
+
/** @var \DOMNode $xliff */
|
276 |
+
foreach ($dom->getElementsByTagName('xliff') as $xliff) {
|
277 |
+
$version = $xliff->attributes->getNamedItem('version');
|
278 |
+
if ($version) {
|
279 |
+
return $version->nodeValue;
|
280 |
+
}
|
281 |
+
|
282 |
+
$namespace = $xliff->attributes->getNamedItem('xmlns');
|
283 |
+
if ($namespace) {
|
284 |
+
if (0 !== substr_compare('urn:oasis:names:tc:xliff:document:', $namespace->nodeValue, 0, 34)) {
|
285 |
+
throw new \InvalidArgumentException(sprintf('Not a valid XLIFF namespace "%s"', $namespace));
|
286 |
+
}
|
287 |
+
|
288 |
+
return substr($namespace, 34);
|
289 |
+
}
|
290 |
+
}
|
291 |
+
|
292 |
+
// Falls back to v1.2
|
293 |
+
return '1.2';
|
294 |
+
}
|
295 |
+
|
296 |
+
/*
|
297 |
+
* @param \SimpleXMLElement|null $noteElement
|
298 |
+
* @param string|null $encoding
|
299 |
+
*
|
300 |
+
* @return array
|
301 |
+
*/
|
302 |
+
private function parseNotesMetadata(\SimpleXMLElement $noteElement = null, $encoding = null)
|
303 |
+
{
|
304 |
+
$notes = array();
|
305 |
+
|
306 |
+
if (null === $noteElement) {
|
307 |
+
return $notes;
|
308 |
+
}
|
309 |
+
|
310 |
+
foreach ($noteElement as $xmlNote) {
|
311 |
+
$noteAttributes = $xmlNote->attributes();
|
312 |
+
$note = array('content' => $this->utf8ToCharset((string) $xmlNote, $encoding));
|
313 |
+
if (isset($noteAttributes['priority'])) {
|
314 |
+
$note['priority'] = (int) $noteAttributes['priority'];
|
315 |
+
}
|
316 |
+
|
317 |
+
if (isset($noteAttributes['from'])) {
|
318 |
+
$note['from'] = (string) $noteAttributes['from'];
|
319 |
+
}
|
320 |
+
|
321 |
+
$notes[] = $note;
|
322 |
+
}
|
323 |
+
|
324 |
+
return $notes;
|
325 |
+
}
|
326 |
+
}
|
vendor/symfony/translation/Loader/YamlFileLoader.php
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Loader;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\Exception\InvalidResourceException;
|
15 |
+
use Symfony\Component\Yaml\Exception\ParseException;
|
16 |
+
use Symfony\Component\Yaml\Parser as YamlParser;
|
17 |
+
|
18 |
+
/**
|
19 |
+
* YamlFileLoader loads translations from Yaml files.
|
20 |
+
*
|
21 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
22 |
+
*/
|
23 |
+
class YamlFileLoader extends FileLoader
|
24 |
+
{
|
25 |
+
private $yamlParser;
|
26 |
+
|
27 |
+
/**
|
28 |
+
* {@inheritdoc}
|
29 |
+
*/
|
30 |
+
protected function loadResource($resource)
|
31 |
+
{
|
32 |
+
if (null === $this->yamlParser) {
|
33 |
+
if (!class_exists('Symfony\Component\Yaml\Parser')) {
|
34 |
+
throw new \LogicException('Loading translations from the YAML format requires the Symfony Yaml component.');
|
35 |
+
}
|
36 |
+
|
37 |
+
$this->yamlParser = new YamlParser();
|
38 |
+
}
|
39 |
+
|
40 |
+
try {
|
41 |
+
$messages = $this->yamlParser->parse(file_get_contents($resource));
|
42 |
+
} catch (ParseException $e) {
|
43 |
+
throw new InvalidResourceException(sprintf('Error parsing YAML, invalid file "%s"', $resource), 0, $e);
|
44 |
+
}
|
45 |
+
|
46 |
+
return $messages;
|
47 |
+
}
|
48 |
+
}
|
vendor/symfony/translation/Loader/schema/dic/xliff-core/xliff-core-1.2-strict.xsd
ADDED
@@ -0,0 +1,2223 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
|
3 |
+
<!--
|
4 |
+
|
5 |
+
May-19-2004:
|
6 |
+
- Changed the <choice> for ElemType_header, moving minOccurs="0" maxOccurs="unbounded" from its elements
|
7 |
+
to <choice> itself.
|
8 |
+
- Added <choice> for ElemType_trans-unit to allow "any order" for <context-group>, <count-group>, <prop-group>, <note>, and
|
9 |
+
<alt-trans>.
|
10 |
+
|
11 |
+
Oct-2005
|
12 |
+
- updated version info to 1.2
|
13 |
+
- equiv-trans attribute to <trans-unit> element
|
14 |
+
- merged-trans attribute for <group> element
|
15 |
+
- Add the <seg-source> element as optional in the <trans-unit> and <alt-trans> content models, at the same level as <source>
|
16 |
+
- Create a new value "seg" for the mtype attribute of the <mrk> element
|
17 |
+
- Add mid as an optional attribute for the <alt-trans> element
|
18 |
+
|
19 |
+
Nov-14-2005
|
20 |
+
- Changed name attribute for <context-group> from required to optional
|
21 |
+
- Added extension point at <xliff>
|
22 |
+
|
23 |
+
Jan-9-2006
|
24 |
+
- Added alttranstype type attribute to <alt-trans>, and values
|
25 |
+
|
26 |
+
Jan-10-2006
|
27 |
+
- Corrected error with overwritten purposeValueList
|
28 |
+
- Corrected name="AttrType_Version", attribute should have been "name"
|
29 |
+
|
30 |
+
-->
|
31 |
+
<xsd:schema xmlns:xlf="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="urn:oasis:names:tc:xliff:document:1.2" xml:lang="en">
|
32 |
+
<!-- Import for xml:lang and xml:space -->
|
33 |
+
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
|
34 |
+
<!-- Attributes Lists -->
|
35 |
+
<xsd:simpleType name="XTend">
|
36 |
+
<xsd:restriction base="xsd:string">
|
37 |
+
<xsd:pattern value="x-[^\s]+"/>
|
38 |
+
</xsd:restriction>
|
39 |
+
</xsd:simpleType>
|
40 |
+
<xsd:simpleType name="context-typeValueList">
|
41 |
+
<xsd:annotation>
|
42 |
+
<xsd:documentation>Values for the attribute 'context-type'.</xsd:documentation>
|
43 |
+
</xsd:annotation>
|
44 |
+
<xsd:restriction base="xsd:string">
|
45 |
+
<xsd:enumeration value="database">
|
46 |
+
<xsd:annotation>
|
47 |
+
<xsd:documentation>Indicates a database content.</xsd:documentation>
|
48 |
+
</xsd:annotation>
|
49 |
+
</xsd:enumeration>
|
50 |
+
<xsd:enumeration value="element">
|
51 |
+
<xsd:annotation>
|
52 |
+
<xsd:documentation>Indicates the content of an element within an XML document.</xsd:documentation>
|
53 |
+
</xsd:annotation>
|
54 |
+
</xsd:enumeration>
|
55 |
+
<xsd:enumeration value="elementtitle">
|
56 |
+
<xsd:annotation>
|
57 |
+
<xsd:documentation>Indicates the name of an element within an XML document.</xsd:documentation>
|
58 |
+
</xsd:annotation>
|
59 |
+
</xsd:enumeration>
|
60 |
+
<xsd:enumeration value="linenumber">
|
61 |
+
<xsd:annotation>
|
62 |
+
<xsd:documentation>Indicates the line number from the sourcefile (see context-type="sourcefile") where the <source> is found.</xsd:documentation>
|
63 |
+
</xsd:annotation>
|
64 |
+
</xsd:enumeration>
|
65 |
+
<xsd:enumeration value="numparams">
|
66 |
+
<xsd:annotation>
|
67 |
+
<xsd:documentation>Indicates a the number of parameters contained within the <source>.</xsd:documentation>
|
68 |
+
</xsd:annotation>
|
69 |
+
</xsd:enumeration>
|
70 |
+
<xsd:enumeration value="paramnotes">
|
71 |
+
<xsd:annotation>
|
72 |
+
<xsd:documentation>Indicates notes pertaining to the parameters in the <source>.</xsd:documentation>
|
73 |
+
</xsd:annotation>
|
74 |
+
</xsd:enumeration>
|
75 |
+
<xsd:enumeration value="record">
|
76 |
+
<xsd:annotation>
|
77 |
+
<xsd:documentation>Indicates the content of a record within a database.</xsd:documentation>
|
78 |
+
</xsd:annotation>
|
79 |
+
</xsd:enumeration>
|
80 |
+
<xsd:enumeration value="recordtitle">
|
81 |
+
<xsd:annotation>
|
82 |
+
<xsd:documentation>Indicates the name of a record within a database.</xsd:documentation>
|
83 |
+
</xsd:annotation>
|
84 |
+
</xsd:enumeration>
|
85 |
+
<xsd:enumeration value="sourcefile">
|
86 |
+
<xsd:annotation>
|
87 |
+
<xsd:documentation>Indicates the original source file in the case that multiple files are merged to form the original file from which the XLIFF file is created. This differs from the original <file> attribute in that this sourcefile is one of many that make up that file.</xsd:documentation>
|
88 |
+
</xsd:annotation>
|
89 |
+
</xsd:enumeration>
|
90 |
+
</xsd:restriction>
|
91 |
+
</xsd:simpleType>
|
92 |
+
<xsd:simpleType name="count-typeValueList">
|
93 |
+
<xsd:annotation>
|
94 |
+
<xsd:documentation>Values for the attribute 'count-type'.</xsd:documentation>
|
95 |
+
</xsd:annotation>
|
96 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
97 |
+
<xsd:enumeration value="num-usages">
|
98 |
+
<xsd:annotation>
|
99 |
+
<xsd:documentation>Indicates the count units are items that are used X times in a certain context; example: this is a reusable text unit which is used 42 times in other texts.</xsd:documentation>
|
100 |
+
</xsd:annotation>
|
101 |
+
</xsd:enumeration>
|
102 |
+
<xsd:enumeration value="repetition">
|
103 |
+
<xsd:annotation>
|
104 |
+
<xsd:documentation>Indicates the count units are translation units existing already in the same document.</xsd:documentation>
|
105 |
+
</xsd:annotation>
|
106 |
+
</xsd:enumeration>
|
107 |
+
<xsd:enumeration value="total">
|
108 |
+
<xsd:annotation>
|
109 |
+
<xsd:documentation>Indicates a total count.</xsd:documentation>
|
110 |
+
</xsd:annotation>
|
111 |
+
</xsd:enumeration>
|
112 |
+
</xsd:restriction>
|
113 |
+
</xsd:simpleType>
|
114 |
+
<xsd:simpleType name="InlineDelimitersValueList">
|
115 |
+
<xsd:annotation>
|
116 |
+
<xsd:documentation>Values for the attribute 'ctype' when used other elements than <ph> or <x>.</xsd:documentation>
|
117 |
+
</xsd:annotation>
|
118 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
119 |
+
<xsd:enumeration value="bold">
|
120 |
+
<xsd:annotation>
|
121 |
+
<xsd:documentation>Indicates a run of bolded text.</xsd:documentation>
|
122 |
+
</xsd:annotation>
|
123 |
+
</xsd:enumeration>
|
124 |
+
<xsd:enumeration value="italic">
|
125 |
+
<xsd:annotation>
|
126 |
+
<xsd:documentation>Indicates a run of text in italics.</xsd:documentation>
|
127 |
+
</xsd:annotation>
|
128 |
+
</xsd:enumeration>
|
129 |
+
<xsd:enumeration value="underlined">
|
130 |
+
<xsd:annotation>
|
131 |
+
<xsd:documentation>Indicates a run of underlined text.</xsd:documentation>
|
132 |
+
</xsd:annotation>
|
133 |
+
</xsd:enumeration>
|
134 |
+
<xsd:enumeration value="link">
|
135 |
+
<xsd:annotation>
|
136 |
+
<xsd:documentation>Indicates a run of hyper-text.</xsd:documentation>
|
137 |
+
</xsd:annotation>
|
138 |
+
</xsd:enumeration>
|
139 |
+
</xsd:restriction>
|
140 |
+
</xsd:simpleType>
|
141 |
+
<xsd:simpleType name="InlinePlaceholdersValueList">
|
142 |
+
<xsd:annotation>
|
143 |
+
<xsd:documentation>Values for the attribute 'ctype' when used with <ph> or <x>.</xsd:documentation>
|
144 |
+
</xsd:annotation>
|
145 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
146 |
+
<xsd:enumeration value="image">
|
147 |
+
<xsd:annotation>
|
148 |
+
<xsd:documentation>Indicates a inline image.</xsd:documentation>
|
149 |
+
</xsd:annotation>
|
150 |
+
</xsd:enumeration>
|
151 |
+
<xsd:enumeration value="pb">
|
152 |
+
<xsd:annotation>
|
153 |
+
<xsd:documentation>Indicates a page break.</xsd:documentation>
|
154 |
+
</xsd:annotation>
|
155 |
+
</xsd:enumeration>
|
156 |
+
<xsd:enumeration value="lb">
|
157 |
+
<xsd:annotation>
|
158 |
+
<xsd:documentation>Indicates a line break.</xsd:documentation>
|
159 |
+
</xsd:annotation>
|
160 |
+
</xsd:enumeration>
|
161 |
+
</xsd:restriction>
|
162 |
+
</xsd:simpleType>
|
163 |
+
<xsd:simpleType name="mime-typeValueList">
|
164 |
+
<xsd:restriction base="xsd:string">
|
165 |
+
<xsd:pattern value="(text|multipart|message|application|image|audio|video|model)(/.+)*"/>
|
166 |
+
</xsd:restriction>
|
167 |
+
</xsd:simpleType>
|
168 |
+
<xsd:simpleType name="datatypeValueList">
|
169 |
+
<xsd:annotation>
|
170 |
+
<xsd:documentation>Values for the attribute 'datatype'.</xsd:documentation>
|
171 |
+
</xsd:annotation>
|
172 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
173 |
+
<xsd:enumeration value="asp">
|
174 |
+
<xsd:annotation>
|
175 |
+
<xsd:documentation>Indicates Active Server Page data.</xsd:documentation>
|
176 |
+
</xsd:annotation>
|
177 |
+
</xsd:enumeration>
|
178 |
+
<xsd:enumeration value="c">
|
179 |
+
<xsd:annotation>
|
180 |
+
<xsd:documentation>Indicates C source file data.</xsd:documentation>
|
181 |
+
</xsd:annotation>
|
182 |
+
</xsd:enumeration>
|
183 |
+
<xsd:enumeration value="cdf">
|
184 |
+
<xsd:annotation>
|
185 |
+
<xsd:documentation>Indicates Channel Definition Format (CDF) data.</xsd:documentation>
|
186 |
+
</xsd:annotation>
|
187 |
+
</xsd:enumeration>
|
188 |
+
<xsd:enumeration value="cfm">
|
189 |
+
<xsd:annotation>
|
190 |
+
<xsd:documentation>Indicates ColdFusion data.</xsd:documentation>
|
191 |
+
</xsd:annotation>
|
192 |
+
</xsd:enumeration>
|
193 |
+
<xsd:enumeration value="cpp">
|
194 |
+
<xsd:annotation>
|
195 |
+
<xsd:documentation>Indicates C++ source file data.</xsd:documentation>
|
196 |
+
</xsd:annotation>
|
197 |
+
</xsd:enumeration>
|
198 |
+
<xsd:enumeration value="csharp">
|
199 |
+
<xsd:annotation>
|
200 |
+
<xsd:documentation>Indicates C-Sharp data.</xsd:documentation>
|
201 |
+
</xsd:annotation>
|
202 |
+
</xsd:enumeration>
|
203 |
+
<xsd:enumeration value="cstring">
|
204 |
+
<xsd:annotation>
|
205 |
+
<xsd:documentation>Indicates strings from C, ASM, and driver files data.</xsd:documentation>
|
206 |
+
</xsd:annotation>
|
207 |
+
</xsd:enumeration>
|
208 |
+
<xsd:enumeration value="csv">
|
209 |
+
<xsd:annotation>
|
210 |
+
<xsd:documentation>Indicates comma-separated values data.</xsd:documentation>
|
211 |
+
</xsd:annotation>
|
212 |
+
</xsd:enumeration>
|
213 |
+
<xsd:enumeration value="database">
|
214 |
+
<xsd:annotation>
|
215 |
+
<xsd:documentation>Indicates database data.</xsd:documentation>
|
216 |
+
</xsd:annotation>
|
217 |
+
</xsd:enumeration>
|
218 |
+
<xsd:enumeration value="documentfooter">
|
219 |
+
<xsd:annotation>
|
220 |
+
<xsd:documentation>Indicates portions of document that follows data and contains metadata.</xsd:documentation>
|
221 |
+
</xsd:annotation>
|
222 |
+
</xsd:enumeration>
|
223 |
+
<xsd:enumeration value="documentheader">
|
224 |
+
<xsd:annotation>
|
225 |
+
<xsd:documentation>Indicates portions of document that precedes data and contains metadata.</xsd:documentation>
|
226 |
+
</xsd:annotation>
|
227 |
+
</xsd:enumeration>
|
228 |
+
<xsd:enumeration value="filedialog">
|
229 |
+
<xsd:annotation>
|
230 |
+
<xsd:documentation>Indicates data from standard UI file operations dialogs (e.g., Open, Save, Save As, Export, Import).</xsd:documentation>
|
231 |
+
</xsd:annotation>
|
232 |
+
</xsd:enumeration>
|
233 |
+
<xsd:enumeration value="form">
|
234 |
+
<xsd:annotation>
|
235 |
+
<xsd:documentation>Indicates standard user input screen data.</xsd:documentation>
|
236 |
+
</xsd:annotation>
|
237 |
+
</xsd:enumeration>
|
238 |
+
<xsd:enumeration value="html">
|
239 |
+
<xsd:annotation>
|
240 |
+
<xsd:documentation>Indicates HyperText Markup Language (HTML) data - document instance.</xsd:documentation>
|
241 |
+
</xsd:annotation>
|
242 |
+
</xsd:enumeration>
|
243 |
+
<xsd:enumeration value="htmlbody">
|
244 |
+
<xsd:annotation>
|
245 |
+
<xsd:documentation>Indicates content within an HTML document’s <body> element.</xsd:documentation>
|
246 |
+
</xsd:annotation>
|
247 |
+
</xsd:enumeration>
|
248 |
+
<xsd:enumeration value="ini">
|
249 |
+
<xsd:annotation>
|
250 |
+
<xsd:documentation>Indicates Windows INI file data.</xsd:documentation>
|
251 |
+
</xsd:annotation>
|
252 |
+
</xsd:enumeration>
|
253 |
+
<xsd:enumeration value="interleaf">
|
254 |
+
<xsd:annotation>
|
255 |
+
<xsd:documentation>Indicates Interleaf data.</xsd:documentation>
|
256 |
+
</xsd:annotation>
|
257 |
+
</xsd:enumeration>
|
258 |
+
<xsd:enumeration value="javaclass">
|
259 |
+
<xsd:annotation>
|
260 |
+
<xsd:documentation>Indicates Java source file data (extension '.java').</xsd:documentation>
|
261 |
+
</xsd:annotation>
|
262 |
+
</xsd:enumeration>
|
263 |
+
<xsd:enumeration value="javapropertyresourcebundle">
|
264 |
+
<xsd:annotation>
|
265 |
+
<xsd:documentation>Indicates Java property resource bundle data.</xsd:documentation>
|
266 |
+
</xsd:annotation>
|
267 |
+
</xsd:enumeration>
|
268 |
+
<xsd:enumeration value="javalistresourcebundle">
|
269 |
+
<xsd:annotation>
|
270 |
+
<xsd:documentation>Indicates Java list resource bundle data.</xsd:documentation>
|
271 |
+
</xsd:annotation>
|
272 |
+
</xsd:enumeration>
|
273 |
+
<xsd:enumeration value="javascript">
|
274 |
+
<xsd:annotation>
|
275 |
+
<xsd:documentation>Indicates JavaScript source file data.</xsd:documentation>
|
276 |
+
</xsd:annotation>
|
277 |
+
</xsd:enumeration>
|
278 |
+
<xsd:enumeration value="jscript">
|
279 |
+
<xsd:annotation>
|
280 |
+
<xsd:documentation>Indicates JScript source file data.</xsd:documentation>
|
281 |
+
</xsd:annotation>
|
282 |
+
</xsd:enumeration>
|
283 |
+
<xsd:enumeration value="layout">
|
284 |
+
<xsd:annotation>
|
285 |
+
<xsd:documentation>Indicates information relating to formatting.</xsd:documentation>
|
286 |
+
</xsd:annotation>
|
287 |
+
</xsd:enumeration>
|
288 |
+
<xsd:enumeration value="lisp">
|
289 |
+
<xsd:annotation>
|
290 |
+
<xsd:documentation>Indicates LISP source file data.</xsd:documentation>
|
291 |
+
</xsd:annotation>
|
292 |
+
</xsd:enumeration>
|
293 |
+
<xsd:enumeration value="margin">
|
294 |
+
<xsd:annotation>
|
295 |
+
<xsd:documentation>Indicates information relating to margin formats.</xsd:documentation>
|
296 |
+
</xsd:annotation>
|
297 |
+
</xsd:enumeration>
|
298 |
+
<xsd:enumeration value="menufile">
|
299 |
+
<xsd:annotation>
|
300 |
+
<xsd:documentation>Indicates a file containing menu.</xsd:documentation>
|
301 |
+
</xsd:annotation>
|
302 |
+
</xsd:enumeration>
|
303 |
+
<xsd:enumeration value="messagefile">
|
304 |
+
<xsd:annotation>
|
305 |
+
<xsd:documentation>Indicates numerically identified string table.</xsd:documentation>
|
306 |
+
</xsd:annotation>
|
307 |
+
</xsd:enumeration>
|
308 |
+
<xsd:enumeration value="mif">
|
309 |
+
<xsd:annotation>
|
310 |
+
<xsd:documentation>Indicates Maker Interchange Format (MIF) data.</xsd:documentation>
|
311 |
+
</xsd:annotation>
|
312 |
+
</xsd:enumeration>
|
313 |
+
<xsd:enumeration value="mimetype">
|
314 |
+
<xsd:annotation>
|
315 |
+
<xsd:documentation>Indicates that the datatype attribute value is a MIME Type value and is defined in the mime-type attribute.</xsd:documentation>
|
316 |
+
</xsd:annotation>
|
317 |
+
</xsd:enumeration>
|
318 |
+
<xsd:enumeration value="mo">
|
319 |
+
<xsd:annotation>
|
320 |
+
<xsd:documentation>Indicates GNU Machine Object data.</xsd:documentation>
|
321 |
+
</xsd:annotation>
|
322 |
+
</xsd:enumeration>
|
323 |
+
<xsd:enumeration value="msglib">
|
324 |
+
<xsd:annotation>
|
325 |
+
<xsd:documentation>Indicates Message Librarian strings created by Novell's Message Librarian Tool.</xsd:documentation>
|
326 |
+
</xsd:annotation>
|
327 |
+
</xsd:enumeration>
|
328 |
+
<xsd:enumeration value="pagefooter">
|
329 |
+
<xsd:annotation>
|
330 |
+
<xsd:documentation>Indicates information to be displayed at the bottom of each page of a document.</xsd:documentation>
|
331 |
+
</xsd:annotation>
|
332 |
+
</xsd:enumeration>
|
333 |
+
<xsd:enumeration value="pageheader">
|
334 |
+
<xsd:annotation>
|
335 |
+
<xsd:documentation>Indicates information to be displayed at the top of each page of a document.</xsd:documentation>
|
336 |
+
</xsd:annotation>
|
337 |
+
</xsd:enumeration>
|
338 |
+
<xsd:enumeration value="parameters">
|
339 |
+
<xsd:annotation>
|
340 |
+
<xsd:documentation>Indicates a list of property values (e.g., settings within INI files or preferences dialog).</xsd:documentation>
|
341 |
+
</xsd:annotation>
|
342 |
+
</xsd:enumeration>
|
343 |
+
<xsd:enumeration value="pascal">
|
344 |
+
<xsd:annotation>
|
345 |
+
<xsd:documentation>Indicates Pascal source file data.</xsd:documentation>
|
346 |
+
</xsd:annotation>
|
347 |
+
</xsd:enumeration>
|
348 |
+
<xsd:enumeration value="php">
|
349 |
+
<xsd:annotation>
|
350 |
+
<xsd:documentation>Indicates Hypertext Preprocessor data.</xsd:documentation>
|
351 |
+
</xsd:annotation>
|
352 |
+
</xsd:enumeration>
|
353 |
+
<xsd:enumeration value="plaintext">
|
354 |
+
<xsd:annotation>
|
355 |
+
<xsd:documentation>Indicates plain text file (no formatting other than, possibly, wrapping).</xsd:documentation>
|
356 |
+
</xsd:annotation>
|
357 |
+
</xsd:enumeration>
|
358 |
+
<xsd:enumeration value="po">
|
359 |
+
<xsd:annotation>
|
360 |
+
<xsd:documentation>Indicates GNU Portable Object file.</xsd:documentation>
|
361 |
+
</xsd:annotation>
|
362 |
+
</xsd:enumeration>
|
363 |
+
<xsd:enumeration value="report">
|
364 |
+
<xsd:annotation>
|
365 |
+
<xsd:documentation>Indicates dynamically generated user defined document. e.g. Oracle Report, Crystal Report, etc.</xsd:documentation>
|
366 |
+
</xsd:annotation>
|
367 |
+
</xsd:enumeration>
|
368 |
+
<xsd:enumeration value="resources">
|
369 |
+
<xsd:annotation>
|
370 |
+
<xsd:documentation>Indicates Windows .NET binary resources.</xsd:documentation>
|
371 |
+
</xsd:annotation>
|
372 |
+
</xsd:enumeration>
|
373 |
+
<xsd:enumeration value="resx">
|
374 |
+
<xsd:annotation>
|
375 |
+
<xsd:documentation>Indicates Windows .NET Resources.</xsd:documentation>
|
376 |
+
</xsd:annotation>
|
377 |
+
</xsd:enumeration>
|
378 |
+
<xsd:enumeration value="rtf">
|
379 |
+
<xsd:annotation>
|
380 |
+
<xsd:documentation>Indicates Rich Text Format (RTF) data.</xsd:documentation>
|
381 |
+
</xsd:annotation>
|
382 |
+
</xsd:enumeration>
|
383 |
+
<xsd:enumeration value="sgml">
|
384 |
+
<xsd:annotation>
|
385 |
+
<xsd:documentation>Indicates Standard Generalized Markup Language (SGML) data - document instance.</xsd:documentation>
|
386 |
+
</xsd:annotation>
|
387 |
+
</xsd:enumeration>
|
388 |
+
<xsd:enumeration value="sgmldtd">
|
389 |
+
<xsd:annotation>
|
390 |
+
<xsd:documentation>Indicates Standard Generalized Markup Language (SGML) data - Document Type Definition (DTD).</xsd:documentation>
|
391 |
+
</xsd:annotation>
|
392 |
+
</xsd:enumeration>
|
393 |
+
<xsd:enumeration value="svg">
|
394 |
+
<xsd:annotation>
|
395 |
+
<xsd:documentation>Indicates Scalable Vector Graphic (SVG) data.</xsd:documentation>
|
396 |
+
</xsd:annotation>
|
397 |
+
</xsd:enumeration>
|
398 |
+
<xsd:enumeration value="vbscript">
|
399 |
+
<xsd:annotation>
|
400 |
+
<xsd:documentation>Indicates VisualBasic Script source file.</xsd:documentation>
|
401 |
+
</xsd:annotation>
|
402 |
+
</xsd:enumeration>
|
403 |
+
<xsd:enumeration value="warning">
|
404 |
+
<xsd:annotation>
|
405 |
+
<xsd:documentation>Indicates warning message.</xsd:documentation>
|
406 |
+
</xsd:annotation>
|
407 |
+
</xsd:enumeration>
|
408 |
+
<xsd:enumeration value="winres">
|
409 |
+
<xsd:annotation>
|
410 |
+
<xsd:documentation>Indicates Windows (Win32) resources (i.e. resources extracted from an RC script, a message file, or a compiled file).</xsd:documentation>
|
411 |
+
</xsd:annotation>
|
412 |
+
</xsd:enumeration>
|
413 |
+
<xsd:enumeration value="xhtml">
|
414 |
+
<xsd:annotation>
|
415 |
+
<xsd:documentation>Indicates Extensible HyperText Markup Language (XHTML) data - document instance.</xsd:documentation>
|
416 |
+
</xsd:annotation>
|
417 |
+
</xsd:enumeration>
|
418 |
+
<xsd:enumeration value="xml">
|
419 |
+
<xsd:annotation>
|
420 |
+
<xsd:documentation>Indicates Extensible Markup Language (XML) data - document instance.</xsd:documentation>
|
421 |
+
</xsd:annotation>
|
422 |
+
</xsd:enumeration>
|
423 |
+
<xsd:enumeration value="xmldtd">
|
424 |
+
<xsd:annotation>
|
425 |
+
<xsd:documentation>Indicates Extensible Markup Language (XML) data - Document Type Definition (DTD).</xsd:documentation>
|
426 |
+
</xsd:annotation>
|
427 |
+
</xsd:enumeration>
|
428 |
+
<xsd:enumeration value="xsl">
|
429 |
+
<xsd:annotation>
|
430 |
+
<xsd:documentation>Indicates Extensible Stylesheet Language (XSL) data.</xsd:documentation>
|
431 |
+
</xsd:annotation>
|
432 |
+
</xsd:enumeration>
|
433 |
+
<xsd:enumeration value="xul">
|
434 |
+
<xsd:annotation>
|
435 |
+
<xsd:documentation>Indicates XUL elements.</xsd:documentation>
|
436 |
+
</xsd:annotation>
|
437 |
+
</xsd:enumeration>
|
438 |
+
</xsd:restriction>
|
439 |
+
</xsd:simpleType>
|
440 |
+
<xsd:simpleType name="mtypeValueList">
|
441 |
+
<xsd:annotation>
|
442 |
+
<xsd:documentation>Values for the attribute 'mtype'.</xsd:documentation>
|
443 |
+
</xsd:annotation>
|
444 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
445 |
+
<xsd:enumeration value="abbrev">
|
446 |
+
<xsd:annotation>
|
447 |
+
<xsd:documentation>Indicates the marked text is an abbreviation.</xsd:documentation>
|
448 |
+
</xsd:annotation>
|
449 |
+
</xsd:enumeration>
|
450 |
+
<xsd:enumeration value="abbreviated-form">
|
451 |
+
<xsd:annotation>
|
452 |
+
<xsd:documentation>ISO-12620 2.1.8: A term resulting from the omission of any part of the full term while designating the same concept.</xsd:documentation>
|
453 |
+
</xsd:annotation>
|
454 |
+
</xsd:enumeration>
|
455 |
+
<xsd:enumeration value="abbreviation">
|
456 |
+
<xsd:annotation>
|
457 |
+
<xsd:documentation>ISO-12620 2.1.8.1: An abbreviated form of a simple term resulting from the omission of some of its letters (e.g. 'adj.' for 'adjective').</xsd:documentation>
|
458 |
+
</xsd:annotation>
|
459 |
+
</xsd:enumeration>
|
460 |
+
<xsd:enumeration value="acronym">
|
461 |
+
<xsd:annotation>
|
462 |
+
<xsd:documentation>ISO-12620 2.1.8.4: An abbreviated form of a term made up of letters from the full form of a multiword term strung together into a sequence pronounced only syllabically (e.g. 'radar' for 'radio detecting and ranging').</xsd:documentation>
|
463 |
+
</xsd:annotation>
|
464 |
+
</xsd:enumeration>
|
465 |
+
<xsd:enumeration value="appellation">
|
466 |
+
<xsd:annotation>
|
467 |
+
<xsd:documentation>ISO-12620: A proper-name term, such as the name of an agency or other proper entity.</xsd:documentation>
|
468 |
+
</xsd:annotation>
|
469 |
+
</xsd:enumeration>
|
470 |
+
<xsd:enumeration value="collocation">
|
471 |
+
<xsd:annotation>
|
472 |
+
<xsd:documentation>ISO-12620 2.1.18.1: A recurrent word combination characterized by cohesion in that the components of the collocation must co-occur within an utterance or series of utterances, even though they do not necessarily have to maintain immediate proximity to one another.</xsd:documentation>
|
473 |
+
</xsd:annotation>
|
474 |
+
</xsd:enumeration>
|
475 |
+
<xsd:enumeration value="common-name">
|
476 |
+
<xsd:annotation>
|
477 |
+
<xsd:documentation>ISO-12620 2.1.5: A synonym for an international scientific term that is used in general discourse in a given language.</xsd:documentation>
|
478 |
+
</xsd:annotation>
|
479 |
+
</xsd:enumeration>
|
480 |
+
<xsd:enumeration value="datetime">
|
481 |
+
<xsd:annotation>
|
482 |
+
<xsd:documentation>Indicates the marked text is a date and/or time.</xsd:documentation>
|
483 |
+
</xsd:annotation>
|
484 |
+
</xsd:enumeration>
|
485 |
+
<xsd:enumeration value="equation">
|
486 |
+
<xsd:annotation>
|
487 |
+
<xsd:documentation>ISO-12620 2.1.15: An expression used to represent a concept based on a statement that two mathematical expressions are, for instance, equal as identified by the equal sign (=), or assigned to one another by a similar sign.</xsd:documentation>
|
488 |
+
</xsd:annotation>
|
489 |
+
</xsd:enumeration>
|
490 |
+
<xsd:enumeration value="expanded-form">
|
491 |
+
<xsd:annotation>
|
492 |
+
<xsd:documentation>ISO-12620 2.1.7: The complete representation of a term for which there is an abbreviated form.</xsd:documentation>
|
493 |
+
</xsd:annotation>
|
494 |
+
</xsd:enumeration>
|
495 |
+
<xsd:enumeration value="formula">
|
496 |
+
<xsd:annotation>
|
497 |
+
<xsd:documentation>ISO-12620 2.1.14: Figures, symbols or the like used to express a concept briefly, such as a mathematical or chemical formula.</xsd:documentation>
|
498 |
+
</xsd:annotation>
|
499 |
+
</xsd:enumeration>
|
500 |
+
<xsd:enumeration value="head-term">
|
501 |
+
<xsd:annotation>
|
502 |
+
<xsd:documentation>ISO-12620 2.1.1: The concept designation that has been chosen to head a terminological record.</xsd:documentation>
|
503 |
+
</xsd:annotation>
|
504 |
+
</xsd:enumeration>
|
505 |
+
<xsd:enumeration value="initialism">
|
506 |
+
<xsd:annotation>
|
507 |
+
<xsd:documentation>ISO-12620 2.1.8.3: An abbreviated form of a term consisting of some of the initial letters of the words making up a multiword term or the term elements making up a compound term when these letters are pronounced individually (e.g. 'BSE' for 'bovine spongiform encephalopathy').</xsd:documentation>
|
508 |
+
</xsd:annotation>
|
509 |
+
</xsd:enumeration>
|
510 |
+
<xsd:enumeration value="international-scientific-term">
|
511 |
+
<xsd:annotation>
|
512 |
+
<xsd:documentation>ISO-12620 2.1.4: A term that is part of an international scientific nomenclature as adopted by an appropriate scientific body.</xsd:documentation>
|
513 |
+
</xsd:annotation>
|
514 |
+
</xsd:enumeration>
|
515 |
+
<xsd:enumeration value="internationalism">
|
516 |
+
<xsd:annotation>
|
517 |
+
<xsd:documentation>ISO-12620 2.1.6: A term that has the same or nearly identical orthographic or phonemic form in many languages.</xsd:documentation>
|
518 |
+
</xsd:annotation>
|
519 |
+
</xsd:enumeration>
|
520 |
+
<xsd:enumeration value="logical-expression">
|
521 |
+
<xsd:annotation>
|
522 |
+
<xsd:documentation>ISO-12620 2.1.16: An expression used to represent a concept based on mathematical or logical relations, such as statements of inequality, set relationships, Boolean operations, and the like.</xsd:documentation>
|
523 |
+
</xsd:annotation>
|
524 |
+
</xsd:enumeration>
|
525 |
+
<xsd:enumeration value="materials-management-unit">
|
526 |
+
<xsd:annotation>
|
527 |
+
<xsd:documentation>ISO-12620 2.1.17: A unit to track object.</xsd:documentation>
|
528 |
+
</xsd:annotation>
|
529 |
+
</xsd:enumeration>
|
530 |
+
<xsd:enumeration value="name">
|
531 |
+
<xsd:annotation>
|
532 |
+
<xsd:documentation>Indicates the marked text is a name.</xsd:documentation>
|
533 |
+
</xsd:annotation>
|
534 |
+
</xsd:enumeration>
|
535 |
+
<xsd:enumeration value="near-synonym">
|
536 |
+
<xsd:annotation>
|
537 |
+
<xsd:documentation>ISO-12620 2.1.3: A term that represents the same or a very similar concept as another term in the same language, but for which interchangeability is limited to some contexts and inapplicable in others.</xsd:documentation>
|
538 |
+
</xsd:annotation>
|
539 |
+
</xsd:enumeration>
|
540 |
+
<xsd:enumeration value="part-number">
|
541 |
+
<xsd:annotation>
|
542 |
+
<xsd:documentation>ISO-12620 2.1.17.2: A unique alphanumeric designation assigned to an object in a manufacturing system.</xsd:documentation>
|
543 |
+
</xsd:annotation>
|
544 |
+
</xsd:enumeration>
|
545 |
+
<xsd:enumeration value="phrase">
|
546 |
+
<xsd:annotation>
|
547 |
+
<xsd:documentation>Indicates the marked text is a phrase.</xsd:documentation>
|
548 |
+
</xsd:annotation>
|
549 |
+
</xsd:enumeration>
|
550 |
+
<xsd:enumeration value="phraseological-unit">
|
551 |
+
<xsd:annotation>
|
552 |
+
<xsd:documentation>ISO-12620 2.1.18: Any group of two or more words that form a unit, the meaning of which frequently cannot be deduced based on the combined sense of the words making up the phrase.</xsd:documentation>
|
553 |
+
</xsd:annotation>
|
554 |
+
</xsd:enumeration>
|
555 |
+
<xsd:enumeration value="protected">
|
556 |
+
<xsd:annotation>
|
557 |
+
<xsd:documentation>Indicates the marked text should not be translated.</xsd:documentation>
|
558 |
+
</xsd:annotation>
|
559 |
+
</xsd:enumeration>
|
560 |
+
<xsd:enumeration value="romanized-form">
|
561 |
+
<xsd:annotation>
|
562 |
+
<xsd:documentation>ISO-12620 2.1.12: A form of a term resulting from an operation whereby non-Latin writing systems are converted to the Latin alphabet.</xsd:documentation>
|
563 |
+
</xsd:annotation>
|
564 |
+
</xsd:enumeration>
|
565 |
+
<xsd:enumeration value="seg">
|
566 |
+
<xsd:annotation>
|
567 |
+
<xsd:documentation>Indicates that the marked text represents a segment.</xsd:documentation>
|
568 |
+
</xsd:annotation>
|
569 |
+
</xsd:enumeration>
|
570 |
+
<xsd:enumeration value="set-phrase">
|
571 |
+
<xsd:annotation>
|
572 |
+
<xsd:documentation>ISO-12620 2.1.18.2: A fixed, lexicalized phrase.</xsd:documentation>
|
573 |
+
</xsd:annotation>
|
574 |
+
</xsd:enumeration>
|
575 |
+
<xsd:enumeration value="short-form">
|
576 |
+
<xsd:annotation>
|
577 |
+
<xsd:documentation>ISO-12620 2.1.8.2: A variant of a multiword term that includes fewer words than the full form of the term (e.g. 'Group of Twenty-four' for 'Intergovernmental Group of Twenty-four on International Monetary Affairs').</xsd:documentation>
|
578 |
+
</xsd:annotation>
|
579 |
+
</xsd:enumeration>
|
580 |
+
<xsd:enumeration value="sku">
|
581 |
+
<xsd:annotation>
|
582 |
+
<xsd:documentation>ISO-12620 2.1.17.1: Stock keeping unit, an inventory item identified by a unique alphanumeric designation assigned to an object in an inventory control system.</xsd:documentation>
|
583 |
+
</xsd:annotation>
|
584 |
+
</xsd:enumeration>
|
585 |
+
<xsd:enumeration value="standard-text">
|
586 |
+
<xsd:annotation>
|
587 |
+
<xsd:documentation>ISO-12620 2.1.19: A fixed chunk of recurring text.</xsd:documentation>
|
588 |
+
</xsd:annotation>
|
589 |
+
</xsd:enumeration>
|
590 |
+
<xsd:enumeration value="symbol">
|
591 |
+
<xsd:annotation>
|
592 |
+
<xsd:documentation>ISO-12620 2.1.13: A designation of a concept by letters, numerals, pictograms or any combination thereof.</xsd:documentation>
|
593 |
+
</xsd:annotation>
|
594 |
+
</xsd:enumeration>
|
595 |
+
<xsd:enumeration value="synonym">
|
596 |
+
<xsd:annotation>
|
597 |
+
<xsd:documentation>ISO-12620 2.1.2: Any term that represents the same or a very similar concept as the main entry term in a term entry.</xsd:documentation>
|
598 |
+
</xsd:annotation>
|
599 |
+
</xsd:enumeration>
|
600 |
+
<xsd:enumeration value="synonymous-phrase">
|
601 |
+
<xsd:annotation>
|
602 |
+
<xsd:documentation>ISO-12620 2.1.18.3: Phraseological unit in a language that expresses the same semantic content as another phrase in that same language.</xsd:documentation>
|
603 |
+
</xsd:annotation>
|
604 |
+
</xsd:enumeration>
|
605 |
+
<xsd:enumeration value="term">
|
606 |
+
<xsd:annotation>
|
607 |
+
<xsd:documentation>Indicates the marked text is a term.</xsd:documentation>
|
608 |
+
</xsd:annotation>
|
609 |
+
</xsd:enumeration>
|
610 |
+
<xsd:enumeration value="transcribed-form">
|
611 |
+
<xsd:annotation>
|
612 |
+
<xsd:documentation>ISO-12620 2.1.11: A form of a term resulting from an operation whereby the characters of one writing system are represented by characters from another writing system, taking into account the pronunciation of the characters converted.</xsd:documentation>
|
613 |
+
</xsd:annotation>
|
614 |
+
</xsd:enumeration>
|
615 |
+
<xsd:enumeration value="transliterated-form">
|
616 |
+
<xsd:annotation>
|
617 |
+
<xsd:documentation>ISO-12620 2.1.10: A form of a term resulting from an operation whereby the characters of an alphabetic writing system are represented by characters from another alphabetic writing system.</xsd:documentation>
|
618 |
+
</xsd:annotation>
|
619 |
+
</xsd:enumeration>
|
620 |
+
<xsd:enumeration value="truncated-term">
|
621 |
+
<xsd:annotation>
|
622 |
+
<xsd:documentation>ISO-12620 2.1.8.5: An abbreviated form of a term resulting from the omission of one or more term elements or syllables (e.g. 'flu' for 'influenza').</xsd:documentation>
|
623 |
+
</xsd:annotation>
|
624 |
+
</xsd:enumeration>
|
625 |
+
<xsd:enumeration value="variant">
|
626 |
+
<xsd:annotation>
|
627 |
+
<xsd:documentation>ISO-12620 2.1.9: One of the alternate forms of a term.</xsd:documentation>
|
628 |
+
</xsd:annotation>
|
629 |
+
</xsd:enumeration>
|
630 |
+
</xsd:restriction>
|
631 |
+
</xsd:simpleType>
|
632 |
+
<xsd:simpleType name="restypeValueList">
|
633 |
+
<xsd:annotation>
|
634 |
+
<xsd:documentation>Values for the attribute 'restype'.</xsd:documentation>
|
635 |
+
</xsd:annotation>
|
636 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
637 |
+
<xsd:enumeration value="auto3state">
|
638 |
+
<xsd:annotation>
|
639 |
+
<xsd:documentation>Indicates a Windows RC AUTO3STATE control.</xsd:documentation>
|
640 |
+
</xsd:annotation>
|
641 |
+
</xsd:enumeration>
|
642 |
+
<xsd:enumeration value="autocheckbox">
|
643 |
+
<xsd:annotation>
|
644 |
+
<xsd:documentation>Indicates a Windows RC AUTOCHECKBOX control.</xsd:documentation>
|
645 |
+
</xsd:annotation>
|
646 |
+
</xsd:enumeration>
|
647 |
+
<xsd:enumeration value="autoradiobutton">
|
648 |
+
<xsd:annotation>
|
649 |
+
<xsd:documentation>Indicates a Windows RC AUTORADIOBUTTON control.</xsd:documentation>
|
650 |
+
</xsd:annotation>
|
651 |
+
</xsd:enumeration>
|
652 |
+
<xsd:enumeration value="bedit">
|
653 |
+
<xsd:annotation>
|
654 |
+
<xsd:documentation>Indicates a Windows RC BEDIT control.</xsd:documentation>
|
655 |
+
</xsd:annotation>
|
656 |
+
</xsd:enumeration>
|
657 |
+
<xsd:enumeration value="bitmap">
|
658 |
+
<xsd:annotation>
|
659 |
+
<xsd:documentation>Indicates a bitmap, for example a BITMAP resource in Windows.</xsd:documentation>
|
660 |
+
</xsd:annotation>
|
661 |
+
</xsd:enumeration>
|
662 |
+
<xsd:enumeration value="button">
|
663 |
+
<xsd:annotation>
|
664 |
+
<xsd:documentation>Indicates a button object, for example a BUTTON control Windows.</xsd:documentation>
|
665 |
+
</xsd:annotation>
|
666 |
+
</xsd:enumeration>
|
667 |
+
<xsd:enumeration value="caption">
|
668 |
+
<xsd:annotation>
|
669 |
+
<xsd:documentation>Indicates a caption, such as the caption of a dialog box.</xsd:documentation>
|
670 |
+
</xsd:annotation>
|
671 |
+
</xsd:enumeration>
|
672 |
+
<xsd:enumeration value="cell">
|
673 |
+
<xsd:annotation>
|
674 |
+
<xsd:documentation>Indicates the cell in a table, for example the content of the <td> element in HTML.</xsd:documentation>
|
675 |
+
</xsd:annotation>
|
676 |
+
</xsd:enumeration>
|
677 |
+
<xsd:enumeration value="checkbox">
|
678 |
+
<xsd:annotation>
|
679 |
+
<xsd:documentation>Indicates check box object, for example a CHECKBOX control in Windows.</xsd:documentation>
|
680 |
+
</xsd:annotation>
|
681 |
+
</xsd:enumeration>
|
682 |
+
<xsd:enumeration value="checkboxmenuitem">
|
683 |
+
<xsd:annotation>
|
684 |
+
<xsd:documentation>Indicates a menu item with an associated checkbox.</xsd:documentation>
|
685 |
+
</xsd:annotation>
|
686 |
+
</xsd:enumeration>
|
687 |
+
<xsd:enumeration value="checkedlistbox">
|
688 |
+
<xsd:annotation>
|
689 |
+
<xsd:documentation>Indicates a list box, but with a check-box for each item.</xsd:documentation>
|
690 |
+
</xsd:annotation>
|
691 |
+
</xsd:enumeration>
|
692 |
+
<xsd:enumeration value="colorchooser">
|
693 |
+
<xsd:annotation>
|
694 |
+
<xsd:documentation>Indicates a color selection dialog.</xsd:documentation>
|
695 |
+
</xsd:annotation>
|
696 |
+
</xsd:enumeration>
|
697 |
+
<xsd:enumeration value="combobox">
|
698 |
+
<xsd:annotation>
|
699 |
+
<xsd:documentation>Indicates a combination of edit box and listbox object, for example a COMBOBOX control in Windows.</xsd:documentation>
|
700 |
+
</xsd:annotation>
|
701 |
+
</xsd:enumeration>
|
702 |
+
<xsd:enumeration value="comboboxexitem">
|
703 |
+
<xsd:annotation>
|
704 |
+
<xsd:documentation>Indicates an initialization entry of an extended combobox DLGINIT resource block. (code 0x1234).</xsd:documentation>
|
705 |
+
</xsd:annotation>
|
706 |
+
</xsd:enumeration>
|
707 |
+
<xsd:enumeration value="comboboxitem">
|
708 |
+
<xsd:annotation>
|
709 |
+
<xsd:documentation>Indicates an initialization entry of a combobox DLGINIT resource block (code 0x0403).</xsd:documentation>
|
710 |
+
</xsd:annotation>
|
711 |
+
</xsd:enumeration>
|
712 |
+
<xsd:enumeration value="component">
|
713 |
+
<xsd:annotation>
|
714 |
+
<xsd:documentation>Indicates a UI base class element that cannot be represented by any other element.</xsd:documentation>
|
715 |
+
</xsd:annotation>
|
716 |
+
</xsd:enumeration>
|
717 |
+
<xsd:enumeration value="contextmenu">
|
718 |
+
<xsd:annotation>
|
719 |
+
<xsd:documentation>Indicates a context menu.</xsd:documentation>
|
720 |
+
</xsd:annotation>
|
721 |
+
</xsd:enumeration>
|
722 |
+
<xsd:enumeration value="ctext">
|
723 |
+
<xsd:annotation>
|
724 |
+
<xsd:documentation>Indicates a Windows RC CTEXT control.</xsd:documentation>
|
725 |
+
</xsd:annotation>
|
726 |
+
</xsd:enumeration>
|
727 |
+
<xsd:enumeration value="cursor">
|
728 |
+
<xsd:annotation>
|
729 |
+
<xsd:documentation>Indicates a cursor, for example a CURSOR resource in Windows.</xsd:documentation>
|
730 |
+
</xsd:annotation>
|
731 |
+
</xsd:enumeration>
|
732 |
+
<xsd:enumeration value="datetimepicker">
|
733 |
+
<xsd:annotation>
|
734 |
+
<xsd:documentation>Indicates a date/time picker.</xsd:documentation>
|
735 |
+
</xsd:annotation>
|
736 |
+
</xsd:enumeration>
|
737 |
+
<xsd:enumeration value="defpushbutton">
|
738 |
+
<xsd:annotation>
|
739 |
+
<xsd:documentation>Indicates a Windows RC DEFPUSHBUTTON control.</xsd:documentation>
|
740 |
+
</xsd:annotation>
|
741 |
+
</xsd:enumeration>
|
742 |
+
<xsd:enumeration value="dialog">
|
743 |
+
<xsd:annotation>
|
744 |
+
<xsd:documentation>Indicates a dialog box.</xsd:documentation>
|
745 |
+
</xsd:annotation>
|
746 |
+
</xsd:enumeration>
|
747 |
+
<xsd:enumeration value="dlginit">
|
748 |
+
<xsd:annotation>
|
749 |
+
<xsd:documentation>Indicates a Windows RC DLGINIT resource block.</xsd:documentation>
|
750 |
+
</xsd:annotation>
|
751 |
+
</xsd:enumeration>
|
752 |
+
<xsd:enumeration value="edit">
|
753 |
+
<xsd:annotation>
|
754 |
+
<xsd:documentation>Indicates an edit box object, for example an EDIT control in Windows.</xsd:documentation>
|
755 |
+
</xsd:annotation>
|
756 |
+
</xsd:enumeration>
|
757 |
+
<xsd:enumeration value="file">
|
758 |
+
<xsd:annotation>
|
759 |
+
<xsd:documentation>Indicates a filename.</xsd:documentation>
|
760 |
+
</xsd:annotation>
|
761 |
+
</xsd:enumeration>
|
762 |
+
<xsd:enumeration value="filechooser">
|
763 |
+
<xsd:annotation>
|
764 |
+
<xsd:documentation>Indicates a file dialog.</xsd:documentation>
|
765 |
+
</xsd:annotation>
|
766 |
+
</xsd:enumeration>
|
767 |
+
<xsd:enumeration value="fn">
|
768 |
+
<xsd:annotation>
|
769 |
+
<xsd:documentation>Indicates a footnote.</xsd:documentation>
|
770 |
+
</xsd:annotation>
|
771 |
+
</xsd:enumeration>
|
772 |
+
<xsd:enumeration value="font">
|
773 |
+
<xsd:annotation>
|
774 |
+
<xsd:documentation>Indicates a font name.</xsd:documentation>
|
775 |
+
</xsd:annotation>
|
776 |
+
</xsd:enumeration>
|
777 |
+
<xsd:enumeration value="footer">
|
778 |
+
<xsd:annotation>
|
779 |
+
<xsd:documentation>Indicates a footer.</xsd:documentation>
|
780 |
+
</xsd:annotation>
|
781 |
+
</xsd:enumeration>
|
782 |
+
<xsd:enumeration value="frame">
|
783 |
+
<xsd:annotation>
|
784 |
+
<xsd:documentation>Indicates a frame object.</xsd:documentation>
|
785 |
+
</xsd:annotation>
|
786 |
+
</xsd:enumeration>
|
787 |
+
<xsd:enumeration value="grid">
|
788 |
+
<xsd:annotation>
|
789 |
+
<xsd:documentation>Indicates a XUL grid element.</xsd:documentation>
|
790 |
+
</xsd:annotation>
|
791 |
+
</xsd:enumeration>
|
792 |
+
<xsd:enumeration value="groupbox">
|
793 |
+
<xsd:annotation>
|
794 |
+
<xsd:documentation>Indicates a groupbox object, for example a GROUPBOX control in Windows.</xsd:documentation>
|
795 |
+
</xsd:annotation>
|
796 |
+
</xsd:enumeration>
|
797 |
+
<xsd:enumeration value="header">
|
798 |
+
<xsd:annotation>
|
799 |
+
<xsd:documentation>Indicates a header item.</xsd:documentation>
|
800 |
+
</xsd:annotation>
|
801 |
+
</xsd:enumeration>
|
802 |
+
<xsd:enumeration value="heading">
|
803 |
+
<xsd:annotation>
|
804 |
+
<xsd:documentation>Indicates a heading, such has the content of <h1>, <h2>, etc. in HTML.</xsd:documentation>
|
805 |
+
</xsd:annotation>
|
806 |
+
</xsd:enumeration>
|
807 |
+
<xsd:enumeration value="hedit">
|
808 |
+
<xsd:annotation>
|
809 |
+
<xsd:documentation>Indicates a Windows RC HEDIT control.</xsd:documentation>
|
810 |
+
</xsd:annotation>
|
811 |
+
</xsd:enumeration>
|
812 |
+
<xsd:enumeration value="hscrollbar">
|
813 |
+
<xsd:annotation>
|
814 |
+
<xsd:documentation>Indicates a horizontal scrollbar.</xsd:documentation>
|
815 |
+
</xsd:annotation>
|
816 |
+
</xsd:enumeration>
|
817 |
+
<xsd:enumeration value="icon">
|
818 |
+
<xsd:annotation>
|
819 |
+
<xsd:documentation>Indicates an icon, for example an ICON resource in Windows.</xsd:documentation>
|
820 |
+
</xsd:annotation>
|
821 |
+
</xsd:enumeration>
|
822 |
+
<xsd:enumeration value="iedit">
|
823 |
+
<xsd:annotation>
|
824 |
+
<xsd:documentation>Indicates a Windows RC IEDIT control.</xsd:documentation>
|
825 |
+
</xsd:annotation>
|
826 |
+
</xsd:enumeration>
|
827 |
+
<xsd:enumeration value="keywords">
|
828 |
+
<xsd:annotation>
|
829 |
+
<xsd:documentation>Indicates keyword list, such as the content of the Keywords meta-data in HTML, or a K footnote in WinHelp RTF.</xsd:documentation>
|
830 |
+
</xsd:annotation>
|
831 |
+
</xsd:enumeration>
|
832 |
+
<xsd:enumeration value="label">
|
833 |
+
<xsd:annotation>
|
834 |
+
<xsd:documentation>Indicates a label object.</xsd:documentation>
|
835 |
+
</xsd:annotation>
|
836 |
+
</xsd:enumeration>
|
837 |
+
<xsd:enumeration value="linklabel">
|
838 |
+
<xsd:annotation>
|
839 |
+
<xsd:documentation>Indicates a label that is also a HTML link (not necessarily a URL).</xsd:documentation>
|
840 |
+
</xsd:annotation>
|
841 |
+
</xsd:enumeration>
|
842 |
+
<xsd:enumeration value="list">
|
843 |
+
<xsd:annotation>
|
844 |
+
<xsd:documentation>Indicates a list (a group of list-items, for example an <ol> or <ul> element in HTML).</xsd:documentation>
|
845 |
+
</xsd:annotation>
|
846 |
+
</xsd:enumeration>
|
847 |
+
<xsd:enumeration value="listbox">
|
848 |
+
<xsd:annotation>
|
849 |
+
<xsd:documentation>Indicates a listbox object, for example an LISTBOX control in Windows.</xsd:documentation>
|
850 |
+
</xsd:annotation>
|
851 |
+
</xsd:enumeration>
|
852 |
+
<xsd:enumeration value="listitem">
|
853 |
+
<xsd:annotation>
|
854 |
+
<xsd:documentation>Indicates an list item (an entry in a list).</xsd:documentation>
|
855 |
+
</xsd:annotation>
|
856 |
+
</xsd:enumeration>
|
857 |
+
<xsd:enumeration value="ltext">
|
858 |
+
<xsd:annotation>
|
859 |
+
<xsd:documentation>Indicates a Windows RC LTEXT control.</xsd:documentation>
|
860 |
+
</xsd:annotation>
|
861 |
+
</xsd:enumeration>
|
862 |
+
<xsd:enumeration value="menu">
|
863 |
+
<xsd:annotation>
|
864 |
+
<xsd:documentation>Indicates a menu (a group of menu-items).</xsd:documentation>
|
865 |
+
</xsd:annotation>
|
866 |
+
</xsd:enumeration>
|
867 |
+
<xsd:enumeration value="menubar">
|
868 |
+
<xsd:annotation>
|
869 |
+
<xsd:documentation>Indicates a toolbar containing one or more tope level menus.</xsd:documentation>
|
870 |
+
</xsd:annotation>
|
871 |
+
</xsd:enumeration>
|
872 |
+
<xsd:enumeration value="menuitem">
|
873 |
+
<xsd:annotation>
|
874 |
+
<xsd:documentation>Indicates a menu item (an entry in a menu).</xsd:documentation>
|
875 |
+
</xsd:annotation>
|
876 |
+
</xsd:enumeration>
|
877 |
+
<xsd:enumeration value="menuseparator">
|
878 |
+
<xsd:annotation>
|
879 |
+
<xsd:documentation>Indicates a XUL menuseparator element.</xsd:documentation>
|
880 |
+
</xsd:annotation>
|
881 |
+
</xsd:enumeration>
|
882 |
+
<xsd:enumeration value="message">
|
883 |
+
<xsd:annotation>
|
884 |
+
<xsd:documentation>Indicates a message, for example an entry in a MESSAGETABLE resource in Windows.</xsd:documentation>
|
885 |
+
</xsd:annotation>
|
886 |
+
</xsd:enumeration>
|
887 |
+
<xsd:enumeration value="monthcalendar">
|
888 |
+
<xsd:annotation>
|
889 |
+
<xsd:documentation>Indicates a calendar control.</xsd:documentation>
|
890 |
+
</xsd:annotation>
|
891 |
+
</xsd:enumeration>
|
892 |
+
<xsd:enumeration value="numericupdown">
|
893 |
+
<xsd:annotation>
|
894 |
+
<xsd:documentation>Indicates an edit box beside a spin control.</xsd:documentation>
|
895 |
+
</xsd:annotation>
|
896 |
+
</xsd:enumeration>
|
897 |
+
<xsd:enumeration value="panel">
|
898 |
+
<xsd:annotation>
|
899 |
+
<xsd:documentation>Indicates a catch all for rectangular areas.</xsd:documentation>
|
900 |
+
</xsd:annotation>
|
901 |
+
</xsd:enumeration>
|
902 |
+
<xsd:enumeration value="popupmenu">
|
903 |
+
<xsd:annotation>
|
904 |
+
<xsd:documentation>Indicates a standalone menu not necessarily associated with a menubar.</xsd:documentation>
|
905 |
+
</xsd:annotation>
|
906 |
+
</xsd:enumeration>
|
907 |
+
<xsd:enumeration value="pushbox">
|
908 |
+
<xsd:annotation>
|
909 |
+
<xsd:documentation>Indicates a pushbox object, for example a PUSHBOX control in Windows.</xsd:documentation>
|
910 |
+
</xsd:annotation>
|
911 |
+
</xsd:enumeration>
|
912 |
+
<xsd:enumeration value="pushbutton">
|
913 |
+
<xsd:annotation>
|
914 |
+
<xsd:documentation>Indicates a Windows RC PUSHBUTTON control.</xsd:documentation>
|
915 |
+
</xsd:annotation>
|
916 |
+
</xsd:enumeration>
|
917 |
+
<xsd:enumeration value="radio">
|
918 |
+
<xsd:annotation>
|
919 |
+
<xsd:documentation>Indicates a radio button object.</xsd:documentation>
|
920 |
+
</xsd:annotation>
|
921 |
+
</xsd:enumeration>
|
922 |
+
<xsd:enumeration value="radiobuttonmenuitem">
|
923 |
+
<xsd:annotation>
|
924 |
+
<xsd:documentation>Indicates a menuitem with associated radio button.</xsd:documentation>
|
925 |
+
</xsd:annotation>
|
926 |
+
</xsd:enumeration>
|
927 |
+
<xsd:enumeration value="rcdata">
|
928 |
+
<xsd:annotation>
|
929 |
+
<xsd:documentation>Indicates raw data resources for an application.</xsd:documentation>
|
930 |
+
</xsd:annotation>
|
931 |
+
</xsd:enumeration>
|
932 |
+
<xsd:enumeration value="row">
|
933 |
+
<xsd:annotation>
|
934 |
+
<xsd:documentation>Indicates a row in a table.</xsd:documentation>
|
935 |
+
</xsd:annotation>
|
936 |
+
</xsd:enumeration>
|
937 |
+
<xsd:enumeration value="rtext">
|
938 |
+
<xsd:annotation>
|
939 |
+
<xsd:documentation>Indicates a Windows RC RTEXT control.</xsd:documentation>
|
940 |
+
</xsd:annotation>
|
941 |
+
</xsd:enumeration>
|
942 |
+
<xsd:enumeration value="scrollpane">
|
943 |
+
<xsd:annotation>
|
944 |
+
<xsd:documentation>Indicates a user navigable container used to show a portion of a document.</xsd:documentation>
|
945 |
+
</xsd:annotation>
|
946 |
+
</xsd:enumeration>
|
947 |
+
<xsd:enumeration value="separator">
|
948 |
+
<xsd:annotation>
|
949 |
+
<xsd:documentation>Indicates a generic divider object (e.g. menu group separator).</xsd:documentation>
|
950 |
+
</xsd:annotation>
|
951 |
+
</xsd:enumeration>
|
952 |
+
<xsd:enumeration value="shortcut">
|
953 |
+
<xsd:annotation>
|
954 |
+
<xsd:documentation>Windows accelerators, shortcuts in resource or property files.</xsd:documentation>
|
955 |
+
</xsd:annotation>
|
956 |
+
</xsd:enumeration>
|
957 |
+
<xsd:enumeration value="spinner">
|
958 |
+
<xsd:annotation>
|
959 |
+
<xsd:documentation>Indicates a UI control to indicate process activity but not progress.</xsd:documentation>
|
960 |
+
</xsd:annotation>
|
961 |
+
</xsd:enumeration>
|
962 |
+
<xsd:enumeration value="splitter">
|
963 |
+
<xsd:annotation>
|
964 |
+
<xsd:documentation>Indicates a splitter bar.</xsd:documentation>
|
965 |
+
</xsd:annotation>
|
966 |
+
</xsd:enumeration>
|
967 |
+
<xsd:enumeration value="state3">
|
968 |
+
<xsd:annotation>
|
969 |
+
<xsd:documentation>Indicates a Windows RC STATE3 control.</xsd:documentation>
|
970 |
+
</xsd:annotation>
|
971 |
+
</xsd:enumeration>
|
972 |
+
<xsd:enumeration value="statusbar">
|
973 |
+
<xsd:annotation>
|
974 |
+
<xsd:documentation>Indicates a window for providing feedback to the users, like 'read-only', etc.</xsd:documentation>
|
975 |
+
</xsd:annotation>
|
976 |
+
</xsd:enumeration>
|
977 |
+
<xsd:enumeration value="string">
|
978 |
+
<xsd:annotation>
|
979 |
+
<xsd:documentation>Indicates a string, for example an entry in a STRINGTABLE resource in Windows.</xsd:documentation>
|
980 |
+
</xsd:annotation>
|
981 |
+
</xsd:enumeration>
|
982 |
+
<xsd:enumeration value="tabcontrol">
|
983 |
+
<xsd:annotation>
|
984 |
+
<xsd:documentation>Indicates a layers of controls with a tab to select layers.</xsd:documentation>
|
985 |
+
</xsd:annotation>
|
986 |
+
</xsd:enumeration>
|
987 |
+
<xsd:enumeration value="table">
|
988 |
+
<xsd:annotation>
|
989 |
+
<xsd:documentation>Indicates a display and edits regular two-dimensional tables of cells.</xsd:documentation>
|
990 |
+
</xsd:annotation>
|
991 |
+
</xsd:enumeration>
|
992 |
+
<xsd:enumeration value="textbox">
|
993 |
+
<xsd:annotation>
|
994 |
+
<xsd:documentation>Indicates a XUL textbox element.</xsd:documentation>
|
995 |
+
</xsd:annotation>
|
996 |
+
</xsd:enumeration>
|
997 |
+
<xsd:enumeration value="togglebutton">
|
998 |
+
<xsd:annotation>
|
999 |
+
<xsd:documentation>Indicates a UI button that can be toggled to on or off state.</xsd:documentation>
|
1000 |
+
</xsd:annotation>
|
1001 |
+
</xsd:enumeration>
|
1002 |
+
<xsd:enumeration value="toolbar">
|
1003 |
+
<xsd:annotation>
|
1004 |
+
<xsd:documentation>Indicates an array of controls, usually buttons.</xsd:documentation>
|
1005 |
+
</xsd:annotation>
|
1006 |
+
</xsd:enumeration>
|
1007 |
+
<xsd:enumeration value="tooltip">
|
1008 |
+
<xsd:annotation>
|
1009 |
+
<xsd:documentation>Indicates a pop up tool tip text.</xsd:documentation>
|
1010 |
+
</xsd:annotation>
|
1011 |
+
</xsd:enumeration>
|
1012 |
+
<xsd:enumeration value="trackbar">
|
1013 |
+
<xsd:annotation>
|
1014 |
+
<xsd:documentation>Indicates a bar with a pointer indicating a position within a certain range.</xsd:documentation>
|
1015 |
+
</xsd:annotation>
|
1016 |
+
</xsd:enumeration>
|
1017 |
+
<xsd:enumeration value="tree">
|
1018 |
+
<xsd:annotation>
|
1019 |
+
<xsd:documentation>Indicates a control that displays a set of hierarchical data.</xsd:documentation>
|
1020 |
+
</xsd:annotation>
|
1021 |
+
</xsd:enumeration>
|
1022 |
+
<xsd:enumeration value="uri">
|
1023 |
+
<xsd:annotation>
|
1024 |
+
<xsd:documentation>Indicates a URI (URN or URL).</xsd:documentation>
|
1025 |
+
</xsd:annotation>
|
1026 |
+
</xsd:enumeration>
|
1027 |
+
<xsd:enumeration value="userbutton">
|
1028 |
+
<xsd:annotation>
|
1029 |
+
<xsd:documentation>Indicates a Windows RC USERBUTTON control.</xsd:documentation>
|
1030 |
+
</xsd:annotation>
|
1031 |
+
</xsd:enumeration>
|
1032 |
+
<xsd:enumeration value="usercontrol">
|
1033 |
+
<xsd:annotation>
|
1034 |
+
<xsd:documentation>Indicates a user-defined control like CONTROL control in Windows.</xsd:documentation>
|
1035 |
+
</xsd:annotation>
|
1036 |
+
</xsd:enumeration>
|
1037 |
+
<xsd:enumeration value="var">
|
1038 |
+
<xsd:annotation>
|
1039 |
+
<xsd:documentation>Indicates the text of a variable.</xsd:documentation>
|
1040 |
+
</xsd:annotation>
|
1041 |
+
</xsd:enumeration>
|
1042 |
+
<xsd:enumeration value="versioninfo">
|
1043 |
+
<xsd:annotation>
|
1044 |
+
<xsd:documentation>Indicates version information about a resource like VERSIONINFO in Windows.</xsd:documentation>
|
1045 |
+
</xsd:annotation>
|
1046 |
+
</xsd:enumeration>
|
1047 |
+
<xsd:enumeration value="vscrollbar">
|
1048 |
+
<xsd:annotation>
|
1049 |
+
<xsd:documentation>Indicates a vertical scrollbar.</xsd:documentation>
|
1050 |
+
</xsd:annotation>
|
1051 |
+
</xsd:enumeration>
|
1052 |
+
<xsd:enumeration value="window">
|
1053 |
+
<xsd:annotation>
|
1054 |
+
<xsd:documentation>Indicates a graphical window.</xsd:documentation>
|
1055 |
+
</xsd:annotation>
|
1056 |
+
</xsd:enumeration>
|
1057 |
+
</xsd:restriction>
|
1058 |
+
</xsd:simpleType>
|
1059 |
+
<xsd:simpleType name="size-unitValueList">
|
1060 |
+
<xsd:annotation>
|
1061 |
+
<xsd:documentation>Values for the attribute 'size-unit'.</xsd:documentation>
|
1062 |
+
</xsd:annotation>
|
1063 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
1064 |
+
<xsd:enumeration value="byte">
|
1065 |
+
<xsd:annotation>
|
1066 |
+
<xsd:documentation>Indicates a size in 8-bit bytes.</xsd:documentation>
|
1067 |
+
</xsd:annotation>
|
1068 |
+
</xsd:enumeration>
|
1069 |
+
<xsd:enumeration value="char">
|
1070 |
+
<xsd:annotation>
|
1071 |
+
<xsd:documentation>Indicates a size in Unicode characters.</xsd:documentation>
|
1072 |
+
</xsd:annotation>
|
1073 |
+
</xsd:enumeration>
|
1074 |
+
<xsd:enumeration value="col">
|
1075 |
+
<xsd:annotation>
|
1076 |
+
<xsd:documentation>Indicates a size in columns. Used for HTML text area.</xsd:documentation>
|
1077 |
+
</xsd:annotation>
|
1078 |
+
</xsd:enumeration>
|
1079 |
+
<xsd:enumeration value="cm">
|
1080 |
+
<xsd:annotation>
|
1081 |
+
<xsd:documentation>Indicates a size in centimeters.</xsd:documentation>
|
1082 |
+
</xsd:annotation>
|
1083 |
+
</xsd:enumeration>
|
1084 |
+
<xsd:enumeration value="dlgunit">
|
1085 |
+
<xsd:annotation>
|
1086 |
+
<xsd:documentation>Indicates a size in dialog units, as defined in Windows resources.</xsd:documentation>
|
1087 |
+
</xsd:annotation>
|
1088 |
+
</xsd:enumeration>
|
1089 |
+
<xsd:enumeration value="em">
|
1090 |
+
<xsd:annotation>
|
1091 |
+
<xsd:documentation>Indicates a size in 'font-size' units (as defined in CSS).</xsd:documentation>
|
1092 |
+
</xsd:annotation>
|
1093 |
+
</xsd:enumeration>
|
1094 |
+
<xsd:enumeration value="ex">
|
1095 |
+
<xsd:annotation>
|
1096 |
+
<xsd:documentation>Indicates a size in 'x-height' units (as defined in CSS).</xsd:documentation>
|
1097 |
+
</xsd:annotation>
|
1098 |
+
</xsd:enumeration>
|
1099 |
+
<xsd:enumeration value="glyph">
|
1100 |
+
<xsd:annotation>
|
1101 |
+
<xsd:documentation>Indicates a size in glyphs. A glyph is considered to be one or more combined Unicode characters that represent a single displayable text character. Sometimes referred to as a 'grapheme cluster'</xsd:documentation>
|
1102 |
+
</xsd:annotation>
|
1103 |
+
</xsd:enumeration>
|
1104 |
+
<xsd:enumeration value="in">
|
1105 |
+
<xsd:annotation>
|
1106 |
+
<xsd:documentation>Indicates a size in inches.</xsd:documentation>
|
1107 |
+
</xsd:annotation>
|
1108 |
+
</xsd:enumeration>
|
1109 |
+
<xsd:enumeration value="mm">
|
1110 |
+
<xsd:annotation>
|
1111 |
+
<xsd:documentation>Indicates a size in millimeters.</xsd:documentation>
|
1112 |
+
</xsd:annotation>
|
1113 |
+
</xsd:enumeration>
|
1114 |
+
<xsd:enumeration value="percent">
|
1115 |
+
<xsd:annotation>
|
1116 |
+
<xsd:documentation>Indicates a size in percentage.</xsd:documentation>
|
1117 |
+
</xsd:annotation>
|
1118 |
+
</xsd:enumeration>
|
1119 |
+
<xsd:enumeration value="pixel">
|
1120 |
+
<xsd:annotation>
|
1121 |
+
<xsd:documentation>Indicates a size in pixels.</xsd:documentation>
|
1122 |
+
</xsd:annotation>
|
1123 |
+
</xsd:enumeration>
|
1124 |
+
<xsd:enumeration value="point">
|
1125 |
+
<xsd:annotation>
|
1126 |
+
<xsd:documentation>Indicates a size in point.</xsd:documentation>
|
1127 |
+
</xsd:annotation>
|
1128 |
+
</xsd:enumeration>
|
1129 |
+
<xsd:enumeration value="row">
|
1130 |
+
<xsd:annotation>
|
1131 |
+
<xsd:documentation>Indicates a size in rows. Used for HTML text area.</xsd:documentation>
|
1132 |
+
</xsd:annotation>
|
1133 |
+
</xsd:enumeration>
|
1134 |
+
</xsd:restriction>
|
1135 |
+
</xsd:simpleType>
|
1136 |
+
<xsd:simpleType name="stateValueList">
|
1137 |
+
<xsd:annotation>
|
1138 |
+
<xsd:documentation>Values for the attribute 'state'.</xsd:documentation>
|
1139 |
+
</xsd:annotation>
|
1140 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
1141 |
+
<xsd:enumeration value="final">
|
1142 |
+
<xsd:annotation>
|
1143 |
+
<xsd:documentation>Indicates the terminating state.</xsd:documentation>
|
1144 |
+
</xsd:annotation>
|
1145 |
+
</xsd:enumeration>
|
1146 |
+
<xsd:enumeration value="needs-adaptation">
|
1147 |
+
<xsd:annotation>
|
1148 |
+
<xsd:documentation>Indicates only non-textual information needs adaptation.</xsd:documentation>
|
1149 |
+
</xsd:annotation>
|
1150 |
+
</xsd:enumeration>
|
1151 |
+
<xsd:enumeration value="needs-l10n">
|
1152 |
+
<xsd:annotation>
|
1153 |
+
<xsd:documentation>Indicates both text and non-textual information needs adaptation.</xsd:documentation>
|
1154 |
+
</xsd:annotation>
|
1155 |
+
</xsd:enumeration>
|
1156 |
+
<xsd:enumeration value="needs-review-adaptation">
|
1157 |
+
<xsd:annotation>
|
1158 |
+
<xsd:documentation>Indicates only non-textual information needs review.</xsd:documentation>
|
1159 |
+
</xsd:annotation>
|
1160 |
+
</xsd:enumeration>
|
1161 |
+
<xsd:enumeration value="needs-review-l10n">
|
1162 |
+
<xsd:annotation>
|
1163 |
+
<xsd:documentation>Indicates both text and non-textual information needs review.</xsd:documentation>
|
1164 |
+
</xsd:annotation>
|
1165 |
+
</xsd:enumeration>
|
1166 |
+
<xsd:enumeration value="needs-review-translation">
|
1167 |
+
<xsd:annotation>
|
1168 |
+
<xsd:documentation>Indicates that only the text of the item needs to be reviewed.</xsd:documentation>
|
1169 |
+
</xsd:annotation>
|
1170 |
+
</xsd:enumeration>
|
1171 |
+
<xsd:enumeration value="needs-translation">
|
1172 |
+
<xsd:annotation>
|
1173 |
+
<xsd:documentation>Indicates that the item needs to be translated.</xsd:documentation>
|
1174 |
+
</xsd:annotation>
|
1175 |
+
</xsd:enumeration>
|
1176 |
+
<xsd:enumeration value="new">
|
1177 |
+
<xsd:annotation>
|
1178 |
+
<xsd:documentation>Indicates that the item is new. For example, translation units that were not in a previous version of the document.</xsd:documentation>
|
1179 |
+
</xsd:annotation>
|
1180 |
+
</xsd:enumeration>
|
1181 |
+
<xsd:enumeration value="signed-off">
|
1182 |
+
<xsd:annotation>
|
1183 |
+
<xsd:documentation>Indicates that changes are reviewed and approved.</xsd:documentation>
|
1184 |
+
</xsd:annotation>
|
1185 |
+
</xsd:enumeration>
|
1186 |
+
<xsd:enumeration value="translated">
|
1187 |
+
<xsd:annotation>
|
1188 |
+
<xsd:documentation>Indicates that the item has been translated.</xsd:documentation>
|
1189 |
+
</xsd:annotation>
|
1190 |
+
</xsd:enumeration>
|
1191 |
+
</xsd:restriction>
|
1192 |
+
</xsd:simpleType>
|
1193 |
+
<xsd:simpleType name="state-qualifierValueList">
|
1194 |
+
<xsd:annotation>
|
1195 |
+
<xsd:documentation>Values for the attribute 'state-qualifier'.</xsd:documentation>
|
1196 |
+
</xsd:annotation>
|
1197 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
1198 |
+
<xsd:enumeration value="exact-match">
|
1199 |
+
<xsd:annotation>
|
1200 |
+
<xsd:documentation>Indicates an exact match. An exact match occurs when a source text of a segment is exactly the same as the source text of a segment that was translated previously.</xsd:documentation>
|
1201 |
+
</xsd:annotation>
|
1202 |
+
</xsd:enumeration>
|
1203 |
+
<xsd:enumeration value="fuzzy-match">
|
1204 |
+
<xsd:annotation>
|
1205 |
+
<xsd:documentation>Indicates a fuzzy match. A fuzzy match occurs when a source text of a segment is very similar to the source text of a segment that was translated previously (e.g. when the difference is casing, a few changed words, white-space discripancy, etc.).</xsd:documentation>
|
1206 |
+
</xsd:annotation>
|
1207 |
+
</xsd:enumeration>
|
1208 |
+
<xsd:enumeration value="id-match">
|
1209 |
+
<xsd:annotation>
|
1210 |
+
<xsd:documentation>Indicates a match based on matching IDs (in addition to matching text).</xsd:documentation>
|
1211 |
+
</xsd:annotation>
|
1212 |
+
</xsd:enumeration>
|
1213 |
+
<xsd:enumeration value="leveraged-glossary">
|
1214 |
+
<xsd:annotation>
|
1215 |
+
<xsd:documentation>Indicates a translation derived from a glossary.</xsd:documentation>
|
1216 |
+
</xsd:annotation>
|
1217 |
+
</xsd:enumeration>
|
1218 |
+
<xsd:enumeration value="leveraged-inherited">
|
1219 |
+
<xsd:annotation>
|
1220 |
+
<xsd:documentation>Indicates a translation derived from existing translation.</xsd:documentation>
|
1221 |
+
</xsd:annotation>
|
1222 |
+
</xsd:enumeration>
|
1223 |
+
<xsd:enumeration value="leveraged-mt">
|
1224 |
+
<xsd:annotation>
|
1225 |
+
<xsd:documentation>Indicates a translation derived from machine translation.</xsd:documentation>
|
1226 |
+
</xsd:annotation>
|
1227 |
+
</xsd:enumeration>
|
1228 |
+
<xsd:enumeration value="leveraged-repository">
|
1229 |
+
<xsd:annotation>
|
1230 |
+
<xsd:documentation>Indicates a translation derived from a translation repository.</xsd:documentation>
|
1231 |
+
</xsd:annotation>
|
1232 |
+
</xsd:enumeration>
|
1233 |
+
<xsd:enumeration value="leveraged-tm">
|
1234 |
+
<xsd:annotation>
|
1235 |
+
<xsd:documentation>Indicates a translation derived from a translation memory.</xsd:documentation>
|
1236 |
+
</xsd:annotation>
|
1237 |
+
</xsd:enumeration>
|
1238 |
+
<xsd:enumeration value="mt-suggestion">
|
1239 |
+
<xsd:annotation>
|
1240 |
+
<xsd:documentation>Indicates the translation is suggested by machine translation.</xsd:documentation>
|
1241 |
+
</xsd:annotation>
|
1242 |
+
</xsd:enumeration>
|
1243 |
+
<xsd:enumeration value="rejected-grammar">
|
1244 |
+
<xsd:annotation>
|
1245 |
+
<xsd:documentation>Indicates that the item has been rejected because of incorrect grammar.</xsd:documentation>
|
1246 |
+
</xsd:annotation>
|
1247 |
+
</xsd:enumeration>
|
1248 |
+
<xsd:enumeration value="rejected-inaccurate">
|
1249 |
+
<xsd:annotation>
|
1250 |
+
<xsd:documentation>Indicates that the item has been rejected because it is incorrect.</xsd:documentation>
|
1251 |
+
</xsd:annotation>
|
1252 |
+
</xsd:enumeration>
|
1253 |
+
<xsd:enumeration value="rejected-length">
|
1254 |
+
<xsd:annotation>
|
1255 |
+
<xsd:documentation>Indicates that the item has been rejected because it is too long or too short.</xsd:documentation>
|
1256 |
+
</xsd:annotation>
|
1257 |
+
</xsd:enumeration>
|
1258 |
+
<xsd:enumeration value="rejected-spelling">
|
1259 |
+
<xsd:annotation>
|
1260 |
+
<xsd:documentation>Indicates that the item has been rejected because of incorrect spelling.</xsd:documentation>
|
1261 |
+
</xsd:annotation>
|
1262 |
+
</xsd:enumeration>
|
1263 |
+
<xsd:enumeration value="tm-suggestion">
|
1264 |
+
<xsd:annotation>
|
1265 |
+
<xsd:documentation>Indicates the translation is suggested by translation memory.</xsd:documentation>
|
1266 |
+
</xsd:annotation>
|
1267 |
+
</xsd:enumeration>
|
1268 |
+
</xsd:restriction>
|
1269 |
+
</xsd:simpleType>
|
1270 |
+
<xsd:simpleType name="unitValueList">
|
1271 |
+
<xsd:annotation>
|
1272 |
+
<xsd:documentation>Values for the attribute 'unit'.</xsd:documentation>
|
1273 |
+
</xsd:annotation>
|
1274 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
1275 |
+
<xsd:enumeration value="word">
|
1276 |
+
<xsd:annotation>
|
1277 |
+
<xsd:documentation>Refers to words.</xsd:documentation>
|
1278 |
+
</xsd:annotation>
|
1279 |
+
</xsd:enumeration>
|
1280 |
+
<xsd:enumeration value="page">
|
1281 |
+
<xsd:annotation>
|
1282 |
+
<xsd:documentation>Refers to pages.</xsd:documentation>
|
1283 |
+
</xsd:annotation>
|
1284 |
+
</xsd:enumeration>
|
1285 |
+
<xsd:enumeration value="trans-unit">
|
1286 |
+
<xsd:annotation>
|
1287 |
+
<xsd:documentation>Refers to <trans-unit> elements.</xsd:documentation>
|
1288 |
+
</xsd:annotation>
|
1289 |
+
</xsd:enumeration>
|
1290 |
+
<xsd:enumeration value="bin-unit">
|
1291 |
+
<xsd:annotation>
|
1292 |
+
<xsd:documentation>Refers to <bin-unit> elements.</xsd:documentation>
|
1293 |
+
</xsd:annotation>
|
1294 |
+
</xsd:enumeration>
|
1295 |
+
<xsd:enumeration value="glyph">
|
1296 |
+
<xsd:annotation>
|
1297 |
+
<xsd:documentation>Refers to glyphs.</xsd:documentation>
|
1298 |
+
</xsd:annotation>
|
1299 |
+
</xsd:enumeration>
|
1300 |
+
<xsd:enumeration value="item">
|
1301 |
+
<xsd:annotation>
|
1302 |
+
<xsd:documentation>Refers to <trans-unit> and/or <bin-unit> elements.</xsd:documentation>
|
1303 |
+
</xsd:annotation>
|
1304 |
+
</xsd:enumeration>
|
1305 |
+
<xsd:enumeration value="instance">
|
1306 |
+
<xsd:annotation>
|
1307 |
+
<xsd:documentation>Refers to the occurrences of instances defined by the count-type value.</xsd:documentation>
|
1308 |
+
</xsd:annotation>
|
1309 |
+
</xsd:enumeration>
|
1310 |
+
<xsd:enumeration value="character">
|
1311 |
+
<xsd:annotation>
|
1312 |
+
<xsd:documentation>Refers to characters.</xsd:documentation>
|
1313 |
+
</xsd:annotation>
|
1314 |
+
</xsd:enumeration>
|
1315 |
+
<xsd:enumeration value="line">
|
1316 |
+
<xsd:annotation>
|
1317 |
+
<xsd:documentation>Refers to lines.</xsd:documentation>
|
1318 |
+
</xsd:annotation>
|
1319 |
+
</xsd:enumeration>
|
1320 |
+
<xsd:enumeration value="sentence">
|
1321 |
+
<xsd:annotation>
|
1322 |
+
<xsd:documentation>Refers to sentences.</xsd:documentation>
|
1323 |
+
</xsd:annotation>
|
1324 |
+
</xsd:enumeration>
|
1325 |
+
<xsd:enumeration value="paragraph">
|
1326 |
+
<xsd:annotation>
|
1327 |
+
<xsd:documentation>Refers to paragraphs.</xsd:documentation>
|
1328 |
+
</xsd:annotation>
|
1329 |
+
</xsd:enumeration>
|
1330 |
+
<xsd:enumeration value="segment">
|
1331 |
+
<xsd:annotation>
|
1332 |
+
<xsd:documentation>Refers to segments.</xsd:documentation>
|
1333 |
+
</xsd:annotation>
|
1334 |
+
</xsd:enumeration>
|
1335 |
+
<xsd:enumeration value="placeable">
|
1336 |
+
<xsd:annotation>
|
1337 |
+
<xsd:documentation>Refers to placeables (inline elements).</xsd:documentation>
|
1338 |
+
</xsd:annotation>
|
1339 |
+
</xsd:enumeration>
|
1340 |
+
</xsd:restriction>
|
1341 |
+
</xsd:simpleType>
|
1342 |
+
<xsd:simpleType name="priorityValueList">
|
1343 |
+
<xsd:annotation>
|
1344 |
+
<xsd:documentation>Values for the attribute 'priority'.</xsd:documentation>
|
1345 |
+
</xsd:annotation>
|
1346 |
+
<xsd:restriction base="xsd:positiveInteger">
|
1347 |
+
<xsd:enumeration value="1">
|
1348 |
+
<xsd:annotation>
|
1349 |
+
<xsd:documentation>Highest priority.</xsd:documentation>
|
1350 |
+
</xsd:annotation>
|
1351 |
+
</xsd:enumeration>
|
1352 |
+
<xsd:enumeration value="2">
|
1353 |
+
<xsd:annotation>
|
1354 |
+
<xsd:documentation>High priority.</xsd:documentation>
|
1355 |
+
</xsd:annotation>
|
1356 |
+
</xsd:enumeration>
|
1357 |
+
<xsd:enumeration value="3">
|
1358 |
+
<xsd:annotation>
|
1359 |
+
<xsd:documentation>High priority, but not as important as 2.</xsd:documentation>
|
1360 |
+
</xsd:annotation>
|
1361 |
+
</xsd:enumeration>
|
1362 |
+
<xsd:enumeration value="4">
|
1363 |
+
<xsd:annotation>
|
1364 |
+
<xsd:documentation>High priority, but not as important as 3.</xsd:documentation>
|
1365 |
+
</xsd:annotation>
|
1366 |
+
</xsd:enumeration>
|
1367 |
+
<xsd:enumeration value="5">
|
1368 |
+
<xsd:annotation>
|
1369 |
+
<xsd:documentation>Medium priority, but more important than 6.</xsd:documentation>
|
1370 |
+
</xsd:annotation>
|
1371 |
+
</xsd:enumeration>
|
1372 |
+
<xsd:enumeration value="6">
|
1373 |
+
<xsd:annotation>
|
1374 |
+
<xsd:documentation>Medium priority, but less important than 5.</xsd:documentation>
|
1375 |
+
</xsd:annotation>
|
1376 |
+
</xsd:enumeration>
|
1377 |
+
<xsd:enumeration value="7">
|
1378 |
+
<xsd:annotation>
|
1379 |
+
<xsd:documentation>Low priority, but more important than 8.</xsd:documentation>
|
1380 |
+
</xsd:annotation>
|
1381 |
+
</xsd:enumeration>
|
1382 |
+
<xsd:enumeration value="8">
|
1383 |
+
<xsd:annotation>
|
1384 |
+
<xsd:documentation>Low priority, but more important than 9.</xsd:documentation>
|
1385 |
+
</xsd:annotation>
|
1386 |
+
</xsd:enumeration>
|
1387 |
+
<xsd:enumeration value="9">
|
1388 |
+
<xsd:annotation>
|
1389 |
+
<xsd:documentation>Low priority.</xsd:documentation>
|
1390 |
+
</xsd:annotation>
|
1391 |
+
</xsd:enumeration>
|
1392 |
+
<xsd:enumeration value="10">
|
1393 |
+
<xsd:annotation>
|
1394 |
+
<xsd:documentation>Lowest priority.</xsd:documentation>
|
1395 |
+
</xsd:annotation>
|
1396 |
+
</xsd:enumeration>
|
1397 |
+
</xsd:restriction>
|
1398 |
+
</xsd:simpleType>
|
1399 |
+
<xsd:simpleType name="reformatValueYesNo">
|
1400 |
+
<xsd:restriction base="xsd:string">
|
1401 |
+
<xsd:enumeration value="yes">
|
1402 |
+
<xsd:annotation>
|
1403 |
+
<xsd:documentation>This value indicates that all properties can be reformatted. This value must be used alone.</xsd:documentation>
|
1404 |
+
</xsd:annotation>
|
1405 |
+
</xsd:enumeration>
|
1406 |
+
<xsd:enumeration value="no">
|
1407 |
+
<xsd:annotation>
|
1408 |
+
<xsd:documentation>This value indicates that no properties should be reformatted. This value must be used alone.</xsd:documentation>
|
1409 |
+
</xsd:annotation>
|
1410 |
+
</xsd:enumeration>
|
1411 |
+
</xsd:restriction>
|
1412 |
+
</xsd:simpleType>
|
1413 |
+
<xsd:simpleType name="reformatValueList">
|
1414 |
+
<xsd:list>
|
1415 |
+
<xsd:simpleType>
|
1416 |
+
<xsd:union memberTypes="xlf:XTend">
|
1417 |
+
<xsd:simpleType>
|
1418 |
+
<xsd:restriction base="xsd:string">
|
1419 |
+
<xsd:enumeration value="coord">
|
1420 |
+
<xsd:annotation>
|
1421 |
+
<xsd:documentation>This value indicates that all information in the coord attribute can be modified.</xsd:documentation>
|
1422 |
+
</xsd:annotation>
|
1423 |
+
</xsd:enumeration>
|
1424 |
+
<xsd:enumeration value="coord-x">
|
1425 |
+
<xsd:annotation>
|
1426 |
+
<xsd:documentation>This value indicates that the x information in the coord attribute can be modified.</xsd:documentation>
|
1427 |
+
</xsd:annotation>
|
1428 |
+
</xsd:enumeration>
|
1429 |
+
<xsd:enumeration value="coord-y">
|
1430 |
+
<xsd:annotation>
|
1431 |
+
<xsd:documentation>This value indicates that the y information in the coord attribute can be modified.</xsd:documentation>
|
1432 |
+
</xsd:annotation>
|
1433 |
+
</xsd:enumeration>
|
1434 |
+
<xsd:enumeration value="coord-cx">
|
1435 |
+
<xsd:annotation>
|
1436 |
+
<xsd:documentation>This value indicates that the cx information in the coord attribute can be modified.</xsd:documentation>
|
1437 |
+
</xsd:annotation>
|
1438 |
+
</xsd:enumeration>
|
1439 |
+
<xsd:enumeration value="coord-cy">
|
1440 |
+
<xsd:annotation>
|
1441 |
+
<xsd:documentation>This value indicates that the cy information in the coord attribute can be modified.</xsd:documentation>
|
1442 |
+
</xsd:annotation>
|
1443 |
+
</xsd:enumeration>
|
1444 |
+
<xsd:enumeration value="font">
|
1445 |
+
<xsd:annotation>
|
1446 |
+
<xsd:documentation>This value indicates that all the information in the font attribute can be modified.</xsd:documentation>
|
1447 |
+
</xsd:annotation>
|
1448 |
+
</xsd:enumeration>
|
1449 |
+
<xsd:enumeration value="font-name">
|
1450 |
+
<xsd:annotation>
|
1451 |
+
<xsd:documentation>This value indicates that the name information in the font attribute can be modified.</xsd:documentation>
|
1452 |
+
</xsd:annotation>
|
1453 |
+
</xsd:enumeration>
|
1454 |
+
<xsd:enumeration value="font-size">
|
1455 |
+
<xsd:annotation>
|
1456 |
+
<xsd:documentation>This value indicates that the size information in the font attribute can be modified.</xsd:documentation>
|
1457 |
+
</xsd:annotation>
|
1458 |
+
</xsd:enumeration>
|
1459 |
+
<xsd:enumeration value="font-weight">
|
1460 |
+
<xsd:annotation>
|
1461 |
+
<xsd:documentation>This value indicates that the weight information in the font attribute can be modified.</xsd:documentation>
|
1462 |
+
</xsd:annotation>
|
1463 |
+
</xsd:enumeration>
|
1464 |
+
<xsd:enumeration value="css-style">
|
1465 |
+
<xsd:annotation>
|
1466 |
+
<xsd:documentation>This value indicates that the information in the css-style attribute can be modified.</xsd:documentation>
|
1467 |
+
</xsd:annotation>
|
1468 |
+
</xsd:enumeration>
|
1469 |
+
<xsd:enumeration value="style">
|
1470 |
+
<xsd:annotation>
|
1471 |
+
<xsd:documentation>This value indicates that the information in the style attribute can be modified.</xsd:documentation>
|
1472 |
+
</xsd:annotation>
|
1473 |
+
</xsd:enumeration>
|
1474 |
+
<xsd:enumeration value="ex-style">
|
1475 |
+
<xsd:annotation>
|
1476 |
+
<xsd:documentation>This value indicates that the information in the exstyle attribute can be modified.</xsd:documentation>
|
1477 |
+
</xsd:annotation>
|
1478 |
+
</xsd:enumeration>
|
1479 |
+
</xsd:restriction>
|
1480 |
+
</xsd:simpleType>
|
1481 |
+
</xsd:union>
|
1482 |
+
</xsd:simpleType>
|
1483 |
+
</xsd:list>
|
1484 |
+
</xsd:simpleType>
|
1485 |
+
<xsd:simpleType name="purposeValueList">
|
1486 |
+
<xsd:restriction base="xsd:string">
|
1487 |
+
<xsd:enumeration value="information">
|
1488 |
+
<xsd:annotation>
|
1489 |
+
<xsd:documentation>Indicates that the context is informational in nature, specifying for example, how a term should be translated. Thus, should be displayed to anyone editing the XLIFF document.</xsd:documentation>
|
1490 |
+
</xsd:annotation>
|
1491 |
+
</xsd:enumeration>
|
1492 |
+
<xsd:enumeration value="location">
|
1493 |
+
<xsd:annotation>
|
1494 |
+
<xsd:documentation>Indicates that the context-group is used to specify where the term was found in the translatable source. Thus, it is not displayed.</xsd:documentation>
|
1495 |
+
</xsd:annotation>
|
1496 |
+
</xsd:enumeration>
|
1497 |
+
<xsd:enumeration value="match">
|
1498 |
+
<xsd:annotation>
|
1499 |
+
<xsd:documentation>Indicates that the context information should be used during translation memory lookups. Thus, it is not displayed.</xsd:documentation>
|
1500 |
+
</xsd:annotation>
|
1501 |
+
</xsd:enumeration>
|
1502 |
+
</xsd:restriction>
|
1503 |
+
</xsd:simpleType>
|
1504 |
+
<xsd:simpleType name="alttranstypeValueList">
|
1505 |
+
<xsd:restriction base="xsd:string">
|
1506 |
+
<xsd:enumeration value="proposal">
|
1507 |
+
<xsd:annotation>
|
1508 |
+
<xsd:documentation>Represents a translation proposal from a translation memory or other resource.</xsd:documentation>
|
1509 |
+
</xsd:annotation>
|
1510 |
+
</xsd:enumeration>
|
1511 |
+
<xsd:enumeration value="previous-version">
|
1512 |
+
<xsd:annotation>
|
1513 |
+
<xsd:documentation>Represents a previous version of the target element.</xsd:documentation>
|
1514 |
+
</xsd:annotation>
|
1515 |
+
</xsd:enumeration>
|
1516 |
+
<xsd:enumeration value="rejected">
|
1517 |
+
<xsd:annotation>
|
1518 |
+
<xsd:documentation>Represents a rejected version of the target element.</xsd:documentation>
|
1519 |
+
</xsd:annotation>
|
1520 |
+
</xsd:enumeration>
|
1521 |
+
<xsd:enumeration value="reference">
|
1522 |
+
<xsd:annotation>
|
1523 |
+
<xsd:documentation>Represents a translation to be used for reference purposes only, for example from a related product or a different language.</xsd:documentation>
|
1524 |
+
</xsd:annotation>
|
1525 |
+
</xsd:enumeration>
|
1526 |
+
<xsd:enumeration value="accepted">
|
1527 |
+
<xsd:annotation>
|
1528 |
+
<xsd:documentation>Represents a proposed translation that was used for the translation of the trans-unit, possibly modified.</xsd:documentation>
|
1529 |
+
</xsd:annotation>
|
1530 |
+
</xsd:enumeration>
|
1531 |
+
</xsd:restriction>
|
1532 |
+
</xsd:simpleType>
|
1533 |
+
<!-- Other Types -->
|
1534 |
+
<xsd:complexType name="ElemType_ExternalReference">
|
1535 |
+
<xsd:choice>
|
1536 |
+
<xsd:element ref="xlf:internal-file"/>
|
1537 |
+
<xsd:element ref="xlf:external-file"/>
|
1538 |
+
</xsd:choice>
|
1539 |
+
</xsd:complexType>
|
1540 |
+
<xsd:simpleType name="AttrType_purpose">
|
1541 |
+
<xsd:list>
|
1542 |
+
<xsd:simpleType>
|
1543 |
+
<xsd:union memberTypes="xlf:purposeValueList xlf:XTend"/>
|
1544 |
+
</xsd:simpleType>
|
1545 |
+
</xsd:list>
|
1546 |
+
</xsd:simpleType>
|
1547 |
+
<xsd:simpleType name="AttrType_datatype">
|
1548 |
+
<xsd:union memberTypes="xlf:datatypeValueList xlf:XTend"/>
|
1549 |
+
</xsd:simpleType>
|
1550 |
+
<xsd:simpleType name="AttrType_restype">
|
1551 |
+
<xsd:union memberTypes="xlf:restypeValueList xlf:XTend"/>
|
1552 |
+
</xsd:simpleType>
|
1553 |
+
<xsd:simpleType name="AttrType_alttranstype">
|
1554 |
+
<xsd:union memberTypes="xlf:alttranstypeValueList xlf:XTend"/>
|
1555 |
+
</xsd:simpleType>
|
1556 |
+
<xsd:simpleType name="AttrType_context-type">
|
1557 |
+
<xsd:union memberTypes="xlf:context-typeValueList xlf:XTend"/>
|
1558 |
+
</xsd:simpleType>
|
1559 |
+
<xsd:simpleType name="AttrType_state">
|
1560 |
+
<xsd:union memberTypes="xlf:stateValueList xlf:XTend"/>
|
1561 |
+
</xsd:simpleType>
|
1562 |
+
<xsd:simpleType name="AttrType_state-qualifier">
|
1563 |
+
<xsd:union memberTypes="xlf:state-qualifierValueList xlf:XTend"/>
|
1564 |
+
</xsd:simpleType>
|
1565 |
+
<xsd:simpleType name="AttrType_count-type">
|
1566 |
+
<xsd:union memberTypes="xlf:restypeValueList xlf:count-typeValueList xlf:datatypeValueList xlf:stateValueList xlf:state-qualifierValueList xlf:XTend"/>
|
1567 |
+
</xsd:simpleType>
|
1568 |
+
<xsd:simpleType name="AttrType_InlineDelimiters">
|
1569 |
+
<xsd:union memberTypes="xlf:InlineDelimitersValueList xlf:XTend"/>
|
1570 |
+
</xsd:simpleType>
|
1571 |
+
<xsd:simpleType name="AttrType_InlinePlaceholders">
|
1572 |
+
<xsd:union memberTypes="xlf:InlinePlaceholdersValueList xlf:XTend"/>
|
1573 |
+
</xsd:simpleType>
|
1574 |
+
<xsd:simpleType name="AttrType_size-unit">
|
1575 |
+
<xsd:union memberTypes="xlf:size-unitValueList xlf:XTend"/>
|
1576 |
+
</xsd:simpleType>
|
1577 |
+
<xsd:simpleType name="AttrType_mtype">
|
1578 |
+
<xsd:union memberTypes="xlf:mtypeValueList xlf:XTend"/>
|
1579 |
+
</xsd:simpleType>
|
1580 |
+
<xsd:simpleType name="AttrType_unit">
|
1581 |
+
<xsd:union memberTypes="xlf:unitValueList xlf:XTend"/>
|
1582 |
+
</xsd:simpleType>
|
1583 |
+
<xsd:simpleType name="AttrType_priority">
|
1584 |
+
<xsd:union memberTypes="xlf:priorityValueList"/>
|
1585 |
+
</xsd:simpleType>
|
1586 |
+
<xsd:simpleType name="AttrType_reformat">
|
1587 |
+
<xsd:union memberTypes="xlf:reformatValueYesNo xlf:reformatValueList"/>
|
1588 |
+
</xsd:simpleType>
|
1589 |
+
<xsd:simpleType name="AttrType_YesNo">
|
1590 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
1591 |
+
<xsd:enumeration value="yes"/>
|
1592 |
+
<xsd:enumeration value="no"/>
|
1593 |
+
</xsd:restriction>
|
1594 |
+
</xsd:simpleType>
|
1595 |
+
<xsd:simpleType name="AttrType_Position">
|
1596 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
1597 |
+
<xsd:enumeration value="open"/>
|
1598 |
+
<xsd:enumeration value="close"/>
|
1599 |
+
</xsd:restriction>
|
1600 |
+
</xsd:simpleType>
|
1601 |
+
<xsd:simpleType name="AttrType_assoc">
|
1602 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
1603 |
+
<xsd:enumeration value="preceding"/>
|
1604 |
+
<xsd:enumeration value="following"/>
|
1605 |
+
<xsd:enumeration value="both"/>
|
1606 |
+
</xsd:restriction>
|
1607 |
+
</xsd:simpleType>
|
1608 |
+
<xsd:simpleType name="AttrType_annotates">
|
1609 |
+
<xsd:restriction base="xsd:NMTOKEN">
|
1610 |
+
<xsd:enumeration value="source"/>
|
1611 |
+
<xsd:enumeration value="target"/>
|
1612 |
+
<xsd:enumeration value="general"/>
|
1613 |
+
</xsd:restriction>
|
1614 |
+
</xsd:simpleType>
|
1615 |
+
<xsd:simpleType name="AttrType_Coordinates">
|
1616 |
+
<xsd:annotation>
|
1617 |
+
<xsd:documentation>Values for the attribute 'coord'.</xsd:documentation>
|
1618 |
+
</xsd:annotation>
|
1619 |
+
<xsd:restriction base="xsd:string">
|
1620 |
+
<xsd:pattern value="(-?\d+|#);(-?\d+|#);(-?\d+|#);(-?\d+|#)"/>
|
1621 |
+
</xsd:restriction>
|
1622 |
+
</xsd:simpleType>
|
1623 |
+
<xsd:simpleType name="AttrType_Version">
|
1624 |
+
<xsd:annotation>
|
1625 |
+
<xsd:documentation>Version values: 1.0 and 1.1 are allowed for backward compatibility.</xsd:documentation>
|
1626 |
+
</xsd:annotation>
|
1627 |
+
<xsd:restriction base="xsd:string">
|
1628 |
+
<xsd:enumeration value="1.2"/>
|
1629 |
+
<xsd:enumeration value="1.1"/>
|
1630 |
+
<xsd:enumeration value="1.0"/>
|
1631 |
+
</xsd:restriction>
|
1632 |
+
</xsd:simpleType>
|
1633 |
+
<!-- Groups -->
|
1634 |
+
<xsd:group name="ElemGroup_TextContent">
|
1635 |
+
<xsd:choice>
|
1636 |
+
<xsd:element ref="xlf:g"/>
|
1637 |
+
<xsd:element ref="xlf:bpt"/>
|
1638 |
+
<xsd:element ref="xlf:ept"/>
|
1639 |
+
<xsd:element ref="xlf:ph"/>
|
1640 |
+
<xsd:element ref="xlf:it"/>
|
1641 |
+
<xsd:element ref="xlf:mrk"/>
|
1642 |
+
<xsd:element ref="xlf:x"/>
|
1643 |
+
<xsd:element ref="xlf:bx"/>
|
1644 |
+
<xsd:element ref="xlf:ex"/>
|
1645 |
+
</xsd:choice>
|
1646 |
+
</xsd:group>
|
1647 |
+
<xsd:attributeGroup name="AttrGroup_TextContent">
|
1648 |
+
<xsd:attribute name="id" type="xsd:string" use="required"/>
|
1649 |
+
<xsd:attribute name="xid" type="xsd:string" use="optional"/>
|
1650 |
+
<xsd:attribute name="equiv-text" type="xsd:string" use="optional"/>
|
1651 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
1652 |
+
</xsd:attributeGroup>
|
1653 |
+
<!-- XLIFF Structure -->
|
1654 |
+
<xsd:element name="xliff">
|
1655 |
+
<xsd:complexType>
|
1656 |
+
<xsd:sequence maxOccurs="unbounded">
|
1657 |
+
<xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
|
1658 |
+
<xsd:element ref="xlf:file"/>
|
1659 |
+
</xsd:sequence>
|
1660 |
+
<xsd:attribute name="version" type="xlf:AttrType_Version" use="required"/>
|
1661 |
+
<xsd:attribute ref="xml:lang" use="optional"/>
|
1662 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
1663 |
+
</xsd:complexType>
|
1664 |
+
</xsd:element>
|
1665 |
+
<xsd:element name="file">
|
1666 |
+
<xsd:complexType>
|
1667 |
+
<xsd:sequence>
|
1668 |
+
<xsd:element minOccurs="0" ref="xlf:header"/>
|
1669 |
+
<xsd:element ref="xlf:body"/>
|
1670 |
+
</xsd:sequence>
|
1671 |
+
<xsd:attribute name="original" type="xsd:string" use="required"/>
|
1672 |
+
<xsd:attribute name="source-language" type="xsd:language" use="required"/>
|
1673 |
+
<xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="required"/>
|
1674 |
+
<xsd:attribute name="tool-id" type="xsd:string" use="optional"/>
|
1675 |
+
<xsd:attribute name="date" type="xsd:dateTime" use="optional"/>
|
1676 |
+
<xsd:attribute ref="xml:space" use="optional"/>
|
1677 |
+
<xsd:attribute name="category" type="xsd:string" use="optional"/>
|
1678 |
+
<xsd:attribute name="target-language" type="xsd:language" use="optional"/>
|
1679 |
+
<xsd:attribute name="product-name" type="xsd:string" use="optional"/>
|
1680 |
+
<xsd:attribute name="product-version" type="xsd:string" use="optional"/>
|
1681 |
+
<xsd:attribute name="build-num" type="xsd:string" use="optional"/>
|
1682 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
1683 |
+
</xsd:complexType>
|
1684 |
+
<xsd:unique name="U_group_id">
|
1685 |
+
<xsd:selector xpath=".//xlf:group"/>
|
1686 |
+
<xsd:field xpath="@id"/>
|
1687 |
+
</xsd:unique>
|
1688 |
+
<xsd:key name="K_unit_id">
|
1689 |
+
<xsd:selector xpath=".//xlf:trans-unit|.//xlf:bin-unit"/>
|
1690 |
+
<xsd:field xpath="@id"/>
|
1691 |
+
</xsd:key>
|
1692 |
+
<xsd:keyref name="KR_unit_id" refer="xlf:K_unit_id">
|
1693 |
+
<xsd:selector xpath=".//bpt|.//ept|.//it|.//ph|.//g|.//x|.//bx|.//ex|.//sub"/>
|
1694 |
+
<xsd:field xpath="@xid"/>
|
1695 |
+
</xsd:keyref>
|
1696 |
+
<xsd:key name="K_tool-id">
|
1697 |
+
<xsd:selector xpath="xlf:header/xlf:tool"/>
|
1698 |
+
<xsd:field xpath="@tool-id"/>
|
1699 |
+
</xsd:key>
|
1700 |
+
<xsd:keyref name="KR_file_tool-id" refer="xlf:K_tool-id">
|
1701 |
+
<xsd:selector xpath="."/>
|
1702 |
+
<xsd:field xpath="@tool-id"/>
|
1703 |
+
</xsd:keyref>
|
1704 |
+
<xsd:keyref name="KR_phase_tool-id" refer="xlf:K_tool-id">
|
1705 |
+
<xsd:selector xpath="xlf:header/xlf:phase-group/xlf:phase"/>
|
1706 |
+
<xsd:field xpath="@tool-id"/>
|
1707 |
+
</xsd:keyref>
|
1708 |
+
<xsd:keyref name="KR_alt-trans_tool-id" refer="xlf:K_tool-id">
|
1709 |
+
<xsd:selector xpath=".//xlf:trans-unit/xlf:alt-trans"/>
|
1710 |
+
<xsd:field xpath="@tool-id"/>
|
1711 |
+
</xsd:keyref>
|
1712 |
+
<xsd:key name="K_count-group_name">
|
1713 |
+
<xsd:selector xpath=".//xlf:count-group"/>
|
1714 |
+
<xsd:field xpath="@name"/>
|
1715 |
+
</xsd:key>
|
1716 |
+
<xsd:unique name="U_context-group_name">
|
1717 |
+
<xsd:selector xpath=".//xlf:context-group"/>
|
1718 |
+
<xsd:field xpath="@name"/>
|
1719 |
+
</xsd:unique>
|
1720 |
+
<xsd:key name="K_phase-name">
|
1721 |
+
<xsd:selector xpath="xlf:header/xlf:phase-group/xlf:phase"/>
|
1722 |
+
<xsd:field xpath="@phase-name"/>
|
1723 |
+
</xsd:key>
|
1724 |
+
<xsd:keyref name="KR_phase-name" refer="xlf:K_phase-name">
|
1725 |
+
<xsd:selector xpath=".//xlf:count|.//xlf:trans-unit|.//xlf:target|.//bin-unit|.//bin-target"/>
|
1726 |
+
<xsd:field xpath="@phase-name"/>
|
1727 |
+
</xsd:keyref>
|
1728 |
+
<xsd:unique name="U_uid">
|
1729 |
+
<xsd:selector xpath=".//xlf:external-file"/>
|
1730 |
+
<xsd:field xpath="@uid"/>
|
1731 |
+
</xsd:unique>
|
1732 |
+
</xsd:element>
|
1733 |
+
<xsd:element name="header">
|
1734 |
+
<xsd:complexType>
|
1735 |
+
<xsd:sequence>
|
1736 |
+
<xsd:element minOccurs="0" name="skl" type="xlf:ElemType_ExternalReference"/>
|
1737 |
+
<xsd:element minOccurs="0" ref="xlf:phase-group"/>
|
1738 |
+
<xsd:choice maxOccurs="unbounded" minOccurs="0">
|
1739 |
+
<xsd:element name="glossary" type="xlf:ElemType_ExternalReference"/>
|
1740 |
+
<xsd:element name="reference" type="xlf:ElemType_ExternalReference"/>
|
1741 |
+
<xsd:element ref="xlf:count-group"/>
|
1742 |
+
<xsd:element ref="xlf:note"/>
|
1743 |
+
<xsd:element ref="xlf:tool"/>
|
1744 |
+
</xsd:choice>
|
1745 |
+
<xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
|
1746 |
+
</xsd:sequence>
|
1747 |
+
</xsd:complexType>
|
1748 |
+
</xsd:element>
|
1749 |
+
<xsd:element name="internal-file">
|
1750 |
+
<xsd:complexType>
|
1751 |
+
<xsd:simpleContent>
|
1752 |
+
<xsd:extension base="xsd:string">
|
1753 |
+
<xsd:attribute name="form" type="xsd:string"/>
|
1754 |
+
<xsd:attribute name="crc" type="xsd:NMTOKEN"/>
|
1755 |
+
</xsd:extension>
|
1756 |
+
</xsd:simpleContent>
|
1757 |
+
</xsd:complexType>
|
1758 |
+
</xsd:element>
|
1759 |
+
<xsd:element name="external-file">
|
1760 |
+
<xsd:complexType>
|
1761 |
+
<xsd:attribute name="href" type="xsd:string" use="required"/>
|
1762 |
+
<xsd:attribute name="crc" type="xsd:NMTOKEN"/>
|
1763 |
+
<xsd:attribute name="uid" type="xsd:NMTOKEN"/>
|
1764 |
+
</xsd:complexType>
|
1765 |
+
</xsd:element>
|
1766 |
+
<xsd:element name="note">
|
1767 |
+
<xsd:complexType>
|
1768 |
+
<xsd:simpleContent>
|
1769 |
+
<xsd:extension base="xsd:string">
|
1770 |
+
<xsd:attribute ref="xml:lang" use="optional"/>
|
1771 |
+
<xsd:attribute default="1" name="priority" type="xlf:AttrType_priority" use="optional"/>
|
1772 |
+
<xsd:attribute name="from" type="xsd:string" use="optional"/>
|
1773 |
+
<xsd:attribute default="general" name="annotates" type="xlf:AttrType_annotates" use="optional"/>
|
1774 |
+
</xsd:extension>
|
1775 |
+
</xsd:simpleContent>
|
1776 |
+
</xsd:complexType>
|
1777 |
+
</xsd:element>
|
1778 |
+
<xsd:element name="phase-group">
|
1779 |
+
<xsd:complexType>
|
1780 |
+
<xsd:sequence maxOccurs="unbounded">
|
1781 |
+
<xsd:element ref="xlf:phase"/>
|
1782 |
+
</xsd:sequence>
|
1783 |
+
</xsd:complexType>
|
1784 |
+
</xsd:element>
|
1785 |
+
<xsd:element name="phase">
|
1786 |
+
<xsd:complexType>
|
1787 |
+
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
|
1788 |
+
<xsd:element ref="xlf:note"/>
|
1789 |
+
</xsd:sequence>
|
1790 |
+
<xsd:attribute name="phase-name" type="xsd:string" use="required"/>
|
1791 |
+
<xsd:attribute name="process-name" type="xsd:string" use="required"/>
|
1792 |
+
<xsd:attribute name="company-name" type="xsd:string" use="optional"/>
|
1793 |
+
<xsd:attribute name="tool-id" type="xsd:string" use="optional"/>
|
1794 |
+
<xsd:attribute name="date" type="xsd:dateTime" use="optional"/>
|
1795 |
+
<xsd:attribute name="job-id" type="xsd:string" use="optional"/>
|
1796 |
+
<xsd:attribute name="contact-name" type="xsd:string" use="optional"/>
|
1797 |
+
<xsd:attribute name="contact-email" type="xsd:string" use="optional"/>
|
1798 |
+
<xsd:attribute name="contact-phone" type="xsd:string" use="optional"/>
|
1799 |
+
</xsd:complexType>
|
1800 |
+
</xsd:element>
|
1801 |
+
<xsd:element name="count-group">
|
1802 |
+
<xsd:complexType>
|
1803 |
+
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
|
1804 |
+
<xsd:element ref="xlf:count"/>
|
1805 |
+
</xsd:sequence>
|
1806 |
+
<xsd:attribute name="name" type="xsd:string" use="required"/>
|
1807 |
+
</xsd:complexType>
|
1808 |
+
</xsd:element>
|
1809 |
+
<xsd:element name="count">
|
1810 |
+
<xsd:complexType>
|
1811 |
+
<xsd:simpleContent>
|
1812 |
+
<xsd:extension base="xsd:string">
|
1813 |
+
<xsd:attribute name="count-type" type="xlf:AttrType_count-type" use="optional"/>
|
1814 |
+
<xsd:attribute name="phase-name" type="xsd:string" use="optional"/>
|
1815 |
+
<xsd:attribute default="word" name="unit" type="xlf:AttrType_unit" use="optional"/>
|
1816 |
+
</xsd:extension>
|
1817 |
+
</xsd:simpleContent>
|
1818 |
+
</xsd:complexType>
|
1819 |
+
</xsd:element>
|
1820 |
+
<xsd:element name="context-group">
|
1821 |
+
<xsd:complexType>
|
1822 |
+
<xsd:sequence maxOccurs="unbounded">
|
1823 |
+
<xsd:element ref="xlf:context"/>
|
1824 |
+
</xsd:sequence>
|
1825 |
+
<xsd:attribute name="name" type="xsd:string" use="optional"/>
|
1826 |
+
<xsd:attribute name="crc" type="xsd:NMTOKEN" use="optional"/>
|
1827 |
+
<xsd:attribute name="purpose" type="xlf:AttrType_purpose" use="optional"/>
|
1828 |
+
</xsd:complexType>
|
1829 |
+
</xsd:element>
|
1830 |
+
<xsd:element name="context">
|
1831 |
+
<xsd:complexType>
|
1832 |
+
<xsd:simpleContent>
|
1833 |
+
<xsd:extension base="xsd:string">
|
1834 |
+
<xsd:attribute name="context-type" type="xlf:AttrType_context-type" use="required"/>
|
1835 |
+
<xsd:attribute default="no" name="match-mandatory" type="xlf:AttrType_YesNo" use="optional"/>
|
1836 |
+
<xsd:attribute name="crc" type="xsd:NMTOKEN" use="optional"/>
|
1837 |
+
</xsd:extension>
|
1838 |
+
</xsd:simpleContent>
|
1839 |
+
</xsd:complexType>
|
1840 |
+
</xsd:element>
|
1841 |
+
<xsd:element name="tool">
|
1842 |
+
<xsd:complexType mixed="true">
|
1843 |
+
<xsd:sequence>
|
1844 |
+
<xsd:any namespace="##any" processContents="strict" minOccurs="0" maxOccurs="unbounded"/>
|
1845 |
+
</xsd:sequence>
|
1846 |
+
<xsd:attribute name="tool-id" type="xsd:string" use="required"/>
|
1847 |
+
<xsd:attribute name="tool-name" type="xsd:string" use="required"/>
|
1848 |
+
<xsd:attribute name="tool-version" type="xsd:string" use="optional"/>
|
1849 |
+
<xsd:attribute name="tool-company" type="xsd:string" use="optional"/>
|
1850 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
1851 |
+
</xsd:complexType>
|
1852 |
+
</xsd:element>
|
1853 |
+
<xsd:element name="body">
|
1854 |
+
<xsd:complexType>
|
1855 |
+
<xsd:choice maxOccurs="unbounded" minOccurs="0">
|
1856 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:group"/>
|
1857 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:trans-unit"/>
|
1858 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:bin-unit"/>
|
1859 |
+
</xsd:choice>
|
1860 |
+
</xsd:complexType>
|
1861 |
+
</xsd:element>
|
1862 |
+
<xsd:element name="group">
|
1863 |
+
<xsd:complexType>
|
1864 |
+
<xsd:sequence>
|
1865 |
+
<xsd:sequence>
|
1866 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:context-group"/>
|
1867 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:count-group"/>
|
1868 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:note"/>
|
1869 |
+
<xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
|
1870 |
+
</xsd:sequence>
|
1871 |
+
<xsd:choice maxOccurs="unbounded">
|
1872 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:group"/>
|
1873 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:trans-unit"/>
|
1874 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:bin-unit"/>
|
1875 |
+
</xsd:choice>
|
1876 |
+
</xsd:sequence>
|
1877 |
+
<xsd:attribute name="id" type="xsd:string" use="optional"/>
|
1878 |
+
<xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
|
1879 |
+
<xsd:attribute default="default" ref="xml:space" use="optional"/>
|
1880 |
+
<xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
|
1881 |
+
<xsd:attribute name="resname" type="xsd:string" use="optional"/>
|
1882 |
+
<xsd:attribute name="extradata" type="xsd:string" use="optional"/>
|
1883 |
+
<xsd:attribute name="extype" type="xsd:string" use="optional"/>
|
1884 |
+
<xsd:attribute name="help-id" type="xsd:NMTOKEN" use="optional"/>
|
1885 |
+
<xsd:attribute name="menu" type="xsd:string" use="optional"/>
|
1886 |
+
<xsd:attribute name="menu-option" type="xsd:string" use="optional"/>
|
1887 |
+
<xsd:attribute name="menu-name" type="xsd:string" use="optional"/>
|
1888 |
+
<xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
|
1889 |
+
<xsd:attribute name="font" type="xsd:string" use="optional"/>
|
1890 |
+
<xsd:attribute name="css-style" type="xsd:string" use="optional"/>
|
1891 |
+
<xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
|
1892 |
+
<xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
|
1893 |
+
<xsd:attribute default="yes" name="translate" type="xlf:AttrType_YesNo" use="optional"/>
|
1894 |
+
<xsd:attribute default="yes" name="reformat" type="xlf:AttrType_reformat" use="optional"/>
|
1895 |
+
<xsd:attribute default="pixel" name="size-unit" type="xlf:AttrType_size-unit" use="optional"/>
|
1896 |
+
<xsd:attribute name="maxwidth" type="xsd:NMTOKEN" use="optional"/>
|
1897 |
+
<xsd:attribute name="minwidth" type="xsd:NMTOKEN" use="optional"/>
|
1898 |
+
<xsd:attribute name="maxheight" type="xsd:NMTOKEN" use="optional"/>
|
1899 |
+
<xsd:attribute name="minheight" type="xsd:NMTOKEN" use="optional"/>
|
1900 |
+
<xsd:attribute name="maxbytes" type="xsd:NMTOKEN" use="optional"/>
|
1901 |
+
<xsd:attribute name="minbytes" type="xsd:NMTOKEN" use="optional"/>
|
1902 |
+
<xsd:attribute name="charclass" type="xsd:string" use="optional"/>
|
1903 |
+
<xsd:attribute default="no" name="merged-trans" type="xlf:AttrType_YesNo" use="optional"/>
|
1904 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
1905 |
+
</xsd:complexType>
|
1906 |
+
</xsd:element>
|
1907 |
+
<xsd:element name="trans-unit">
|
1908 |
+
<xsd:complexType>
|
1909 |
+
<xsd:sequence>
|
1910 |
+
<xsd:element ref="xlf:source"/>
|
1911 |
+
<xsd:element minOccurs="0" ref="xlf:seg-source"/>
|
1912 |
+
<xsd:element minOccurs="0" ref="xlf:target"/>
|
1913 |
+
<xsd:choice maxOccurs="unbounded" minOccurs="0">
|
1914 |
+
<xsd:element ref="xlf:context-group"/>
|
1915 |
+
<xsd:element ref="xlf:count-group"/>
|
1916 |
+
<xsd:element ref="xlf:note"/>
|
1917 |
+
<xsd:element ref="xlf:alt-trans"/>
|
1918 |
+
</xsd:choice>
|
1919 |
+
<xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
|
1920 |
+
</xsd:sequence>
|
1921 |
+
<xsd:attribute name="id" type="xsd:string" use="required"/>
|
1922 |
+
<xsd:attribute name="approved" type="xlf:AttrType_YesNo" use="optional"/>
|
1923 |
+
<xsd:attribute default="yes" name="translate" type="xlf:AttrType_YesNo" use="optional"/>
|
1924 |
+
<xsd:attribute default="yes" name="reformat" type="xlf:AttrType_reformat" use="optional"/>
|
1925 |
+
<xsd:attribute default="default" ref="xml:space" use="optional"/>
|
1926 |
+
<xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
|
1927 |
+
<xsd:attribute name="phase-name" type="xsd:string" use="optional"/>
|
1928 |
+
<xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
|
1929 |
+
<xsd:attribute name="resname" type="xsd:string" use="optional"/>
|
1930 |
+
<xsd:attribute name="extradata" type="xsd:string" use="optional"/>
|
1931 |
+
<xsd:attribute name="extype" type="xsd:string" use="optional"/>
|
1932 |
+
<xsd:attribute name="help-id" type="xsd:NMTOKEN" use="optional"/>
|
1933 |
+
<xsd:attribute name="menu" type="xsd:string" use="optional"/>
|
1934 |
+
<xsd:attribute name="menu-option" type="xsd:string" use="optional"/>
|
1935 |
+
<xsd:attribute name="menu-name" type="xsd:string" use="optional"/>
|
1936 |
+
<xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
|
1937 |
+
<xsd:attribute name="font" type="xsd:string" use="optional"/>
|
1938 |
+
<xsd:attribute name="css-style" type="xsd:string" use="optional"/>
|
1939 |
+
<xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
|
1940 |
+
<xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
|
1941 |
+
<xsd:attribute default="pixel" name="size-unit" type="xlf:AttrType_size-unit" use="optional"/>
|
1942 |
+
<xsd:attribute name="maxwidth" type="xsd:NMTOKEN" use="optional"/>
|
1943 |
+
<xsd:attribute name="minwidth" type="xsd:NMTOKEN" use="optional"/>
|
1944 |
+
<xsd:attribute name="maxheight" type="xsd:NMTOKEN" use="optional"/>
|
1945 |
+
<xsd:attribute name="minheight" type="xsd:NMTOKEN" use="optional"/>
|
1946 |
+
<xsd:attribute name="maxbytes" type="xsd:NMTOKEN" use="optional"/>
|
1947 |
+
<xsd:attribute name="minbytes" type="xsd:NMTOKEN" use="optional"/>
|
1948 |
+
<xsd:attribute name="charclass" type="xsd:string" use="optional"/>
|
1949 |
+
<xsd:attribute default="yes" name="merged-trans" type="xlf:AttrType_YesNo" use="optional"/>
|
1950 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
1951 |
+
</xsd:complexType>
|
1952 |
+
<xsd:unique name="U_tu_segsrc_mid">
|
1953 |
+
<xsd:selector xpath="./xlf:seg-source/xlf:mrk"/>
|
1954 |
+
<xsd:field xpath="@mid"/>
|
1955 |
+
</xsd:unique>
|
1956 |
+
<xsd:keyref name="KR_tu_segsrc_mid" refer="xlf:U_tu_segsrc_mid">
|
1957 |
+
<xsd:selector xpath="./xlf:target/xlf:mrk|./xlf:alt-trans"/>
|
1958 |
+
<xsd:field xpath="@mid"/>
|
1959 |
+
</xsd:keyref>
|
1960 |
+
</xsd:element>
|
1961 |
+
<xsd:element name="source">
|
1962 |
+
<xsd:complexType mixed="true">
|
1963 |
+
<xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
|
1964 |
+
<xsd:attribute ref="xml:lang" use="optional"/>
|
1965 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
1966 |
+
</xsd:complexType>
|
1967 |
+
<xsd:unique name="U_source_bpt_rid">
|
1968 |
+
<xsd:selector xpath=".//xlf:bpt"/>
|
1969 |
+
<xsd:field xpath="@rid"/>
|
1970 |
+
</xsd:unique>
|
1971 |
+
<xsd:keyref name="KR_source_ept_rid" refer="xlf:U_source_bpt_rid">
|
1972 |
+
<xsd:selector xpath=".//xlf:ept"/>
|
1973 |
+
<xsd:field xpath="@rid"/>
|
1974 |
+
</xsd:keyref>
|
1975 |
+
<xsd:unique name="U_source_bx_rid">
|
1976 |
+
<xsd:selector xpath=".//xlf:bx"/>
|
1977 |
+
<xsd:field xpath="@rid"/>
|
1978 |
+
</xsd:unique>
|
1979 |
+
<xsd:keyref name="KR_source_ex_rid" refer="xlf:U_source_bx_rid">
|
1980 |
+
<xsd:selector xpath=".//xlf:ex"/>
|
1981 |
+
<xsd:field xpath="@rid"/>
|
1982 |
+
</xsd:keyref>
|
1983 |
+
</xsd:element>
|
1984 |
+
<xsd:element name="seg-source">
|
1985 |
+
<xsd:complexType mixed="true">
|
1986 |
+
<xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
|
1987 |
+
<xsd:attribute ref="xml:lang" use="optional"/>
|
1988 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
1989 |
+
</xsd:complexType>
|
1990 |
+
<xsd:unique name="U_segsrc_bpt_rid">
|
1991 |
+
<xsd:selector xpath=".//xlf:bpt"/>
|
1992 |
+
<xsd:field xpath="@rid"/>
|
1993 |
+
</xsd:unique>
|
1994 |
+
<xsd:keyref name="KR_segsrc_ept_rid" refer="xlf:U_segsrc_bpt_rid">
|
1995 |
+
<xsd:selector xpath=".//xlf:ept"/>
|
1996 |
+
<xsd:field xpath="@rid"/>
|
1997 |
+
</xsd:keyref>
|
1998 |
+
<xsd:unique name="U_segsrc_bx_rid">
|
1999 |
+
<xsd:selector xpath=".//xlf:bx"/>
|
2000 |
+
<xsd:field xpath="@rid"/>
|
2001 |
+
</xsd:unique>
|
2002 |
+
<xsd:keyref name="KR_segsrc_ex_rid" refer="xlf:U_segsrc_bx_rid">
|
2003 |
+
<xsd:selector xpath=".//xlf:ex"/>
|
2004 |
+
<xsd:field xpath="@rid"/>
|
2005 |
+
</xsd:keyref>
|
2006 |
+
</xsd:element>
|
2007 |
+
<xsd:element name="target">
|
2008 |
+
<xsd:complexType mixed="true">
|
2009 |
+
<xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
|
2010 |
+
<xsd:attribute name="state" type="xlf:AttrType_state" use="optional"/>
|
2011 |
+
<xsd:attribute name="state-qualifier" type="xlf:AttrType_state-qualifier" use="optional"/>
|
2012 |
+
<xsd:attribute name="phase-name" type="xsd:NMTOKEN" use="optional"/>
|
2013 |
+
<xsd:attribute ref="xml:lang" use="optional"/>
|
2014 |
+
<xsd:attribute name="resname" type="xsd:string" use="optional"/>
|
2015 |
+
<xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
|
2016 |
+
<xsd:attribute name="font" type="xsd:string" use="optional"/>
|
2017 |
+
<xsd:attribute name="css-style" type="xsd:string" use="optional"/>
|
2018 |
+
<xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
|
2019 |
+
<xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
|
2020 |
+
<xsd:attribute default="yes" name="equiv-trans" type="xlf:AttrType_YesNo" use="optional"/>
|
2021 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
2022 |
+
</xsd:complexType>
|
2023 |
+
<xsd:unique name="U_target_bpt_rid">
|
2024 |
+
<xsd:selector xpath=".//xlf:bpt"/>
|
2025 |
+
<xsd:field xpath="@rid"/>
|
2026 |
+
</xsd:unique>
|
2027 |
+
<xsd:keyref name="KR_target_ept_rid" refer="xlf:U_target_bpt_rid">
|
2028 |
+
<xsd:selector xpath=".//xlf:ept"/>
|
2029 |
+
<xsd:field xpath="@rid"/>
|
2030 |
+
</xsd:keyref>
|
2031 |
+
<xsd:unique name="U_target_bx_rid">
|
2032 |
+
<xsd:selector xpath=".//xlf:bx"/>
|
2033 |
+
<xsd:field xpath="@rid"/>
|
2034 |
+
</xsd:unique>
|
2035 |
+
<xsd:keyref name="KR_target_ex_rid" refer="xlf:U_target_bx_rid">
|
2036 |
+
<xsd:selector xpath=".//xlf:ex"/>
|
2037 |
+
<xsd:field xpath="@rid"/>
|
2038 |
+
</xsd:keyref>
|
2039 |
+
</xsd:element>
|
2040 |
+
<xsd:element name="alt-trans">
|
2041 |
+
<xsd:complexType>
|
2042 |
+
<xsd:sequence>
|
2043 |
+
<xsd:element minOccurs="0" ref="xlf:source"/>
|
2044 |
+
<xsd:element minOccurs="0" ref="xlf:seg-source"/>
|
2045 |
+
<xsd:element maxOccurs="1" ref="xlf:target"/>
|
2046 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:context-group"/>
|
2047 |
+
<xsd:element maxOccurs="unbounded" minOccurs="0" ref="xlf:note"/>
|
2048 |
+
<xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
|
2049 |
+
</xsd:sequence>
|
2050 |
+
<xsd:attribute name="match-quality" type="xsd:string" use="optional"/>
|
2051 |
+
<xsd:attribute name="tool-id" type="xsd:string" use="optional"/>
|
2052 |
+
<xsd:attribute name="crc" type="xsd:NMTOKEN" use="optional"/>
|
2053 |
+
<xsd:attribute ref="xml:lang" use="optional"/>
|
2054 |
+
<xsd:attribute name="origin" type="xsd:string" use="optional"/>
|
2055 |
+
<xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
|
2056 |
+
<xsd:attribute default="default" ref="xml:space" use="optional"/>
|
2057 |
+
<xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
|
2058 |
+
<xsd:attribute name="resname" type="xsd:string" use="optional"/>
|
2059 |
+
<xsd:attribute name="extradata" type="xsd:string" use="optional"/>
|
2060 |
+
<xsd:attribute name="extype" type="xsd:string" use="optional"/>
|
2061 |
+
<xsd:attribute name="help-id" type="xsd:NMTOKEN" use="optional"/>
|
2062 |
+
<xsd:attribute name="menu" type="xsd:string" use="optional"/>
|
2063 |
+
<xsd:attribute name="menu-option" type="xsd:string" use="optional"/>
|
2064 |
+
<xsd:attribute name="menu-name" type="xsd:string" use="optional"/>
|
2065 |
+
<xsd:attribute name="mid" type="xsd:NMTOKEN" use="optional"/>
|
2066 |
+
<xsd:attribute name="coord" type="xlf:AttrType_Coordinates" use="optional"/>
|
2067 |
+
<xsd:attribute name="font" type="xsd:string" use="optional"/>
|
2068 |
+
<xsd:attribute name="css-style" type="xsd:string" use="optional"/>
|
2069 |
+
<xsd:attribute name="style" type="xsd:NMTOKEN" use="optional"/>
|
2070 |
+
<xsd:attribute name="exstyle" type="xsd:NMTOKEN" use="optional"/>
|
2071 |
+
<xsd:attribute name="phase-name" type="xsd:NMTOKEN" use="optional"/>
|
2072 |
+
<xsd:attribute default="proposal" name="alttranstype" type="xlf:AttrType_alttranstype" use="optional"/>
|
2073 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
2074 |
+
</xsd:complexType>
|
2075 |
+
<xsd:unique name="U_at_segsrc_mid">
|
2076 |
+
<xsd:selector xpath="./xlf:seg-source/xlf:mrk"/>
|
2077 |
+
<xsd:field xpath="@mid"/>
|
2078 |
+
</xsd:unique>
|
2079 |
+
<xsd:keyref name="KR_at_segsrc_mid" refer="xlf:U_at_segsrc_mid">
|
2080 |
+
<xsd:selector xpath="./xlf:target/xlf:mrk"/>
|
2081 |
+
<xsd:field xpath="@mid"/>
|
2082 |
+
</xsd:keyref>
|
2083 |
+
</xsd:element>
|
2084 |
+
<xsd:element name="bin-unit">
|
2085 |
+
<xsd:complexType>
|
2086 |
+
<xsd:sequence>
|
2087 |
+
<xsd:element ref="xlf:bin-source"/>
|
2088 |
+
<xsd:element minOccurs="0" ref="xlf:bin-target"/>
|
2089 |
+
<xsd:choice maxOccurs="unbounded" minOccurs="0">
|
2090 |
+
<xsd:element ref="xlf:context-group"/>
|
2091 |
+
<xsd:element ref="xlf:count-group"/>
|
2092 |
+
<xsd:element ref="xlf:note"/>
|
2093 |
+
<xsd:element ref="xlf:trans-unit"/>
|
2094 |
+
</xsd:choice>
|
2095 |
+
<xsd:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="strict"/>
|
2096 |
+
</xsd:sequence>
|
2097 |
+
<xsd:attribute name="id" type="xsd:string" use="required"/>
|
2098 |
+
<xsd:attribute name="mime-type" type="xlf:mime-typeValueList" use="required"/>
|
2099 |
+
<xsd:attribute name="approved" type="xlf:AttrType_YesNo" use="optional"/>
|
2100 |
+
<xsd:attribute default="yes" name="translate" type="xlf:AttrType_YesNo" use="optional"/>
|
2101 |
+
<xsd:attribute default="yes" name="reformat" type="xlf:AttrType_reformat" use="optional"/>
|
2102 |
+
<xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
|
2103 |
+
<xsd:attribute name="resname" type="xsd:string" use="optional"/>
|
2104 |
+
<xsd:attribute name="phase-name" type="xsd:string" use="optional"/>
|
2105 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
2106 |
+
</xsd:complexType>
|
2107 |
+
</xsd:element>
|
2108 |
+
<xsd:element name="bin-source">
|
2109 |
+
<xsd:complexType>
|
2110 |
+
<xsd:choice>
|
2111 |
+
<xsd:element ref="xlf:internal-file"/>
|
2112 |
+
<xsd:element ref="xlf:external-file"/>
|
2113 |
+
</xsd:choice>
|
2114 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
2115 |
+
</xsd:complexType>
|
2116 |
+
</xsd:element>
|
2117 |
+
<xsd:element name="bin-target">
|
2118 |
+
<xsd:complexType>
|
2119 |
+
<xsd:choice>
|
2120 |
+
<xsd:element ref="xlf:internal-file"/>
|
2121 |
+
<xsd:element ref="xlf:external-file"/>
|
2122 |
+
</xsd:choice>
|
2123 |
+
<xsd:attribute name="mime-type" type="xlf:mime-typeValueList" use="optional"/>
|
2124 |
+
<xsd:attribute name="state" type="xlf:AttrType_state" use="optional"/>
|
2125 |
+
<xsd:attribute name="state-qualifier" type="xlf:AttrType_state-qualifier" use="optional"/>
|
2126 |
+
<xsd:attribute name="phase-name" type="xsd:NMTOKEN" use="optional"/>
|
2127 |
+
<xsd:attribute name="restype" type="xlf:AttrType_restype" use="optional"/>
|
2128 |
+
<xsd:attribute name="resname" type="xsd:string" use="optional"/>
|
2129 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
2130 |
+
</xsd:complexType>
|
2131 |
+
</xsd:element>
|
2132 |
+
<!-- Element for inline codes -->
|
2133 |
+
<xsd:element name="g">
|
2134 |
+
<xsd:complexType mixed="true">
|
2135 |
+
<xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
|
2136 |
+
<xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
|
2137 |
+
<xsd:attribute default="yes" name="clone" type="xlf:AttrType_YesNo" use="optional"/>
|
2138 |
+
<xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
|
2139 |
+
</xsd:complexType>
|
2140 |
+
</xsd:element>
|
2141 |
+
<xsd:element name="x">
|
2142 |
+
<xsd:complexType>
|
2143 |
+
<xsd:attribute name="ctype" type="xlf:AttrType_InlinePlaceholders" use="optional"/>
|
2144 |
+
<xsd:attribute default="yes" name="clone" type="xlf:AttrType_YesNo" use="optional"/>
|
2145 |
+
<xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
|
2146 |
+
</xsd:complexType>
|
2147 |
+
</xsd:element>
|
2148 |
+
<xsd:element name="bx">
|
2149 |
+
<xsd:complexType>
|
2150 |
+
<xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
|
2151 |
+
<xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
|
2152 |
+
<xsd:attribute default="yes" name="clone" type="xlf:AttrType_YesNo" use="optional"/>
|
2153 |
+
<xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
|
2154 |
+
</xsd:complexType>
|
2155 |
+
</xsd:element>
|
2156 |
+
<xsd:element name="ex">
|
2157 |
+
<xsd:complexType>
|
2158 |
+
<xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
|
2159 |
+
<xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
|
2160 |
+
</xsd:complexType>
|
2161 |
+
</xsd:element>
|
2162 |
+
<xsd:element name="ph">
|
2163 |
+
<xsd:complexType mixed="true">
|
2164 |
+
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
|
2165 |
+
<xsd:element ref="xlf:sub"/>
|
2166 |
+
</xsd:sequence>
|
2167 |
+
<xsd:attribute name="ctype" type="xlf:AttrType_InlinePlaceholders" use="optional"/>
|
2168 |
+
<xsd:attribute name="crc" type="xsd:string" use="optional"/>
|
2169 |
+
<xsd:attribute name="assoc" type="xlf:AttrType_assoc" use="optional"/>
|
2170 |
+
<xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
|
2171 |
+
</xsd:complexType>
|
2172 |
+
</xsd:element>
|
2173 |
+
<xsd:element name="bpt">
|
2174 |
+
<xsd:complexType mixed="true">
|
2175 |
+
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
|
2176 |
+
<xsd:element ref="xlf:sub"/>
|
2177 |
+
</xsd:sequence>
|
2178 |
+
<xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
|
2179 |
+
<xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
|
2180 |
+
<xsd:attribute name="crc" type="xsd:string" use="optional"/>
|
2181 |
+
<xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
|
2182 |
+
</xsd:complexType>
|
2183 |
+
</xsd:element>
|
2184 |
+
<xsd:element name="ept">
|
2185 |
+
<xsd:complexType mixed="true">
|
2186 |
+
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
|
2187 |
+
<xsd:element ref="xlf:sub"/>
|
2188 |
+
</xsd:sequence>
|
2189 |
+
<xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
|
2190 |
+
<xsd:attribute name="crc" type="xsd:string" use="optional"/>
|
2191 |
+
<xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
|
2192 |
+
</xsd:complexType>
|
2193 |
+
</xsd:element>
|
2194 |
+
<xsd:element name="it">
|
2195 |
+
<xsd:complexType mixed="true">
|
2196 |
+
<xsd:sequence maxOccurs="unbounded" minOccurs="0">
|
2197 |
+
<xsd:element ref="xlf:sub"/>
|
2198 |
+
</xsd:sequence>
|
2199 |
+
<xsd:attribute name="pos" type="xlf:AttrType_Position" use="required"/>
|
2200 |
+
<xsd:attribute name="rid" type="xsd:NMTOKEN" use="optional"/>
|
2201 |
+
<xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
|
2202 |
+
<xsd:attribute name="crc" type="xsd:string" use="optional"/>
|
2203 |
+
<xsd:attributeGroup ref="xlf:AttrGroup_TextContent"/>
|
2204 |
+
</xsd:complexType>
|
2205 |
+
</xsd:element>
|
2206 |
+
<xsd:element name="sub">
|
2207 |
+
<xsd:complexType mixed="true">
|
2208 |
+
<xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
|
2209 |
+
<xsd:attribute name="datatype" type="xlf:AttrType_datatype" use="optional"/>
|
2210 |
+
<xsd:attribute name="ctype" type="xlf:AttrType_InlineDelimiters" use="optional"/>
|
2211 |
+
<xsd:attribute name="xid" type="xsd:string" use="optional"/>
|
2212 |
+
</xsd:complexType>
|
2213 |
+
</xsd:element>
|
2214 |
+
<xsd:element name="mrk">
|
2215 |
+
<xsd:complexType mixed="true">
|
2216 |
+
<xsd:group maxOccurs="unbounded" minOccurs="0" ref="xlf:ElemGroup_TextContent"/>
|
2217 |
+
<xsd:attribute name="mtype" type="xlf:AttrType_mtype" use="required"/>
|
2218 |
+
<xsd:attribute name="mid" type="xsd:NMTOKEN" use="optional"/>
|
2219 |
+
<xsd:attribute name="comment" type="xsd:string" use="optional"/>
|
2220 |
+
<xsd:anyAttribute namespace="##other" processContents="strict"/>
|
2221 |
+
</xsd:complexType>
|
2222 |
+
</xsd:element>
|
2223 |
+
</xsd:schema>
|
vendor/symfony/translation/Loader/schema/dic/xliff-core/xliff-core-2.0.xsd
ADDED
@@ -0,0 +1,411 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
2 |
+
<!--
|
3 |
+
|
4 |
+
XLIFF Version 2.0
|
5 |
+
OASIS Standard
|
6 |
+
05 August 2014
|
7 |
+
Copyright (c) OASIS Open 2014. All rights reserved.
|
8 |
+
Source: http://docs.oasis-open.org/xliff/xliff-core/v2.0/os/schemas/
|
9 |
+
-->
|
10 |
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
11 |
+
elementFormDefault="qualified"
|
12 |
+
xmlns:xlf="urn:oasis:names:tc:xliff:document:2.0"
|
13 |
+
targetNamespace="urn:oasis:names:tc:xliff:document:2.0">
|
14 |
+
|
15 |
+
<!-- Import -->
|
16 |
+
|
17 |
+
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
|
18 |
+
schemaLocation="informativeCopiesOf3rdPartySchemas/w3c/xml.xsd"/>
|
19 |
+
|
20 |
+
<!-- Element Group -->
|
21 |
+
|
22 |
+
<xs:group name="inline">
|
23 |
+
<xs:choice>
|
24 |
+
<xs:element ref="xlf:cp"/>
|
25 |
+
<xs:element ref="xlf:ph"/>
|
26 |
+
<xs:element ref="xlf:pc"/>
|
27 |
+
<xs:element ref="xlf:sc"/>
|
28 |
+
<xs:element ref="xlf:ec"/>
|
29 |
+
<xs:element ref="xlf:mrk"/>
|
30 |
+
<xs:element ref="xlf:sm"/>
|
31 |
+
<xs:element ref="xlf:em"/>
|
32 |
+
</xs:choice>
|
33 |
+
</xs:group>
|
34 |
+
|
35 |
+
<!-- Attribute Types -->
|
36 |
+
|
37 |
+
<xs:simpleType name="yesNo">
|
38 |
+
<xs:restriction base="xs:string">
|
39 |
+
<xs:enumeration value="yes"/>
|
40 |
+
<xs:enumeration value="no"/>
|
41 |
+
</xs:restriction>
|
42 |
+
</xs:simpleType>
|
43 |
+
|
44 |
+
<xs:simpleType name="yesNoFirstNo">
|
45 |
+
<xs:restriction base="xs:string">
|
46 |
+
<xs:enumeration value="yes"/>
|
47 |
+
<xs:enumeration value="firstNo"/>
|
48 |
+
<xs:enumeration value="no"/>
|
49 |
+
</xs:restriction>
|
50 |
+
</xs:simpleType>
|
51 |
+
|
52 |
+
<xs:simpleType name="dirValue">
|
53 |
+
<xs:restriction base="xs:string">
|
54 |
+
<xs:enumeration value="ltr"/>
|
55 |
+
<xs:enumeration value="rtl"/>
|
56 |
+
<xs:enumeration value="auto"/>
|
57 |
+
</xs:restriction>
|
58 |
+
</xs:simpleType>
|
59 |
+
|
60 |
+
<xs:simpleType name="appliesTo">
|
61 |
+
<xs:restriction base="xs:string">
|
62 |
+
<xs:enumeration value="source"/>
|
63 |
+
<xs:enumeration value="target"/>
|
64 |
+
</xs:restriction>
|
65 |
+
</xs:simpleType>
|
66 |
+
|
67 |
+
<xs:simpleType name="userDefinedValue">
|
68 |
+
<xs:restriction base="xs:string">
|
69 |
+
<xs:pattern value="[^\s:]+:[^\s:]+"/>
|
70 |
+
</xs:restriction>
|
71 |
+
</xs:simpleType>
|
72 |
+
|
73 |
+
<xs:simpleType name="attrType_type">
|
74 |
+
<xs:restriction base="xs:string">
|
75 |
+
<xs:enumeration value="fmt"/>
|
76 |
+
<xs:enumeration value="ui"/>
|
77 |
+
<xs:enumeration value="quote"/>
|
78 |
+
<xs:enumeration value="link"/>
|
79 |
+
<xs:enumeration value="image"/>
|
80 |
+
<xs:enumeration value="other"/>
|
81 |
+
</xs:restriction>
|
82 |
+
</xs:simpleType>
|
83 |
+
|
84 |
+
<xs:simpleType name="typeForMrkValues">
|
85 |
+
<xs:restriction base="xs:NMTOKEN">
|
86 |
+
<xs:enumeration value="generic"/>
|
87 |
+
<xs:enumeration value="comment"/>
|
88 |
+
<xs:enumeration value="term"/>
|
89 |
+
</xs:restriction>
|
90 |
+
</xs:simpleType>
|
91 |
+
|
92 |
+
<xs:simpleType name="attrType_typeForMrk">
|
93 |
+
<xs:union memberTypes="xlf:typeForMrkValues xlf:userDefinedValue"/>
|
94 |
+
</xs:simpleType>
|
95 |
+
|
96 |
+
<xs:simpleType name="priorityValue">
|
97 |
+
<xs:restriction base="xs:positiveInteger">
|
98 |
+
<xs:minInclusive value="1"/>
|
99 |
+
<xs:maxInclusive value="10"/>
|
100 |
+
</xs:restriction>
|
101 |
+
</xs:simpleType>
|
102 |
+
|
103 |
+
<xs:simpleType name="stateType">
|
104 |
+
<xs:restriction base="xs:string">
|
105 |
+
<xs:enumeration value="initial"/>
|
106 |
+
<xs:enumeration value="translated"/>
|
107 |
+
<xs:enumeration value="reviewed"/>
|
108 |
+
<xs:enumeration value="final"/>
|
109 |
+
</xs:restriction>
|
110 |
+
</xs:simpleType>
|
111 |
+
|
112 |
+
<!-- Structural Elements -->
|
113 |
+
|
114 |
+
<xs:element name="xliff">
|
115 |
+
<xs:complexType mixed="false">
|
116 |
+
<xs:sequence>
|
117 |
+
<xs:element minOccurs="1" maxOccurs="unbounded" ref="xlf:file"/>
|
118 |
+
</xs:sequence>
|
119 |
+
<xs:attribute name="version" use="required"/>
|
120 |
+
<xs:attribute name="srcLang" use="required"/>
|
121 |
+
<xs:attribute name="trgLang" use="optional"/>
|
122 |
+
<xs:attribute ref="xml:space" use="optional" default="default"/>
|
123 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
124 |
+
</xs:complexType>
|
125 |
+
</xs:element>
|
126 |
+
|
127 |
+
<xs:element name="file">
|
128 |
+
<xs:complexType mixed="false">
|
129 |
+
<xs:sequence>
|
130 |
+
<xs:element minOccurs="0" maxOccurs="1" ref="xlf:skeleton"/>
|
131 |
+
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other"
|
132 |
+
processContents="lax"/>
|
133 |
+
<xs:element minOccurs="0" maxOccurs="1" ref="xlf:notes"/>
|
134 |
+
<xs:choice minOccurs="1" maxOccurs="unbounded">
|
135 |
+
<xs:element ref="xlf:unit"/>
|
136 |
+
<xs:element ref="xlf:group"/>
|
137 |
+
</xs:choice>
|
138 |
+
</xs:sequence>
|
139 |
+
<xs:attribute name="id" use="required" type="xs:NMTOKEN"/>
|
140 |
+
<xs:attribute name="canResegment" use="optional" type="xlf:yesNo" default="yes"/>
|
141 |
+
<xs:attribute name="original" use="optional"/>
|
142 |
+
<xs:attribute name="translate" use="optional" type="xlf:yesNo" default="yes"/>
|
143 |
+
<xs:attribute name="srcDir" use="optional" type="xlf:dirValue" default="auto"/>
|
144 |
+
<xs:attribute name="trgDir" use="optional" type="xlf:dirValue" default="auto"/>
|
145 |
+
<xs:attribute ref="xml:space" use="optional"/>
|
146 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
147 |
+
</xs:complexType>
|
148 |
+
</xs:element>
|
149 |
+
|
150 |
+
<xs:element name="skeleton">
|
151 |
+
<xs:complexType mixed="true">
|
152 |
+
<xs:sequence>
|
153 |
+
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other"
|
154 |
+
processContents="lax"/>
|
155 |
+
</xs:sequence>
|
156 |
+
<xs:attribute name="href" use="optional"/>
|
157 |
+
</xs:complexType>
|
158 |
+
</xs:element>
|
159 |
+
|
160 |
+
<xs:element name="group">
|
161 |
+
<xs:complexType mixed="false">
|
162 |
+
<xs:sequence>
|
163 |
+
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other"
|
164 |
+
processContents="lax"/>
|
165 |
+
<xs:element minOccurs="0" maxOccurs="1" ref="xlf:notes"/>
|
166 |
+
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
167 |
+
<xs:element ref="xlf:unit"/>
|
168 |
+
<xs:element ref="xlf:group"/>
|
169 |
+
</xs:choice>
|
170 |
+
</xs:sequence>
|
171 |
+
<xs:attribute name="id" use="required" type="xs:NMTOKEN"/>
|
172 |
+
<xs:attribute name="name" use="optional"/>
|
173 |
+
<xs:attribute name="canResegment" use="optional" type="xlf:yesNo"/>
|
174 |
+
<xs:attribute name="translate" use="optional" type="xlf:yesNo"/>
|
175 |
+
<xs:attribute name="srcDir" use="optional" type="xlf:dirValue"/>
|
176 |
+
<xs:attribute name="trgDir" use="optional" type="xlf:dirValue"/>
|
177 |
+
<xs:attribute name="type" use="optional" type="xlf:userDefinedValue"/>
|
178 |
+
<xs:attribute ref="xml:space" use="optional"/>
|
179 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
180 |
+
</xs:complexType>
|
181 |
+
</xs:element>
|
182 |
+
|
183 |
+
<xs:element name="unit">
|
184 |
+
<xs:complexType mixed="false">
|
185 |
+
<xs:sequence>
|
186 |
+
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other"
|
187 |
+
processContents="lax"/>
|
188 |
+
<xs:element minOccurs="0" maxOccurs="1" ref="xlf:notes"/>
|
189 |
+
<xs:element minOccurs="0" maxOccurs="1" ref="xlf:originalData"/>
|
190 |
+
<xs:choice minOccurs="1" maxOccurs="unbounded">
|
191 |
+
<xs:element ref="xlf:segment"/>
|
192 |
+
<xs:element ref="xlf:ignorable"/>
|
193 |
+
</xs:choice>
|
194 |
+
</xs:sequence>
|
195 |
+
<xs:attribute name="id" use="required" type="xs:NMTOKEN"/>
|
196 |
+
<xs:attribute name="name" use="optional"/>
|
197 |
+
<xs:attribute name="canResegment" use="optional" type="xlf:yesNo"/>
|
198 |
+
<xs:attribute name="translate" use="optional" type="xlf:yesNo"/>
|
199 |
+
<xs:attribute name="srcDir" use="optional" type="xlf:dirValue"/>
|
200 |
+
<xs:attribute name="trgDir" use="optional" type="xlf:dirValue"/>
|
201 |
+
<xs:attribute ref="xml:space" use="optional"/>
|
202 |
+
<xs:attribute name="type" use="optional" type="xlf:userDefinedValue"/>
|
203 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
204 |
+
</xs:complexType>
|
205 |
+
</xs:element>
|
206 |
+
|
207 |
+
<xs:element name="segment">
|
208 |
+
<xs:complexType mixed="false">
|
209 |
+
<xs:sequence>
|
210 |
+
<xs:element minOccurs="1" maxOccurs="1" ref="xlf:source"/>
|
211 |
+
<xs:element minOccurs="0" maxOccurs="1" ref="xlf:target"/>
|
212 |
+
</xs:sequence>
|
213 |
+
<xs:attribute name="id" use="optional" type="xs:NMTOKEN"/>
|
214 |
+
<xs:attribute name="canResegment" use="optional" type="xlf:yesNo"/>
|
215 |
+
<xs:attribute name="state" use="optional" type="xlf:stateType" default="initial"/>
|
216 |
+
<xs:attribute name="subState" use="optional"/>
|
217 |
+
</xs:complexType>
|
218 |
+
</xs:element>
|
219 |
+
|
220 |
+
<xs:element name="ignorable">
|
221 |
+
<xs:complexType mixed="false">
|
222 |
+
<xs:sequence>
|
223 |
+
<xs:element minOccurs="1" maxOccurs="1" ref="xlf:source"/>
|
224 |
+
<xs:element minOccurs="0" maxOccurs="1" ref="xlf:target"/>
|
225 |
+
</xs:sequence>
|
226 |
+
<xs:attribute name="id" use="optional" type="xs:NMTOKEN"/>
|
227 |
+
</xs:complexType>
|
228 |
+
</xs:element>
|
229 |
+
|
230 |
+
<xs:element name="notes">
|
231 |
+
<xs:complexType mixed="false">
|
232 |
+
<xs:sequence>
|
233 |
+
<xs:element minOccurs="1" maxOccurs="unbounded" ref="xlf:note"/>
|
234 |
+
</xs:sequence>
|
235 |
+
</xs:complexType>
|
236 |
+
</xs:element>
|
237 |
+
|
238 |
+
<xs:element name="note">
|
239 |
+
<xs:complexType mixed="true">
|
240 |
+
<xs:attribute name="id" use="optional" type="xs:NMTOKEN"/>
|
241 |
+
<xs:attribute name="appliesTo" use="optional" type="xlf:appliesTo"/>
|
242 |
+
<xs:attribute name="category" use="optional"/>
|
243 |
+
<xs:attribute name="priority" use="optional" type="xlf:priorityValue" default="1"/>
|
244 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
245 |
+
</xs:complexType>
|
246 |
+
</xs:element>
|
247 |
+
|
248 |
+
<xs:element name="originalData">
|
249 |
+
<xs:complexType mixed="false">
|
250 |
+
<xs:sequence>
|
251 |
+
<xs:element minOccurs="1" maxOccurs="unbounded" ref="xlf:data"/>
|
252 |
+
</xs:sequence>
|
253 |
+
</xs:complexType>
|
254 |
+
</xs:element>
|
255 |
+
|
256 |
+
<xs:element name="data">
|
257 |
+
<xs:complexType mixed="true">
|
258 |
+
<xs:sequence>
|
259 |
+
<xs:element minOccurs="0" maxOccurs="unbounded" ref="xlf:cp"/>
|
260 |
+
</xs:sequence>
|
261 |
+
<xs:attribute name="id" use="required" type="xs:NMTOKEN"/>
|
262 |
+
<xs:attribute name="dir" use="optional" type="xlf:dirValue" default="auto"/>
|
263 |
+
<xs:attribute ref="xml:space" use="optional" fixed="preserve"/>
|
264 |
+
</xs:complexType>
|
265 |
+
</xs:element>
|
266 |
+
|
267 |
+
<xs:element name="source">
|
268 |
+
<xs:complexType mixed="true">
|
269 |
+
<xs:group ref="xlf:inline" minOccurs="0" maxOccurs="unbounded"/>
|
270 |
+
<xs:attribute ref="xml:lang" use="optional"/>
|
271 |
+
<xs:attribute ref="xml:space" use="optional"/>
|
272 |
+
</xs:complexType>
|
273 |
+
</xs:element>
|
274 |
+
|
275 |
+
<xs:element name="target">
|
276 |
+
<xs:complexType mixed="true">
|
277 |
+
<xs:group ref="xlf:inline" minOccurs="0" maxOccurs="unbounded"/>
|
278 |
+
<xs:attribute ref="xml:lang" use="optional"/>
|
279 |
+
<xs:attribute ref="xml:space" use="optional"/>
|
280 |
+
<xs:attribute name="order" use="optional" type="xs:positiveInteger"/>
|
281 |
+
</xs:complexType>
|
282 |
+
</xs:element>
|
283 |
+
|
284 |
+
<!-- Inline Elements -->
|
285 |
+
|
286 |
+
<xs:element name="cp">
|
287 |
+
<!-- Code Point -->
|
288 |
+
<xs:complexType mixed="false">
|
289 |
+
<xs:attribute name="hex" use="required" type="xs:hexBinary"/>
|
290 |
+
</xs:complexType>
|
291 |
+
</xs:element>
|
292 |
+
|
293 |
+
<xs:element name="ph">
|
294 |
+
<!-- Placeholder -->
|
295 |
+
<xs:complexType mixed="false">
|
296 |
+
<xs:attribute name="canCopy" use="optional" type="xlf:yesNo" default="yes"/>
|
297 |
+
<xs:attribute name="canDelete" use="optional" type="xlf:yesNo" default="yes"/>
|
298 |
+
<xs:attribute name="canReorder" use="optional" type="xlf:yesNoFirstNo" default="yes"/>
|
299 |
+
<xs:attribute name="copyOf" use="optional" type="xs:NMTOKEN"/>
|
300 |
+
<xs:attribute name="disp" use="optional"/>
|
301 |
+
<xs:attribute name="equiv" use="optional"/>
|
302 |
+
<xs:attribute name="id" use="required" type="xs:NMTOKEN"/>
|
303 |
+
<xs:attribute name="dataRef" use="optional" type="xs:NMTOKEN"/>
|
304 |
+
<xs:attribute name="subFlows" use="optional" type="xs:NMTOKENS"/>
|
305 |
+
<xs:attribute name="subType" use="optional" type="xlf:userDefinedValue"/>
|
306 |
+
<xs:attribute name="type" use="optional" type="xlf:attrType_type"/>
|
307 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
308 |
+
</xs:complexType>
|
309 |
+
</xs:element>
|
310 |
+
|
311 |
+
<xs:element name="pc">
|
312 |
+
<!-- Paired Code -->
|
313 |
+
<xs:complexType mixed="true">
|
314 |
+
<xs:group ref="xlf:inline" minOccurs="0" maxOccurs="unbounded"/>
|
315 |
+
<xs:attribute name="canCopy" use="optional" type="xlf:yesNo" default="yes"/>
|
316 |
+
<xs:attribute name="canDelete" use="optional" type="xlf:yesNo" default="yes"/>
|
317 |
+
<xs:attribute name="canOverlap" use="optional" type="xlf:yesNo"/>
|
318 |
+
<xs:attribute name="canReorder" use="optional" type="xlf:yesNoFirstNo" default="yes"/>
|
319 |
+
<xs:attribute name="copyOf" use="optional" type="xs:NMTOKEN"/>
|
320 |
+
<xs:attribute name="dispEnd" use="optional"/>
|
321 |
+
<xs:attribute name="dispStart" use="optional"/>
|
322 |
+
<xs:attribute name="equivEnd" use="optional"/>
|
323 |
+
<xs:attribute name="equivStart" use="optional"/>
|
324 |
+
<xs:attribute name="id" use="required" type="xs:NMTOKEN"/>
|
325 |
+
<xs:attribute name="dataRefEnd" use="optional" type="xs:NMTOKEN"/>
|
326 |
+
<xs:attribute name="dataRefStart" use="optional" type="xs:NMTOKEN"/>
|
327 |
+
<xs:attribute name="subFlowsEnd" use="optional" type="xs:NMTOKENS"/>
|
328 |
+
<xs:attribute name="subFlowsStart" use="optional" type="xs:NMTOKENS"/>
|
329 |
+
<xs:attribute name="subType" use="optional" type="xlf:userDefinedValue"/>
|
330 |
+
<xs:attribute name="type" use="optional" type="xlf:attrType_type"/>
|
331 |
+
<xs:attribute name="dir" use="optional" type="xlf:dirValue"/>
|
332 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
333 |
+
</xs:complexType>
|
334 |
+
</xs:element>
|
335 |
+
|
336 |
+
<xs:element name="sc">
|
337 |
+
<!-- Start Code -->
|
338 |
+
<xs:complexType mixed="false">
|
339 |
+
<xs:attribute name="canCopy" use="optional" type="xlf:yesNo" default="yes"/>
|
340 |
+
<xs:attribute name="canDelete" use="optional" type="xlf:yesNo" default="yes"/>
|
341 |
+
<xs:attribute name="canOverlap" use="optional" type="xlf:yesNo" default="yes"/>
|
342 |
+
<xs:attribute name="canReorder" use="optional" type="xlf:yesNoFirstNo" default="yes"/>
|
343 |
+
<xs:attribute name="copyOf" use="optional" type="xs:NMTOKEN"/>
|
344 |
+
<xs:attribute name="dataRef" use="optional" type="xs:NMTOKEN"/>
|
345 |
+
<xs:attribute name="dir" use="optional" type="xlf:dirValue"/>
|
346 |
+
<xs:attribute name="disp" use="optional"/>
|
347 |
+
<xs:attribute name="equiv" use="optional"/>
|
348 |
+
<xs:attribute name="id" use="required" type="xs:NMTOKEN"/>
|
349 |
+
<xs:attribute name="isolated" use="optional" type="xlf:yesNo" default="no"/>
|
350 |
+
<xs:attribute name="subFlows" use="optional" type="xs:NMTOKENS"/>
|
351 |
+
<xs:attribute name="subType" use="optional" type="xlf:userDefinedValue"/>
|
352 |
+
<xs:attribute name="type" use="optional" type="xlf:attrType_type"/>
|
353 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
354 |
+
</xs:complexType>
|
355 |
+
</xs:element>
|
356 |
+
|
357 |
+
<xs:element name="ec">
|
358 |
+
<!-- End Code -->
|
359 |
+
<xs:complexType mixed="false">
|
360 |
+
<xs:attribute name="canCopy" use="optional" type="xlf:yesNo" default="yes"/>
|
361 |
+
<xs:attribute name="canDelete" use="optional" type="xlf:yesNo" default="yes"/>
|
362 |
+
<xs:attribute name="canOverlap" use="optional" type="xlf:yesNo" default="yes"/>
|
363 |
+
<xs:attribute name="canReorder" use="optional" type="xlf:yesNoFirstNo" default="yes"/>
|
364 |
+
<xs:attribute name="copyOf" use="optional" type="xs:NMTOKEN"/>
|
365 |
+
<xs:attribute name="dataRef" use="optional" type="xs:NMTOKEN"/>
|
366 |
+
<xs:attribute name="dir" use="optional" type="xlf:dirValue"/>
|
367 |
+
<xs:attribute name="disp" use="optional"/>
|
368 |
+
<xs:attribute name="equiv" use="optional"/>
|
369 |
+
<xs:attribute name="id" use="optional" type="xs:NMTOKEN"/>
|
370 |
+
<xs:attribute name="isolated" use="optional" type="xlf:yesNo" default="no"/>
|
371 |
+
<xs:attribute name="startRef" use="optional" type="xs:NMTOKEN"/>
|
372 |
+
<xs:attribute name="subFlows" use="optional" type="xs:NMTOKENS"/>
|
373 |
+
<xs:attribute name="subType" use="optional" type="xlf:userDefinedValue"/>
|
374 |
+
<xs:attribute name="type" use="optional" type="xlf:attrType_type"/>
|
375 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
376 |
+
</xs:complexType>
|
377 |
+
</xs:element>
|
378 |
+
|
379 |
+
<xs:element name="mrk">
|
380 |
+
<!-- Annotation Marker -->
|
381 |
+
<xs:complexType mixed="true">
|
382 |
+
<xs:group ref="xlf:inline" minOccurs="0" maxOccurs="unbounded"/>
|
383 |
+
<xs:attribute name="id" use="required" type="xs:NMTOKEN"/>
|
384 |
+
<xs:attribute name="translate" use="optional" type="xlf:yesNo"/>
|
385 |
+
<xs:attribute name="type" use="optional" type="xlf:attrType_typeForMrk"/>
|
386 |
+
<xs:attribute name="ref" use="optional" type="xs:anyURI"/>
|
387 |
+
<xs:attribute name="value" use="optional"/>
|
388 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
389 |
+
</xs:complexType>
|
390 |
+
</xs:element>
|
391 |
+
|
392 |
+
<xs:element name="sm">
|
393 |
+
<!-- Start Annotation Marker -->
|
394 |
+
<xs:complexType mixed="false">
|
395 |
+
<xs:attribute name="id" use="required" type="xs:NMTOKEN"/>
|
396 |
+
<xs:attribute name="translate" use="optional" type="xlf:yesNo"/>
|
397 |
+
<xs:attribute name="type" use="optional" type="xlf:attrType_typeForMrk"/>
|
398 |
+
<xs:attribute name="ref" use="optional" type="xs:anyURI"/>
|
399 |
+
<xs:attribute name="value" use="optional"/>
|
400 |
+
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
401 |
+
</xs:complexType>
|
402 |
+
</xs:element>
|
403 |
+
|
404 |
+
<xs:element name="em">
|
405 |
+
<!-- End Annotation Marker -->
|
406 |
+
<xs:complexType mixed="false">
|
407 |
+
<xs:attribute name="startRef" use="required" type="xs:NMTOKEN"/>
|
408 |
+
</xs:complexType>
|
409 |
+
</xs:element>
|
410 |
+
|
411 |
+
</xs:schema>
|
vendor/symfony/translation/Loader/schema/dic/xliff-core/xml.xsd
ADDED
@@ -0,0 +1,309 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version='1.0'?>
|
2 |
+
<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?>
|
3 |
+
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"
|
4 |
+
xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
5 |
+
xmlns ="http://www.w3.org/1999/xhtml"
|
6 |
+
xml:lang="en">
|
7 |
+
|
8 |
+
<xs:annotation>
|
9 |
+
<xs:documentation>
|
10 |
+
<div>
|
11 |
+
<h1>About the XML namespace</h1>
|
12 |
+
|
13 |
+
<div class="bodytext">
|
14 |
+
<p>
|
15 |
+
|
16 |
+
This schema document describes the XML namespace, in a form
|
17 |
+
suitable for import by other schema documents.
|
18 |
+
</p>
|
19 |
+
<p>
|
20 |
+
See <a href="http://www.w3.org/XML/1998/namespace.html">
|
21 |
+
http://www.w3.org/XML/1998/namespace.html</a> and
|
22 |
+
<a href="http://www.w3.org/TR/REC-xml">
|
23 |
+
http://www.w3.org/TR/REC-xml</a> for information
|
24 |
+
about this namespace.
|
25 |
+
</p>
|
26 |
+
|
27 |
+
<p>
|
28 |
+
Note that local names in this namespace are intended to be
|
29 |
+
defined only by the World Wide Web Consortium or its subgroups.
|
30 |
+
The names currently defined in this namespace are listed below.
|
31 |
+
They should not be used with conflicting semantics by any Working
|
32 |
+
Group, specification, or document instance.
|
33 |
+
</p>
|
34 |
+
<p>
|
35 |
+
See further below in this document for more information about <a
|
36 |
+
href="#usage">how to refer to this schema document from your own
|
37 |
+
XSD schema documents</a> and about <a href="#nsversioning">the
|
38 |
+
namespace-versioning policy governing this schema document</a>.
|
39 |
+
</p>
|
40 |
+
</div>
|
41 |
+
</div>
|
42 |
+
|
43 |
+
</xs:documentation>
|
44 |
+
</xs:annotation>
|
45 |
+
|
46 |
+
<xs:attribute name="lang">
|
47 |
+
<xs:annotation>
|
48 |
+
<xs:documentation>
|
49 |
+
<div>
|
50 |
+
|
51 |
+
<h3>lang (as an attribute name)</h3>
|
52 |
+
<p>
|
53 |
+
|
54 |
+
denotes an attribute whose value
|
55 |
+
is a language code for the natural language of the content of
|
56 |
+
any element; its value is inherited. This name is reserved
|
57 |
+
by virtue of its definition in the XML specification.</p>
|
58 |
+
|
59 |
+
</div>
|
60 |
+
<div>
|
61 |
+
<h4>Notes</h4>
|
62 |
+
<p>
|
63 |
+
Attempting to install the relevant ISO 2- and 3-letter
|
64 |
+
codes as the enumerated possible values is probably never
|
65 |
+
going to be a realistic possibility.
|
66 |
+
</p>
|
67 |
+
<p>
|
68 |
+
|
69 |
+
See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt">
|
70 |
+
http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
|
71 |
+
and the IANA language subtag registry at
|
72 |
+
<a href="http://www.iana.org/assignments/language-subtag-registry">
|
73 |
+
http://www.iana.org/assignments/language-subtag-registry</a>
|
74 |
+
for further information.
|
75 |
+
</p>
|
76 |
+
<p>
|
77 |
+
|
78 |
+
The union allows for the 'un-declaration' of xml:lang with
|
79 |
+
the empty string.
|
80 |
+
</p>
|
81 |
+
</div>
|
82 |
+
</xs:documentation>
|
83 |
+
</xs:annotation>
|
84 |
+
<xs:simpleType>
|
85 |
+
<xs:union memberTypes="xs:language">
|
86 |
+
<xs:simpleType>
|
87 |
+
<xs:restriction base="xs:string">
|
88 |
+
<xs:enumeration value=""/>
|
89 |
+
|
90 |
+
</xs:restriction>
|
91 |
+
</xs:simpleType>
|
92 |
+
</xs:union>
|
93 |
+
</xs:simpleType>
|
94 |
+
</xs:attribute>
|
95 |
+
|
96 |
+
<xs:attribute name="space">
|
97 |
+
<xs:annotation>
|
98 |
+
<xs:documentation>
|
99 |
+
|
100 |
+
<div>
|
101 |
+
|
102 |
+
<h3>space (as an attribute name)</h3>
|
103 |
+
<p>
|
104 |
+
denotes an attribute whose
|
105 |
+
value is a keyword indicating what whitespace processing
|
106 |
+
discipline is intended for the content of the element; its
|
107 |
+
value is inherited. This name is reserved by virtue of its
|
108 |
+
definition in the XML specification.</p>
|
109 |
+
|
110 |
+
</div>
|
111 |
+
</xs:documentation>
|
112 |
+
</xs:annotation>
|
113 |
+
<xs:simpleType>
|
114 |
+
|
115 |
+
<xs:restriction base="xs:NCName">
|
116 |
+
<xs:enumeration value="default"/>
|
117 |
+
<xs:enumeration value="preserve"/>
|
118 |
+
</xs:restriction>
|
119 |
+
</xs:simpleType>
|
120 |
+
</xs:attribute>
|
121 |
+
|
122 |
+
<xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
|
123 |
+
<xs:documentation>
|
124 |
+
|
125 |
+
<div>
|
126 |
+
|
127 |
+
<h3>base (as an attribute name)</h3>
|
128 |
+
<p>
|
129 |
+
denotes an attribute whose value
|
130 |
+
provides a URI to be used as the base for interpreting any
|
131 |
+
relative URIs in the scope of the element on which it
|
132 |
+
appears; its value is inherited. This name is reserved
|
133 |
+
by virtue of its definition in the XML Base specification.</p>
|
134 |
+
|
135 |
+
<p>
|
136 |
+
See <a
|
137 |
+
href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a>
|
138 |
+
for information about this attribute.
|
139 |
+
</p>
|
140 |
+
|
141 |
+
</div>
|
142 |
+
</xs:documentation>
|
143 |
+
</xs:annotation>
|
144 |
+
</xs:attribute>
|
145 |
+
|
146 |
+
<xs:attribute name="id" type="xs:ID">
|
147 |
+
<xs:annotation>
|
148 |
+
<xs:documentation>
|
149 |
+
<div>
|
150 |
+
|
151 |
+
<h3>id (as an attribute name)</h3>
|
152 |
+
<p>
|
153 |
+
|
154 |
+
denotes an attribute whose value
|
155 |
+
should be interpreted as if declared to be of type ID.
|
156 |
+
This name is reserved by virtue of its definition in the
|
157 |
+
xml:id specification.</p>
|
158 |
+
|
159 |
+
<p>
|
160 |
+
See <a
|
161 |
+
href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a>
|
162 |
+
for information about this attribute.
|
163 |
+
</p>
|
164 |
+
</div>
|
165 |
+
</xs:documentation>
|
166 |
+
</xs:annotation>
|
167 |
+
|
168 |
+
</xs:attribute>
|
169 |
+
|
170 |
+
<xs:attributeGroup name="specialAttrs">
|
171 |
+
<xs:attribute ref="xml:base"/>
|
172 |
+
<xs:attribute ref="xml:lang"/>
|
173 |
+
<xs:attribute ref="xml:space"/>
|
174 |
+
<xs:attribute ref="xml:id"/>
|
175 |
+
</xs:attributeGroup>
|
176 |
+
|
177 |
+
<xs:annotation>
|
178 |
+
|
179 |
+
<xs:documentation>
|
180 |
+
<div>
|
181 |
+
|
182 |
+
<h3>Father (in any context at all)</h3>
|
183 |
+
|
184 |
+
<div class="bodytext">
|
185 |
+
<p>
|
186 |
+
denotes Jon Bosak, the chair of
|
187 |
+
the original XML Working Group. This name is reserved by
|
188 |
+
the following decision of the W3C XML Plenary and
|
189 |
+
XML Coordination groups:
|
190 |
+
</p>
|
191 |
+
<blockquote>
|
192 |
+
<p>
|
193 |
+
|
194 |
+
In appreciation for his vision, leadership and
|
195 |
+
dedication the W3C XML Plenary on this 10th day of
|
196 |
+
February, 2000, reserves for Jon Bosak in perpetuity
|
197 |
+
the XML name "xml:Father".
|
198 |
+
</p>
|
199 |
+
</blockquote>
|
200 |
+
</div>
|
201 |
+
</div>
|
202 |
+
</xs:documentation>
|
203 |
+
</xs:annotation>
|
204 |
+
|
205 |
+
<xs:annotation>
|
206 |
+
<xs:documentation>
|
207 |
+
|
208 |
+
<div xml:id="usage" id="usage">
|
209 |
+
<h2><a name="usage">About this schema document</a></h2>
|
210 |
+
|
211 |
+
<div class="bodytext">
|
212 |
+
<p>
|
213 |
+
This schema defines attributes and an attribute group suitable
|
214 |
+
for use by schemas wishing to allow <code>xml:base</code>,
|
215 |
+
<code>xml:lang</code>, <code>xml:space</code> or
|
216 |
+
<code>xml:id</code> attributes on elements they define.
|
217 |
+
</p>
|
218 |
+
|
219 |
+
<p>
|
220 |
+
To enable this, such a schema must import this schema for
|
221 |
+
the XML namespace, e.g. as follows:
|
222 |
+
</p>
|
223 |
+
<pre>
|
224 |
+
<schema.. .>
|
225 |
+
.. .
|
226 |
+
<import namespace="http://www.w3.org/XML/1998/namespace"
|
227 |
+
schemaLocation="http://www.w3.org/2001/xml.xsd"/>
|
228 |
+
</pre>
|
229 |
+
<p>
|
230 |
+
or
|
231 |
+
</p>
|
232 |
+
<pre>
|
233 |
+
|
234 |
+
<import namespace="http://www.w3.org/XML/1998/namespace"
|
235 |
+
schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
|
236 |
+
</pre>
|
237 |
+
<p>
|
238 |
+
Subsequently, qualified reference to any of the attributes or the
|
239 |
+
group defined below will have the desired effect, e.g.
|
240 |
+
</p>
|
241 |
+
<pre>
|
242 |
+
<type.. .>
|
243 |
+
.. .
|
244 |
+
<attributeGroup ref="xml:specialAttrs"/>
|
245 |
+
</pre>
|
246 |
+
<p>
|
247 |
+
will define a type which will schema-validate an instance element
|
248 |
+
with any of those attributes.
|
249 |
+
</p>
|
250 |
+
|
251 |
+
</div>
|
252 |
+
</div>
|
253 |
+
</xs:documentation>
|
254 |
+
</xs:annotation>
|
255 |
+
|
256 |
+
<xs:annotation>
|
257 |
+
<xs:documentation>
|
258 |
+
<div id="nsversioning" xml:id="nsversioning">
|
259 |
+
<h2><a name="nsversioning">Versioning policy for this schema document</a></h2>
|
260 |
+
|
261 |
+
<div class="bodytext">
|
262 |
+
<p>
|
263 |
+
In keeping with the XML Schema WG's standard versioning
|
264 |
+
policy, this schema document will persist at
|
265 |
+
<a href="http://www.w3.org/2009/01/xml.xsd">
|
266 |
+
http://www.w3.org/2009/01/xml.xsd</a>.
|
267 |
+
</p>
|
268 |
+
<p>
|
269 |
+
At the date of issue it can also be found at
|
270 |
+
<a href="http://www.w3.org/2001/xml.xsd">
|
271 |
+
http://www.w3.org/2001/xml.xsd</a>.
|
272 |
+
</p>
|
273 |
+
|
274 |
+
<p>
|
275 |
+
The schema document at that URI may however change in the future,
|
276 |
+
in order to remain compatible with the latest version of XML
|
277 |
+
Schema itself, or with the XML namespace itself. In other words,
|
278 |
+
if the XML Schema or XML namespaces change, the version of this
|
279 |
+
document at <a href="http://www.w3.org/2001/xml.xsd">
|
280 |
+
http://www.w3.org/2001/xml.xsd
|
281 |
+
</a>
|
282 |
+
will change accordingly; the version at
|
283 |
+
<a href="http://www.w3.org/2009/01/xml.xsd">
|
284 |
+
http://www.w3.org/2009/01/xml.xsd
|
285 |
+
</a>
|
286 |
+
will not change.
|
287 |
+
</p>
|
288 |
+
<p>
|
289 |
+
|
290 |
+
Previous dated (and unchanging) versions of this schema
|
291 |
+
document are at:
|
292 |
+
</p>
|
293 |
+
<ul>
|
294 |
+
<li><a href="http://www.w3.org/2009/01/xml.xsd">
|
295 |
+
http://www.w3.org/2009/01/xml.xsd</a></li>
|
296 |
+
<li><a href="http://www.w3.org/2007/08/xml.xsd">
|
297 |
+
http://www.w3.org/2007/08/xml.xsd</a></li>
|
298 |
+
<li><a href="http://www.w3.org/2004/10/xml.xsd">
|
299 |
+
|
300 |
+
http://www.w3.org/2004/10/xml.xsd</a></li>
|
301 |
+
<li><a href="http://www.w3.org/2001/03/xml.xsd">
|
302 |
+
http://www.w3.org/2001/03/xml.xsd</a></li>
|
303 |
+
</ul>
|
304 |
+
</div>
|
305 |
+
</div>
|
306 |
+
</xs:documentation>
|
307 |
+
</xs:annotation>
|
308 |
+
|
309 |
+
</xs:schema>
|
vendor/symfony/translation/LoggingTranslator.php
ADDED
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
use Psr\Log\LoggerInterface;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
|
18 |
+
*/
|
19 |
+
class LoggingTranslator implements TranslatorInterface, TranslatorBagInterface
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* @var TranslatorInterface|TranslatorBagInterface
|
23 |
+
*/
|
24 |
+
private $translator;
|
25 |
+
|
26 |
+
private $logger;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @param TranslatorInterface $translator The translator must implement TranslatorBagInterface
|
30 |
+
* @param LoggerInterface $logger
|
31 |
+
*/
|
32 |
+
public function __construct(TranslatorInterface $translator, LoggerInterface $logger)
|
33 |
+
{
|
34 |
+
if (!$translator instanceof TranslatorBagInterface) {
|
35 |
+
throw new \InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface and TranslatorBagInterface.', \get_class($translator)));
|
36 |
+
}
|
37 |
+
|
38 |
+
$this->translator = $translator;
|
39 |
+
$this->logger = $logger;
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* {@inheritdoc}
|
44 |
+
*/
|
45 |
+
public function trans($id, array $parameters = array(), $domain = null, $locale = null)
|
46 |
+
{
|
47 |
+
$trans = $this->translator->trans($id, $parameters, $domain, $locale);
|
48 |
+
$this->log($id, $domain, $locale);
|
49 |
+
|
50 |
+
return $trans;
|
51 |
+
}
|
52 |
+
|
53 |
+
/**
|
54 |
+
* {@inheritdoc}
|
55 |
+
*/
|
56 |
+
public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
|
57 |
+
{
|
58 |
+
$trans = $this->translator->transChoice($id, $number, $parameters, $domain, $locale);
|
59 |
+
$this->log($id, $domain, $locale);
|
60 |
+
|
61 |
+
return $trans;
|
62 |
+
}
|
63 |
+
|
64 |
+
/**
|
65 |
+
* {@inheritdoc}
|
66 |
+
*/
|
67 |
+
public function setLocale($locale)
|
68 |
+
{
|
69 |
+
$this->translator->setLocale($locale);
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* {@inheritdoc}
|
74 |
+
*/
|
75 |
+
public function getLocale()
|
76 |
+
{
|
77 |
+
return $this->translator->getLocale();
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* {@inheritdoc}
|
82 |
+
*/
|
83 |
+
public function getCatalogue($locale = null)
|
84 |
+
{
|
85 |
+
return $this->translator->getCatalogue($locale);
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* Gets the fallback locales.
|
90 |
+
*
|
91 |
+
* @return array The fallback locales
|
92 |
+
*/
|
93 |
+
public function getFallbackLocales()
|
94 |
+
{
|
95 |
+
if ($this->translator instanceof Translator || method_exists($this->translator, 'getFallbackLocales')) {
|
96 |
+
return $this->translator->getFallbackLocales();
|
97 |
+
}
|
98 |
+
|
99 |
+
return array();
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Passes through all unknown calls onto the translator object.
|
104 |
+
*/
|
105 |
+
public function __call($method, $args)
|
106 |
+
{
|
107 |
+
return \call_user_func_array(array($this->translator, $method), $args);
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Logs for missing translations.
|
112 |
+
*
|
113 |
+
* @param string $id
|
114 |
+
* @param string|null $domain
|
115 |
+
* @param string|null $locale
|
116 |
+
*/
|
117 |
+
private function log($id, $domain, $locale)
|
118 |
+
{
|
119 |
+
if (null === $domain) {
|
120 |
+
$domain = 'messages';
|
121 |
+
}
|
122 |
+
|
123 |
+
$id = (string) $id;
|
124 |
+
$catalogue = $this->translator->getCatalogue($locale);
|
125 |
+
if ($catalogue->defines($id, $domain)) {
|
126 |
+
return;
|
127 |
+
}
|
128 |
+
|
129 |
+
if ($catalogue->has($id, $domain)) {
|
130 |
+
$this->logger->debug('Translation use fallback catalogue.', array('id' => $id, 'domain' => $domain, 'locale' => $catalogue->getLocale()));
|
131 |
+
} else {
|
132 |
+
$this->logger->warning('Translation not found.', array('id' => $id, 'domain' => $domain, 'locale' => $catalogue->getLocale()));
|
133 |
+
}
|
134 |
+
}
|
135 |
+
}
|
vendor/symfony/translation/MessageCatalogue.php
ADDED
@@ -0,0 +1,270 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
use Symfony\Component\Config\Resource\ResourceInterface;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
+
*/
|
19 |
+
class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterface
|
20 |
+
{
|
21 |
+
private $messages = array();
|
22 |
+
private $metadata = array();
|
23 |
+
private $resources = array();
|
24 |
+
private $locale;
|
25 |
+
private $fallbackCatalogue;
|
26 |
+
private $parent;
|
27 |
+
|
28 |
+
/**
|
29 |
+
* @param string $locale The locale
|
30 |
+
* @param array $messages An array of messages classified by domain
|
31 |
+
*/
|
32 |
+
public function __construct($locale, array $messages = array())
|
33 |
+
{
|
34 |
+
$this->locale = $locale;
|
35 |
+
$this->messages = $messages;
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* {@inheritdoc}
|
40 |
+
*/
|
41 |
+
public function getLocale()
|
42 |
+
{
|
43 |
+
return $this->locale;
|
44 |
+
}
|
45 |
+
|
46 |
+
/**
|
47 |
+
* {@inheritdoc}
|
48 |
+
*/
|
49 |
+
public function getDomains()
|
50 |
+
{
|
51 |
+
return array_keys($this->messages);
|
52 |
+
}
|
53 |
+
|
54 |
+
/**
|
55 |
+
* {@inheritdoc}
|
56 |
+
*/
|
57 |
+
public function all($domain = null)
|
58 |
+
{
|
59 |
+
if (null === $domain) {
|
60 |
+
return $this->messages;
|
61 |
+
}
|
62 |
+
|
63 |
+
return isset($this->messages[$domain]) ? $this->messages[$domain] : array();
|
64 |
+
}
|
65 |
+
|
66 |
+
/**
|
67 |
+
* {@inheritdoc}
|
68 |
+
*/
|
69 |
+
public function set($id, $translation, $domain = 'messages')
|
70 |
+
{
|
71 |
+
$this->add(array($id => $translation), $domain);
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* {@inheritdoc}
|
76 |
+
*/
|
77 |
+
public function has($id, $domain = 'messages')
|
78 |
+
{
|
79 |
+
if (isset($this->messages[$domain][$id])) {
|
80 |
+
return true;
|
81 |
+
}
|
82 |
+
|
83 |
+
if (null !== $this->fallbackCatalogue) {
|
84 |
+
return $this->fallbackCatalogue->has($id, $domain);
|
85 |
+
}
|
86 |
+
|
87 |
+
return false;
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* {@inheritdoc}
|
92 |
+
*/
|
93 |
+
public function defines($id, $domain = 'messages')
|
94 |
+
{
|
95 |
+
return isset($this->messages[$domain][$id]);
|
96 |
+
}
|
97 |
+
|
98 |
+
/**
|
99 |
+
* {@inheritdoc}
|
100 |
+
*/
|
101 |
+
public function get($id, $domain = 'messages')
|
102 |
+
{
|
103 |
+
if (isset($this->messages[$domain][$id])) {
|
104 |
+
return $this->messages[$domain][$id];
|
105 |
+
}
|
106 |
+
|
107 |
+
if (null !== $this->fallbackCatalogue) {
|
108 |
+
return $this->fallbackCatalogue->get($id, $domain);
|
109 |
+
}
|
110 |
+
|
111 |
+
return $id;
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* {@inheritdoc}
|
116 |
+
*/
|
117 |
+
public function replace($messages, $domain = 'messages')
|
118 |
+
{
|
119 |
+
$this->messages[$domain] = array();
|
120 |
+
|
121 |
+
$this->add($messages, $domain);
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* {@inheritdoc}
|
126 |
+
*/
|
127 |
+
public function add($messages, $domain = 'messages')
|
128 |
+
{
|
129 |
+
if (!isset($this->messages[$domain])) {
|
130 |
+
$this->messages[$domain] = $messages;
|
131 |
+
} else {
|
132 |
+
$this->messages[$domain] = array_replace($this->messages[$domain], $messages);
|
133 |
+
}
|
134 |
+
}
|
135 |
+
|
136 |
+
/**
|
137 |
+
* {@inheritdoc}
|
138 |
+
*/
|
139 |
+
public function addCatalogue(MessageCatalogueInterface $catalogue)
|
140 |
+
{
|
141 |
+
if ($catalogue->getLocale() !== $this->locale) {
|
142 |
+
throw new \LogicException(sprintf('Cannot add a catalogue for locale "%s" as the current locale for this catalogue is "%s"', $catalogue->getLocale(), $this->locale));
|
143 |
+
}
|
144 |
+
|
145 |
+
foreach ($catalogue->all() as $domain => $messages) {
|
146 |
+
$this->add($messages, $domain);
|
147 |
+
}
|
148 |
+
|
149 |
+
foreach ($catalogue->getResources() as $resource) {
|
150 |
+
$this->addResource($resource);
|
151 |
+
}
|
152 |
+
|
153 |
+
if ($catalogue instanceof MetadataAwareInterface) {
|
154 |
+
$metadata = $catalogue->getMetadata('', '');
|
155 |
+
$this->addMetadata($metadata);
|
156 |
+
}
|
157 |
+
}
|
158 |
+
|
159 |
+
/**
|
160 |
+
* {@inheritdoc}
|
161 |
+
*/
|
162 |
+
public function addFallbackCatalogue(MessageCatalogueInterface $catalogue)
|
163 |
+
{
|
164 |
+
// detect circular references
|
165 |
+
$c = $catalogue;
|
166 |
+
while ($c = $c->getFallbackCatalogue()) {
|
167 |
+
if ($c->getLocale() === $this->getLocale()) {
|
168 |
+
throw new \LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale()));
|
169 |
+
}
|
170 |
+
}
|
171 |
+
|
172 |
+
$c = $this;
|
173 |
+
do {
|
174 |
+
if ($c->getLocale() === $catalogue->getLocale()) {
|
175 |
+
throw new \LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale()));
|
176 |
+
}
|
177 |
+
|
178 |
+
foreach ($catalogue->getResources() as $resource) {
|
179 |
+
$c->addResource($resource);
|
180 |
+
}
|
181 |
+
} while ($c = $c->parent);
|
182 |
+
|
183 |
+
$catalogue->parent = $this;
|
184 |
+
$this->fallbackCatalogue = $catalogue;
|
185 |
+
|
186 |
+
foreach ($catalogue->getResources() as $resource) {
|
187 |
+
$this->addResource($resource);
|
188 |
+
}
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* {@inheritdoc}
|
193 |
+
*/
|
194 |
+
public function getFallbackCatalogue()
|
195 |
+
{
|
196 |
+
return $this->fallbackCatalogue;
|
197 |
+
}
|
198 |
+
|
199 |
+
/**
|
200 |
+
* {@inheritdoc}
|
201 |
+
*/
|
202 |
+
public function getResources()
|
203 |
+
{
|
204 |
+
return array_values($this->resources);
|
205 |
+
}
|
206 |
+
|
207 |
+
/**
|
208 |
+
* {@inheritdoc}
|
209 |
+
*/
|
210 |
+
public function addResource(ResourceInterface $resource)
|
211 |
+
{
|
212 |
+
$this->resources[$resource->__toString()] = $resource;
|
213 |
+
}
|
214 |
+
|
215 |
+
/**
|
216 |
+
* {@inheritdoc}
|
217 |
+
*/
|
218 |
+
public function getMetadata($key = '', $domain = 'messages')
|
219 |
+
{
|
220 |
+
if ('' == $domain) {
|
221 |
+
return $this->metadata;
|
222 |
+
}
|
223 |
+
|
224 |
+
if (isset($this->metadata[$domain])) {
|
225 |
+
if ('' == $key) {
|
226 |
+
return $this->metadata[$domain];
|
227 |
+
}
|
228 |
+
|
229 |
+
if (isset($this->metadata[$domain][$key])) {
|
230 |
+
return $this->metadata[$domain][$key];
|
231 |
+
}
|
232 |
+
}
|
233 |
+
}
|
234 |
+
|
235 |
+
/**
|
236 |
+
* {@inheritdoc}
|
237 |
+
*/
|
238 |
+
public function setMetadata($key, $value, $domain = 'messages')
|
239 |
+
{
|
240 |
+
$this->metadata[$domain][$key] = $value;
|
241 |
+
}
|
242 |
+
|
243 |
+
/**
|
244 |
+
* {@inheritdoc}
|
245 |
+
*/
|
246 |
+
public function deleteMetadata($key = '', $domain = 'messages')
|
247 |
+
{
|
248 |
+
if ('' == $domain) {
|
249 |
+
$this->metadata = array();
|
250 |
+
} elseif ('' == $key) {
|
251 |
+
unset($this->metadata[$domain]);
|
252 |
+
} else {
|
253 |
+
unset($this->metadata[$domain][$key]);
|
254 |
+
}
|
255 |
+
}
|
256 |
+
|
257 |
+
/**
|
258 |
+
* Adds current values with the new values.
|
259 |
+
*
|
260 |
+
* @param array $values Values to add
|
261 |
+
*/
|
262 |
+
private function addMetadata(array $values)
|
263 |
+
{
|
264 |
+
foreach ($values as $domain => $keys) {
|
265 |
+
foreach ($keys as $key => $value) {
|
266 |
+
$this->setMetadata($key, $value, $domain);
|
267 |
+
}
|
268 |
+
}
|
269 |
+
}
|
270 |
+
}
|
vendor/symfony/translation/MessageCatalogueInterface.php
ADDED
@@ -0,0 +1,136 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
use Symfony\Component\Config\Resource\ResourceInterface;
|
15 |
+
|
16 |
+
/**
|
17 |
+
* MessageCatalogueInterface.
|
18 |
+
*
|
19 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
20 |
+
*/
|
21 |
+
interface MessageCatalogueInterface
|
22 |
+
{
|
23 |
+
/**
|
24 |
+
* Gets the catalogue locale.
|
25 |
+
*
|
26 |
+
* @return string The locale
|
27 |
+
*/
|
28 |
+
public function getLocale();
|
29 |
+
|
30 |
+
/**
|
31 |
+
* Gets the domains.
|
32 |
+
*
|
33 |
+
* @return array An array of domains
|
34 |
+
*/
|
35 |
+
public function getDomains();
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Gets the messages within a given domain.
|
39 |
+
*
|
40 |
+
* If $domain is null, it returns all messages.
|
41 |
+
*
|
42 |
+
* @param string $domain The domain name
|
43 |
+
*
|
44 |
+
* @return array An array of messages
|
45 |
+
*/
|
46 |
+
public function all($domain = null);
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Sets a message translation.
|
50 |
+
*
|
51 |
+
* @param string $id The message id
|
52 |
+
* @param string $translation The messages translation
|
53 |
+
* @param string $domain The domain name
|
54 |
+
*/
|
55 |
+
public function set($id, $translation, $domain = 'messages');
|
56 |
+
|
57 |
+
/**
|
58 |
+
* Checks if a message has a translation.
|
59 |
+
*
|
60 |
+
* @param string $id The message id
|
61 |
+
* @param string $domain The domain name
|
62 |
+
*
|
63 |
+
* @return bool true if the message has a translation, false otherwise
|
64 |
+
*/
|
65 |
+
public function has($id, $domain = 'messages');
|
66 |
+
|
67 |
+
/**
|
68 |
+
* Checks if a message has a translation (it does not take into account the fallback mechanism).
|
69 |
+
*
|
70 |
+
* @param string $id The message id
|
71 |
+
* @param string $domain The domain name
|
72 |
+
*
|
73 |
+
* @return bool true if the message has a translation, false otherwise
|
74 |
+
*/
|
75 |
+
public function defines($id, $domain = 'messages');
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Gets a message translation.
|
79 |
+
*
|
80 |
+
* @param string $id The message id
|
81 |
+
* @param string $domain The domain name
|
82 |
+
*
|
83 |
+
* @return string The message translation
|
84 |
+
*/
|
85 |
+
public function get($id, $domain = 'messages');
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Sets translations for a given domain.
|
89 |
+
*
|
90 |
+
* @param array $messages An array of translations
|
91 |
+
* @param string $domain The domain name
|
92 |
+
*/
|
93 |
+
public function replace($messages, $domain = 'messages');
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Adds translations for a given domain.
|
97 |
+
*
|
98 |
+
* @param array $messages An array of translations
|
99 |
+
* @param string $domain The domain name
|
100 |
+
*/
|
101 |
+
public function add($messages, $domain = 'messages');
|
102 |
+
|
103 |
+
/**
|
104 |
+
* Merges translations from the given Catalogue into the current one.
|
105 |
+
*
|
106 |
+
* The two catalogues must have the same locale.
|
107 |
+
*/
|
108 |
+
public function addCatalogue(MessageCatalogueInterface $catalogue);
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Merges translations from the given Catalogue into the current one
|
112 |
+
* only when the translation does not exist.
|
113 |
+
*
|
114 |
+
* This is used to provide default translations when they do not exist for the current locale.
|
115 |
+
*/
|
116 |
+
public function addFallbackCatalogue(MessageCatalogueInterface $catalogue);
|
117 |
+
|
118 |
+
/**
|
119 |
+
* Gets the fallback catalogue.
|
120 |
+
*
|
121 |
+
* @return self|null A MessageCatalogueInterface instance or null when no fallback has been set
|
122 |
+
*/
|
123 |
+
public function getFallbackCatalogue();
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Returns an array of resources loaded to build this collection.
|
127 |
+
*
|
128 |
+
* @return ResourceInterface[] An array of resources
|
129 |
+
*/
|
130 |
+
public function getResources();
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Adds a resource for this collection.
|
134 |
+
*/
|
135 |
+
public function addResource(ResourceInterface $resource);
|
136 |
+
}
|
vendor/symfony/translation/MessageSelector.php
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* MessageSelector.
|
16 |
+
*
|
17 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
+
* @author Bernhard Schussek <bschussek@gmail.com>
|
19 |
+
*/
|
20 |
+
class MessageSelector
|
21 |
+
{
|
22 |
+
/**
|
23 |
+
* Given a message with different plural translations separated by a
|
24 |
+
* pipe (|), this method returns the correct portion of the message based
|
25 |
+
* on the given number, locale and the pluralization rules in the message
|
26 |
+
* itself.
|
27 |
+
*
|
28 |
+
* The message supports two different types of pluralization rules:
|
29 |
+
*
|
30 |
+
* interval: {0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples
|
31 |
+
* indexed: There is one apple|There are %count% apples
|
32 |
+
*
|
33 |
+
* The indexed solution can also contain labels (e.g. one: There is one apple).
|
34 |
+
* This is purely for making the translations more clear - it does not
|
35 |
+
* affect the functionality.
|
36 |
+
*
|
37 |
+
* The two methods can also be mixed:
|
38 |
+
* {0} There are no apples|one: There is one apple|more: There are %count% apples
|
39 |
+
*
|
40 |
+
* @param string $message The message being translated
|
41 |
+
* @param int $number The number of items represented for the message
|
42 |
+
* @param string $locale The locale to use for choosing
|
43 |
+
*
|
44 |
+
* @return string
|
45 |
+
*
|
46 |
+
* @throws \InvalidArgumentException
|
47 |
+
*/
|
48 |
+
public function choose($message, $number, $locale)
|
49 |
+
{
|
50 |
+
$parts = explode('|', $message);
|
51 |
+
$explicitRules = array();
|
52 |
+
$standardRules = array();
|
53 |
+
foreach ($parts as $part) {
|
54 |
+
$part = trim($part);
|
55 |
+
|
56 |
+
if (preg_match('/^(?P<interval>'.Interval::getIntervalRegexp().')\s*(?P<message>.*?)$/xs', $part, $matches)) {
|
57 |
+
$explicitRules[$matches['interval']] = $matches['message'];
|
58 |
+
} elseif (preg_match('/^\w+\:\s*(.*?)$/', $part, $matches)) {
|
59 |
+
$standardRules[] = $matches[1];
|
60 |
+
} else {
|
61 |
+
$standardRules[] = $part;
|
62 |
+
}
|
63 |
+
}
|
64 |
+
|
65 |
+
// try to match an explicit rule, then fallback to the standard ones
|
66 |
+
foreach ($explicitRules as $interval => $m) {
|
67 |
+
if (Interval::test($number, $interval)) {
|
68 |
+
return $m;
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
$position = PluralizationRules::get($number, $locale);
|
73 |
+
|
74 |
+
if (!isset($standardRules[$position])) {
|
75 |
+
// when there's exactly one rule given, and that rule is a standard
|
76 |
+
// rule, use this rule
|
77 |
+
if (1 === \count($parts) && isset($standardRules[0])) {
|
78 |
+
return $standardRules[0];
|
79 |
+
}
|
80 |
+
|
81 |
+
throw new \InvalidArgumentException(sprintf('Unable to choose a translation for "%s" with locale "%s" for value "%d". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %%count%% apples").', $message, $locale, $number));
|
82 |
+
}
|
83 |
+
|
84 |
+
return $standardRules[$position];
|
85 |
+
}
|
86 |
+
}
|
vendor/symfony/translation/MetadataAwareInterface.php
ADDED
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* MetadataAwareInterface.
|
16 |
+
*
|
17 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
+
*/
|
19 |
+
interface MetadataAwareInterface
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* Gets metadata for the given domain and key.
|
23 |
+
*
|
24 |
+
* Passing an empty domain will return an array with all metadata indexed by
|
25 |
+
* domain and then by key. Passing an empty key will return an array with all
|
26 |
+
* metadata for the given domain.
|
27 |
+
*
|
28 |
+
* @param string $key The key
|
29 |
+
* @param string $domain The domain name
|
30 |
+
*
|
31 |
+
* @return mixed The value that was set or an array with the domains/keys or null
|
32 |
+
*/
|
33 |
+
public function getMetadata($key = '', $domain = 'messages');
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Adds metadata to a message domain.
|
37 |
+
*
|
38 |
+
* @param string $key The key
|
39 |
+
* @param mixed $value The value
|
40 |
+
* @param string $domain The domain name
|
41 |
+
*/
|
42 |
+
public function setMetadata($key, $value, $domain = 'messages');
|
43 |
+
|
44 |
+
/**
|
45 |
+
* Deletes metadata for the given key and domain.
|
46 |
+
*
|
47 |
+
* Passing an empty domain will delete all metadata. Passing an empty key will
|
48 |
+
* delete all metadata for the given domain.
|
49 |
+
*
|
50 |
+
* @param string $key The key
|
51 |
+
* @param string $domain The domain name
|
52 |
+
*/
|
53 |
+
public function deleteMetadata($key = '', $domain = 'messages');
|
54 |
+
}
|
vendor/symfony/translation/PluralizationRules.php
ADDED
@@ -0,0 +1,216 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Returns the plural rules for a given locale.
|
16 |
+
*
|
17 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
+
*/
|
19 |
+
class PluralizationRules
|
20 |
+
{
|
21 |
+
private static $rules = array();
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Returns the plural position to use for the given locale and number.
|
25 |
+
*
|
26 |
+
* @param int $number The number
|
27 |
+
* @param string $locale The locale
|
28 |
+
*
|
29 |
+
* @return int The plural position
|
30 |
+
*/
|
31 |
+
public static function get($number, $locale)
|
32 |
+
{
|
33 |
+
if ('pt_BR' === $locale) {
|
34 |
+
// temporary set a locale for brazilian
|
35 |
+
$locale = 'xbr';
|
36 |
+
}
|
37 |
+
|
38 |
+
if (\strlen($locale) > 3) {
|
39 |
+
$locale = substr($locale, 0, -\strlen(strrchr($locale, '_')));
|
40 |
+
}
|
41 |
+
|
42 |
+
if (isset(self::$rules[$locale])) {
|
43 |
+
$return = \call_user_func(self::$rules[$locale], $number);
|
44 |
+
|
45 |
+
if (!\is_int($return) || $return < 0) {
|
46 |
+
return 0;
|
47 |
+
}
|
48 |
+
|
49 |
+
return $return;
|
50 |
+
}
|
51 |
+
|
52 |
+
/*
|
53 |
+
* The plural rules are derived from code of the Zend Framework (2010-09-25),
|
54 |
+
* which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).
|
55 |
+
* Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
|
56 |
+
*/
|
57 |
+
switch ($locale) {
|
58 |
+
case 'az':
|
59 |
+
case 'bo':
|
60 |
+
case 'dz':
|
61 |
+
case 'id':
|
62 |
+
case 'ja':
|
63 |
+
case 'jv':
|
64 |
+
case 'ka':
|
65 |
+
case 'km':
|
66 |
+
case 'kn':
|
67 |
+
case 'ko':
|
68 |
+
case 'ms':
|
69 |
+
case 'th':
|
70 |
+
case 'tr':
|
71 |
+
case 'vi':
|
72 |
+
case 'zh':
|
73 |
+
return 0;
|
74 |
+
|
75 |
+
case 'af':
|
76 |
+
case 'bn':
|
77 |
+
case 'bg':
|
78 |
+
case 'ca':
|
79 |
+
case 'da':
|
80 |
+
case 'de':
|
81 |
+
case 'el':
|
82 |
+
case 'en':
|
83 |
+
case 'eo':
|
84 |
+
case 'es':
|
85 |
+
case 'et':
|
86 |
+
case 'eu':
|
87 |
+
case 'fa':
|
88 |
+
case 'fi':
|
89 |
+
case 'fo':
|
90 |
+
case 'fur':
|
91 |
+
case 'fy':
|
92 |
+
case 'gl':
|
93 |
+
case 'gu':
|
94 |
+
case 'ha':
|
95 |
+
case 'he':
|
96 |
+
case 'hu':
|
97 |
+
case 'is':
|
98 |
+
case 'it':
|
99 |
+
case 'ku':
|
100 |
+
case 'lb':
|
101 |
+
case 'ml':
|
102 |
+
case 'mn':
|
103 |
+
case 'mr':
|
104 |
+
case 'nah':
|
105 |
+
case 'nb':
|
106 |
+
case 'ne':
|
107 |
+
case 'nl':
|
108 |
+
case 'nn':
|
109 |
+
case 'no':
|
110 |
+
case 'oc':
|
111 |
+
case 'om':
|
112 |
+
case 'or':
|
113 |
+
case 'pa':
|
114 |
+
case 'pap':
|
115 |
+
case 'ps':
|
116 |
+
case 'pt':
|
117 |
+
case 'so':
|
118 |
+
case 'sq':
|
119 |
+
case 'sv':
|
120 |
+
case 'sw':
|
121 |
+
case 'ta':
|
122 |
+
case 'te':
|
123 |
+
case 'tk':
|
124 |
+
case 'ur':
|
125 |
+
case 'zu':
|
126 |
+
return (1 == $number) ? 0 : 1;
|
127 |
+
|
128 |
+
case 'am':
|
129 |
+
case 'bh':
|
130 |
+
case 'fil':
|
131 |
+
case 'fr':
|
132 |
+
case 'gun':
|
133 |
+
case 'hi':
|
134 |
+
case 'hy':
|
135 |
+
case 'ln':
|
136 |
+
case 'mg':
|
137 |
+
case 'nso':
|
138 |
+
case 'xbr':
|
139 |
+
case 'ti':
|
140 |
+
case 'wa':
|
141 |
+
return ((0 == $number) || (1 == $number)) ? 0 : 1;
|
142 |
+
|
143 |
+
case 'be':
|
144 |
+
case 'bs':
|
145 |
+
case 'hr':
|
146 |
+
case 'ru':
|
147 |
+
case 'sh':
|
148 |
+
case 'sr':
|
149 |
+
case 'uk':
|
150 |
+
return ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2);
|
151 |
+
|
152 |
+
case 'cs':
|
153 |
+
case 'sk':
|
154 |
+
return (1 == $number) ? 0 : ((($number >= 2) && ($number <= 4)) ? 1 : 2);
|
155 |
+
|
156 |
+
case 'ga':
|
157 |
+
return (1 == $number) ? 0 : ((2 == $number) ? 1 : 2);
|
158 |
+
|
159 |
+
case 'lt':
|
160 |
+
return ((1 == $number % 10) && (11 != $number % 100)) ? 0 : ((($number % 10 >= 2) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 1 : 2);
|
161 |
+
|
162 |
+
case 'sl':
|
163 |
+
return (1 == $number % 100) ? 0 : ((2 == $number % 100) ? 1 : (((3 == $number % 100) || (4 == $number % 100)) ? 2 : 3));
|
164 |
+
|
165 |
+
case 'mk':
|
166 |
+
return (1 == $number % 10) ? 0 : 1;
|
167 |
+
|
168 |
+
case 'mt':
|
169 |
+
return (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 1) && ($number % 100 < 11))) ? 1 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 2 : 3));
|
170 |
+
|
171 |
+
case 'lv':
|
172 |
+
return (0 == $number) ? 0 : (((1 == $number % 10) && (11 != $number % 100)) ? 1 : 2);
|
173 |
+
|
174 |
+
case 'pl':
|
175 |
+
return (1 == $number) ? 0 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 1 : 2);
|
176 |
+
|
177 |
+
case 'cy':
|
178 |
+
return (1 == $number) ? 0 : ((2 == $number) ? 1 : (((8 == $number) || (11 == $number)) ? 2 : 3));
|
179 |
+
|
180 |
+
case 'ro':
|
181 |
+
return (1 == $number) ? 0 : (((0 == $number) || (($number % 100 > 0) && ($number % 100 < 20))) ? 1 : 2);
|
182 |
+
|
183 |
+
case 'ar':
|
184 |
+
return (0 == $number) ? 0 : ((1 == $number) ? 1 : ((2 == $number) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : 5))));
|
185 |
+
|
186 |
+
default:
|
187 |
+
return 0;
|
188 |
+
}
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* Overrides the default plural rule for a given locale.
|
193 |
+
*
|
194 |
+
* @param callable $rule A PHP callable
|
195 |
+
* @param string $locale The locale
|
196 |
+
*
|
197 |
+
* @throws \LogicException
|
198 |
+
*/
|
199 |
+
public static function set($rule, $locale)
|
200 |
+
{
|
201 |
+
if ('pt_BR' === $locale) {
|
202 |
+
// temporary set a locale for brazilian
|
203 |
+
$locale = 'xbr';
|
204 |
+
}
|
205 |
+
|
206 |
+
if (\strlen($locale) > 3) {
|
207 |
+
$locale = substr($locale, 0, -\strlen(strrchr($locale, '_')));
|
208 |
+
}
|
209 |
+
|
210 |
+
if (!\is_callable($rule)) {
|
211 |
+
throw new \LogicException('The given rule can not be called');
|
212 |
+
}
|
213 |
+
|
214 |
+
self::$rules[$locale] = $rule;
|
215 |
+
}
|
216 |
+
}
|
vendor/symfony/translation/Translator.php
ADDED
@@ -0,0 +1,476 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
use Symfony\Component\Config\ConfigCacheFactory;
|
15 |
+
use Symfony\Component\Config\ConfigCacheFactoryInterface;
|
16 |
+
use Symfony\Component\Config\ConfigCacheInterface;
|
17 |
+
use Symfony\Component\Translation\Exception\NotFoundResourceException;
|
18 |
+
use Symfony\Component\Translation\Loader\LoaderInterface;
|
19 |
+
|
20 |
+
/**
|
21 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
22 |
+
*/
|
23 |
+
class Translator implements TranslatorInterface, TranslatorBagInterface
|
24 |
+
{
|
25 |
+
/**
|
26 |
+
* @var MessageCatalogueInterface[]
|
27 |
+
*/
|
28 |
+
protected $catalogues = array();
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @var string
|
32 |
+
*/
|
33 |
+
protected $locale;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* @var array
|
37 |
+
*/
|
38 |
+
private $fallbackLocales = array();
|
39 |
+
|
40 |
+
/**
|
41 |
+
* @var LoaderInterface[]
|
42 |
+
*/
|
43 |
+
private $loaders = array();
|
44 |
+
|
45 |
+
/**
|
46 |
+
* @var array
|
47 |
+
*/
|
48 |
+
private $resources = array();
|
49 |
+
|
50 |
+
/**
|
51 |
+
* @var MessageSelector
|
52 |
+
*/
|
53 |
+
private $selector;
|
54 |
+
|
55 |
+
/**
|
56 |
+
* @var string
|
57 |
+
*/
|
58 |
+
private $cacheDir;
|
59 |
+
|
60 |
+
/**
|
61 |
+
* @var bool
|
62 |
+
*/
|
63 |
+
private $debug;
|
64 |
+
|
65 |
+
/**
|
66 |
+
* @var ConfigCacheFactoryInterface|null
|
67 |
+
*/
|
68 |
+
private $configCacheFactory;
|
69 |
+
|
70 |
+
/**
|
71 |
+
* @param string $locale The locale
|
72 |
+
* @param MessageSelector|null $selector The message selector for pluralization
|
73 |
+
* @param string|null $cacheDir The directory to use for the cache
|
74 |
+
* @param bool $debug Use cache in debug mode ?
|
75 |
+
*
|
76 |
+
* @throws \InvalidArgumentException If a locale contains invalid characters
|
77 |
+
*/
|
78 |
+
public function __construct($locale, MessageSelector $selector = null, $cacheDir = null, $debug = false)
|
79 |
+
{
|
80 |
+
$this->setLocale($locale);
|
81 |
+
$this->selector = $selector ?: new MessageSelector();
|
82 |
+
$this->cacheDir = $cacheDir;
|
83 |
+
$this->debug = $debug;
|
84 |
+
}
|
85 |
+
|
86 |
+
public function setConfigCacheFactory(ConfigCacheFactoryInterface $configCacheFactory)
|
87 |
+
{
|
88 |
+
$this->configCacheFactory = $configCacheFactory;
|
89 |
+
}
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Adds a Loader.
|
93 |
+
*
|
94 |
+
* @param string $format The name of the loader (@see addResource())
|
95 |
+
* @param LoaderInterface $loader A LoaderInterface instance
|
96 |
+
*/
|
97 |
+
public function addLoader($format, LoaderInterface $loader)
|
98 |
+
{
|
99 |
+
$this->loaders[$format] = $loader;
|
100 |
+
}
|
101 |
+
|
102 |
+
/**
|
103 |
+
* Adds a Resource.
|
104 |
+
*
|
105 |
+
* @param string $format The name of the loader (@see addLoader())
|
106 |
+
* @param mixed $resource The resource name
|
107 |
+
* @param string $locale The locale
|
108 |
+
* @param string $domain The domain
|
109 |
+
*
|
110 |
+
* @throws \InvalidArgumentException If the locale contains invalid characters
|
111 |
+
*/
|
112 |
+
public function addResource($format, $resource, $locale, $domain = null)
|
113 |
+
{
|
114 |
+
if (null === $domain) {
|
115 |
+
$domain = 'messages';
|
116 |
+
}
|
117 |
+
|
118 |
+
$this->assertValidLocale($locale);
|
119 |
+
|
120 |
+
$this->resources[$locale][] = array($format, $resource, $domain);
|
121 |
+
|
122 |
+
if (\in_array($locale, $this->fallbackLocales)) {
|
123 |
+
$this->catalogues = array();
|
124 |
+
} else {
|
125 |
+
unset($this->catalogues[$locale]);
|
126 |
+
}
|
127 |
+
}
|
128 |
+
|
129 |
+
/**
|
130 |
+
* {@inheritdoc}
|
131 |
+
*/
|
132 |
+
public function setLocale($locale)
|
133 |
+
{
|
134 |
+
$this->assertValidLocale($locale);
|
135 |
+
$this->locale = $locale;
|
136 |
+
}
|
137 |
+
|
138 |
+
/**
|
139 |
+
* {@inheritdoc}
|
140 |
+
*/
|
141 |
+
public function getLocale()
|
142 |
+
{
|
143 |
+
return $this->locale;
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Sets the fallback locale(s).
|
148 |
+
*
|
149 |
+
* @param string|array $locales The fallback locale(s)
|
150 |
+
*
|
151 |
+
* @throws \InvalidArgumentException If a locale contains invalid characters
|
152 |
+
*
|
153 |
+
* @deprecated since version 2.3, to be removed in 3.0. Use setFallbackLocales() instead
|
154 |
+
*/
|
155 |
+
public function setFallbackLocale($locales)
|
156 |
+
{
|
157 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.3 and will be removed in 3.0. Use the setFallbackLocales() method instead.', E_USER_DEPRECATED);
|
158 |
+
|
159 |
+
$this->setFallbackLocales(\is_array($locales) ? $locales : array($locales));
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
* Sets the fallback locales.
|
164 |
+
*
|
165 |
+
* @param array $locales The fallback locales
|
166 |
+
*
|
167 |
+
* @throws \InvalidArgumentException If a locale contains invalid characters
|
168 |
+
*/
|
169 |
+
public function setFallbackLocales(array $locales)
|
170 |
+
{
|
171 |
+
// needed as the fallback locales are linked to the already loaded catalogues
|
172 |
+
$this->catalogues = array();
|
173 |
+
|
174 |
+
foreach ($locales as $locale) {
|
175 |
+
$this->assertValidLocale($locale);
|
176 |
+
}
|
177 |
+
|
178 |
+
$this->fallbackLocales = $locales;
|
179 |
+
}
|
180 |
+
|
181 |
+
/**
|
182 |
+
* Gets the fallback locales.
|
183 |
+
*
|
184 |
+
* @return array The fallback locales
|
185 |
+
*/
|
186 |
+
public function getFallbackLocales()
|
187 |
+
{
|
188 |
+
return $this->fallbackLocales;
|
189 |
+
}
|
190 |
+
|
191 |
+
/**
|
192 |
+
* {@inheritdoc}
|
193 |
+
*/
|
194 |
+
public function trans($id, array $parameters = array(), $domain = null, $locale = null)
|
195 |
+
{
|
196 |
+
if (null === $domain) {
|
197 |
+
$domain = 'messages';
|
198 |
+
}
|
199 |
+
|
200 |
+
return strtr($this->getCatalogue($locale)->get((string) $id, $domain), $parameters);
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* {@inheritdoc}
|
205 |
+
*/
|
206 |
+
public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null)
|
207 |
+
{
|
208 |
+
if (null === $domain) {
|
209 |
+
$domain = 'messages';
|
210 |
+
}
|
211 |
+
|
212 |
+
$id = (string) $id;
|
213 |
+
$catalogue = $this->getCatalogue($locale);
|
214 |
+
$locale = $catalogue->getLocale();
|
215 |
+
while (!$catalogue->defines($id, $domain)) {
|
216 |
+
if ($cat = $catalogue->getFallbackCatalogue()) {
|
217 |
+
$catalogue = $cat;
|
218 |
+
$locale = $catalogue->getLocale();
|
219 |
+
} else {
|
220 |
+
break;
|
221 |
+
}
|
222 |
+
}
|
223 |
+
|
224 |
+
return strtr($this->selector->choose($catalogue->get($id, $domain), (int) $number, $locale), $parameters);
|
225 |
+
}
|
226 |
+
|
227 |
+
/**
|
228 |
+
* {@inheritdoc}
|
229 |
+
*/
|
230 |
+
public function getCatalogue($locale = null)
|
231 |
+
{
|
232 |
+
if (null === $locale) {
|
233 |
+
$locale = $this->getLocale();
|
234 |
+
} else {
|
235 |
+
$this->assertValidLocale($locale);
|
236 |
+
}
|
237 |
+
|
238 |
+
if (!isset($this->catalogues[$locale])) {
|
239 |
+
$this->loadCatalogue($locale);
|
240 |
+
}
|
241 |
+
|
242 |
+
return $this->catalogues[$locale];
|
243 |
+
}
|
244 |
+
|
245 |
+
/**
|
246 |
+
* Gets the loaders.
|
247 |
+
*
|
248 |
+
* @return array LoaderInterface[]
|
249 |
+
*/
|
250 |
+
protected function getLoaders()
|
251 |
+
{
|
252 |
+
return $this->loaders;
|
253 |
+
}
|
254 |
+
|
255 |
+
/**
|
256 |
+
* Collects all messages for the given locale.
|
257 |
+
*
|
258 |
+
* @param string|null $locale Locale of translations, by default is current locale
|
259 |
+
*
|
260 |
+
* @return array[array] indexed by catalog
|
261 |
+
*
|
262 |
+
* @deprecated since version 2.8, to be removed in 3.0. Use TranslatorBagInterface::getCatalogue() method instead.
|
263 |
+
*/
|
264 |
+
public function getMessages($locale = null)
|
265 |
+
{
|
266 |
+
@trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.8 and will be removed in 3.0. Use TranslatorBagInterface::getCatalogue() method instead.', E_USER_DEPRECATED);
|
267 |
+
|
268 |
+
$catalogue = $this->getCatalogue($locale);
|
269 |
+
$messages = $catalogue->all();
|
270 |
+
while ($catalogue = $catalogue->getFallbackCatalogue()) {
|
271 |
+
$messages = array_replace_recursive($catalogue->all(), $messages);
|
272 |
+
}
|
273 |
+
|
274 |
+
return $messages;
|
275 |
+
}
|
276 |
+
|
277 |
+
/**
|
278 |
+
* @param string $locale
|
279 |
+
*/
|
280 |
+
protected function loadCatalogue($locale)
|
281 |
+
{
|
282 |
+
if (null === $this->cacheDir) {
|
283 |
+
$this->initializeCatalogue($locale);
|
284 |
+
} else {
|
285 |
+
$this->initializeCacheCatalogue($locale);
|
286 |
+
}
|
287 |
+
}
|
288 |
+
|
289 |
+
/**
|
290 |
+
* @param string $locale
|
291 |
+
*/
|
292 |
+
protected function initializeCatalogue($locale)
|
293 |
+
{
|
294 |
+
$this->assertValidLocale($locale);
|
295 |
+
|
296 |
+
try {
|
297 |
+
$this->doLoadCatalogue($locale);
|
298 |
+
} catch (NotFoundResourceException $e) {
|
299 |
+
if (!$this->computeFallbackLocales($locale)) {
|
300 |
+
throw $e;
|
301 |
+
}
|
302 |
+
}
|
303 |
+
$this->loadFallbackCatalogues($locale);
|
304 |
+
}
|
305 |
+
|
306 |
+
/**
|
307 |
+
* @param string $locale
|
308 |
+
*/
|
309 |
+
private function initializeCacheCatalogue($locale)
|
310 |
+
{
|
311 |
+
if (isset($this->catalogues[$locale])) {
|
312 |
+
/* Catalogue already initialized. */
|
313 |
+
return;
|
314 |
+
}
|
315 |
+
|
316 |
+
$this->assertValidLocale($locale);
|
317 |
+
$self = $this; // required for PHP 5.3 where "$this" cannot be use()d in anonymous functions. Change in Symfony 3.0.
|
318 |
+
$cache = $this->getConfigCacheFactory()->cache($this->getCatalogueCachePath($locale),
|
319 |
+
function (ConfigCacheInterface $cache) use ($self, $locale) {
|
320 |
+
$self->dumpCatalogue($locale, $cache);
|
321 |
+
}
|
322 |
+
);
|
323 |
+
|
324 |
+
if (isset($this->catalogues[$locale])) {
|
325 |
+
/* Catalogue has been initialized as it was written out to cache. */
|
326 |
+
return;
|
327 |
+
}
|
328 |
+
|
329 |
+
/* Read catalogue from cache. */
|
330 |
+
$this->catalogues[$locale] = include $cache->getPath();
|
331 |
+
}
|
332 |
+
|
333 |
+
/**
|
334 |
+
* This method is public because it needs to be callable from a closure in PHP 5.3. It should be made protected (or even private, if possible) in 3.0.
|
335 |
+
*
|
336 |
+
* @internal
|
337 |
+
*/
|
338 |
+
public function dumpCatalogue($locale, ConfigCacheInterface $cache)
|
339 |
+
{
|
340 |
+
$this->initializeCatalogue($locale);
|
341 |
+
$fallbackContent = $this->getFallbackContent($this->catalogues[$locale]);
|
342 |
+
|
343 |
+
$content = sprintf(<<<EOF
|
344 |
+
<?php
|
345 |
+
|
346 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
347 |
+
|
348 |
+
\$catalogue = new MessageCatalogue('%s', %s);
|
349 |
+
|
350 |
+
%s
|
351 |
+
return \$catalogue;
|
352 |
+
|
353 |
+
EOF
|
354 |
+
,
|
355 |
+
$locale,
|
356 |
+
var_export($this->catalogues[$locale]->all(), true),
|
357 |
+
$fallbackContent
|
358 |
+
);
|
359 |
+
|
360 |
+
$cache->write($content, $this->catalogues[$locale]->getResources());
|
361 |
+
}
|
362 |
+
|
363 |
+
private function getFallbackContent(MessageCatalogue $catalogue)
|
364 |
+
{
|
365 |
+
$fallbackContent = '';
|
366 |
+
$current = '';
|
367 |
+
$replacementPattern = '/[^a-z0-9_]/i';
|
368 |
+
$fallbackCatalogue = $catalogue->getFallbackCatalogue();
|
369 |
+
while ($fallbackCatalogue) {
|
370 |
+
$fallback = $fallbackCatalogue->getLocale();
|
371 |
+
$fallbackSuffix = ucfirst(preg_replace($replacementPattern, '_', $fallback));
|
372 |
+
$currentSuffix = ucfirst(preg_replace($replacementPattern, '_', $current));
|
373 |
+
|
374 |
+
$fallbackContent .= sprintf(<<<'EOF'
|
375 |
+
$catalogue%s = new MessageCatalogue('%s', %s);
|
376 |
+
$catalogue%s->addFallbackCatalogue($catalogue%s);
|
377 |
+
|
378 |
+
EOF
|
379 |
+
,
|
380 |
+
$fallbackSuffix,
|
381 |
+
$fallback,
|
382 |
+
var_export($fallbackCatalogue->all(), true),
|
383 |
+
$currentSuffix,
|
384 |
+
$fallbackSuffix
|
385 |
+
);
|
386 |
+
$current = $fallbackCatalogue->getLocale();
|
387 |
+
$fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue();
|
388 |
+
}
|
389 |
+
|
390 |
+
return $fallbackContent;
|
391 |
+
}
|
392 |
+
|
393 |
+
private function getCatalogueCachePath($locale)
|
394 |
+
{
|
395 |
+
return $this->cacheDir.'/catalogue.'.$locale.'.'.sha1(serialize($this->fallbackLocales)).'.php';
|
396 |
+
}
|
397 |
+
|
398 |
+
private function doLoadCatalogue($locale)
|
399 |
+
{
|
400 |
+
$this->catalogues[$locale] = new MessageCatalogue($locale);
|
401 |
+
|
402 |
+
if (isset($this->resources[$locale])) {
|
403 |
+
foreach ($this->resources[$locale] as $resource) {
|
404 |
+
if (!isset($this->loaders[$resource[0]])) {
|
405 |
+
throw new \RuntimeException(sprintf('The "%s" translation loader is not registered.', $resource[0]));
|
406 |
+
}
|
407 |
+
$this->catalogues[$locale]->addCatalogue($this->loaders[$resource[0]]->load($resource[1], $locale, $resource[2]));
|
408 |
+
}
|
409 |
+
}
|
410 |
+
}
|
411 |
+
|
412 |
+
private function loadFallbackCatalogues($locale)
|
413 |
+
{
|
414 |
+
$current = $this->catalogues[$locale];
|
415 |
+
|
416 |
+
foreach ($this->computeFallbackLocales($locale) as $fallback) {
|
417 |
+
if (!isset($this->catalogues[$fallback])) {
|
418 |
+
$this->initializeCatalogue($fallback);
|
419 |
+
}
|
420 |
+
|
421 |
+
$fallbackCatalogue = new MessageCatalogue($fallback, $this->catalogues[$fallback]->all());
|
422 |
+
foreach ($this->catalogues[$fallback]->getResources() as $resource) {
|
423 |
+
$fallbackCatalogue->addResource($resource);
|
424 |
+
}
|
425 |
+
$current->addFallbackCatalogue($fallbackCatalogue);
|
426 |
+
$current = $fallbackCatalogue;
|
427 |
+
}
|
428 |
+
}
|
429 |
+
|
430 |
+
protected function computeFallbackLocales($locale)
|
431 |
+
{
|
432 |
+
$locales = array();
|
433 |
+
foreach ($this->fallbackLocales as $fallback) {
|
434 |
+
if ($fallback === $locale) {
|
435 |
+
continue;
|
436 |
+
}
|
437 |
+
|
438 |
+
$locales[] = $fallback;
|
439 |
+
}
|
440 |
+
|
441 |
+
if (false !== strrchr($locale, '_')) {
|
442 |
+
array_unshift($locales, substr($locale, 0, -\strlen(strrchr($locale, '_'))));
|
443 |
+
}
|
444 |
+
|
445 |
+
return array_unique($locales);
|
446 |
+
}
|
447 |
+
|
448 |
+
/**
|
449 |
+
* Asserts that the locale is valid, throws an Exception if not.
|
450 |
+
*
|
451 |
+
* @param string $locale Locale to tests
|
452 |
+
*
|
453 |
+
* @throws \InvalidArgumentException If the locale contains invalid characters
|
454 |
+
*/
|
455 |
+
protected function assertValidLocale($locale)
|
456 |
+
{
|
457 |
+
if (1 !== preg_match('/^[a-z0-9@_\\.\\-]*$/i', $locale)) {
|
458 |
+
throw new \InvalidArgumentException(sprintf('Invalid "%s" locale.', $locale));
|
459 |
+
}
|
460 |
+
}
|
461 |
+
|
462 |
+
/**
|
463 |
+
* Provides the ConfigCache factory implementation, falling back to a
|
464 |
+
* default implementation if necessary.
|
465 |
+
*
|
466 |
+
* @return ConfigCacheFactoryInterface $configCacheFactory
|
467 |
+
*/
|
468 |
+
private function getConfigCacheFactory()
|
469 |
+
{
|
470 |
+
if (!$this->configCacheFactory) {
|
471 |
+
$this->configCacheFactory = new ConfigCacheFactory($this->debug);
|
472 |
+
}
|
473 |
+
|
474 |
+
return $this->configCacheFactory;
|
475 |
+
}
|
476 |
+
}
|
vendor/symfony/translation/TranslatorBagInterface.php
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* TranslatorBagInterface.
|
16 |
+
*
|
17 |
+
* @author Abdellatif Ait boudad <a.aitboudad@gmail.com>
|
18 |
+
*/
|
19 |
+
interface TranslatorBagInterface
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* Gets the catalogue by locale.
|
23 |
+
*
|
24 |
+
* @param string|null $locale The locale or null to use the default
|
25 |
+
*
|
26 |
+
* @return MessageCatalogueInterface
|
27 |
+
*
|
28 |
+
* @throws \InvalidArgumentException If the locale contains invalid characters
|
29 |
+
*/
|
30 |
+
public function getCatalogue($locale = null);
|
31 |
+
}
|
vendor/symfony/translation/TranslatorInterface.php
ADDED
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* TranslatorInterface.
|
16 |
+
*
|
17 |
+
* @author Fabien Potencier <fabien@symfony.com>
|
18 |
+
*/
|
19 |
+
interface TranslatorInterface
|
20 |
+
{
|
21 |
+
/**
|
22 |
+
* Translates the given message.
|
23 |
+
*
|
24 |
+
* @param string $id The message id (may also be an object that can be cast to string)
|
25 |
+
* @param array $parameters An array of parameters for the message
|
26 |
+
* @param string|null $domain The domain for the message or null to use the default
|
27 |
+
* @param string|null $locale The locale or null to use the default
|
28 |
+
*
|
29 |
+
* @return string The translated string
|
30 |
+
*
|
31 |
+
* @throws \InvalidArgumentException If the locale contains invalid characters
|
32 |
+
*/
|
33 |
+
public function trans($id, array $parameters = array(), $domain = null, $locale = null);
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Translates the given choice message by choosing a translation according to a number.
|
37 |
+
*
|
38 |
+
* @param string $id The message id (may also be an object that can be cast to string)
|
39 |
+
* @param int $number The number to use to find the indice of the message
|
40 |
+
* @param array $parameters An array of parameters for the message
|
41 |
+
* @param string|null $domain The domain for the message or null to use the default
|
42 |
+
* @param string|null $locale The locale or null to use the default
|
43 |
+
*
|
44 |
+
* @return string The translated string
|
45 |
+
*
|
46 |
+
* @throws \InvalidArgumentException If the locale contains invalid characters
|
47 |
+
*/
|
48 |
+
public function transChoice($id, $number, array $parameters = array(), $domain = null, $locale = null);
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Sets the current locale.
|
52 |
+
*
|
53 |
+
* @param string $locale The locale
|
54 |
+
*
|
55 |
+
* @throws \InvalidArgumentException If the locale contains invalid characters
|
56 |
+
*/
|
57 |
+
public function setLocale($locale);
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Returns the current locale.
|
61 |
+
*
|
62 |
+
* @return string The locale
|
63 |
+
*/
|
64 |
+
public function getLocale();
|
65 |
+
}
|
vendor/symfony/translation/Util/ArrayConverter.php
ADDED
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Util;
|
13 |
+
|
14 |
+
/**
|
15 |
+
* ArrayConverter generates tree like structure from a message catalogue.
|
16 |
+
* e.g. this
|
17 |
+
* 'foo.bar1' => 'test1',
|
18 |
+
* 'foo.bar2' => 'test2'
|
19 |
+
* converts to follows:
|
20 |
+
* foo:
|
21 |
+
* bar1: test1
|
22 |
+
* bar2: test2.
|
23 |
+
*
|
24 |
+
* @author Gennady Telegin <gtelegin@gmail.com>
|
25 |
+
*/
|
26 |
+
class ArrayConverter
|
27 |
+
{
|
28 |
+
/**
|
29 |
+
* Converts linear messages array to tree-like array.
|
30 |
+
* For example this rray('foo.bar' => 'value') will be converted to array('foo' => array('bar' => 'value')).
|
31 |
+
*
|
32 |
+
* @param array $messages Linear messages array
|
33 |
+
*
|
34 |
+
* @return array Tree-like messages array
|
35 |
+
*/
|
36 |
+
public static function expandToTree(array $messages)
|
37 |
+
{
|
38 |
+
$tree = array();
|
39 |
+
|
40 |
+
foreach ($messages as $id => $value) {
|
41 |
+
$referenceToElement = &self::getElementByPath($tree, explode('.', $id));
|
42 |
+
|
43 |
+
$referenceToElement = $value;
|
44 |
+
|
45 |
+
unset($referenceToElement);
|
46 |
+
}
|
47 |
+
|
48 |
+
return $tree;
|
49 |
+
}
|
50 |
+
|
51 |
+
private static function &getElementByPath(array &$tree, array $parts)
|
52 |
+
{
|
53 |
+
$elem = &$tree;
|
54 |
+
$parentOfElem = null;
|
55 |
+
|
56 |
+
foreach ($parts as $i => $part) {
|
57 |
+
if (isset($elem[$part]) && \is_string($elem[$part])) {
|
58 |
+
/* Process next case:
|
59 |
+
* 'foo': 'test1',
|
60 |
+
* 'foo.bar': 'test2'
|
61 |
+
*
|
62 |
+
* $tree['foo'] was string before we found array {bar: test2}.
|
63 |
+
* Treat new element as string too, e.g. add $tree['foo.bar'] = 'test2';
|
64 |
+
*/
|
65 |
+
$elem = &$elem[implode('.', \array_slice($parts, $i))];
|
66 |
+
break;
|
67 |
+
}
|
68 |
+
$parentOfElem = &$elem;
|
69 |
+
$elem = &$elem[$part];
|
70 |
+
}
|
71 |
+
|
72 |
+
if (\is_array($elem) && \count($elem) > 0 && $parentOfElem) {
|
73 |
+
/* Process next case:
|
74 |
+
* 'foo.bar': 'test1'
|
75 |
+
* 'foo': 'test2'
|
76 |
+
*
|
77 |
+
* $tree['foo'] was array = {bar: 'test1'} before we found string constant `foo`.
|
78 |
+
* Cancel treating $tree['foo'] as array and cancel back it expansion,
|
79 |
+
* e.g. make it $tree['foo.bar'] = 'test1' again.
|
80 |
+
*/
|
81 |
+
self::cancelExpand($parentOfElem, $part, $elem);
|
82 |
+
}
|
83 |
+
|
84 |
+
return $elem;
|
85 |
+
}
|
86 |
+
|
87 |
+
private static function cancelExpand(array &$tree, $prefix, array $node)
|
88 |
+
{
|
89 |
+
$prefix .= '.';
|
90 |
+
|
91 |
+
foreach ($node as $id => $value) {
|
92 |
+
if (\is_string($value)) {
|
93 |
+
$tree[$prefix.$id] = $value;
|
94 |
+
} else {
|
95 |
+
self::cancelExpand($tree, $prefix.$id, $value);
|
96 |
+
}
|
97 |
+
}
|
98 |
+
}
|
99 |
+
}
|
vendor/symfony/translation/Writer/TranslationWriter.php
ADDED
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/*
|
4 |
+
* This file is part of the Symfony package.
|
5 |
+
*
|
6 |
+
* (c) Fabien Potencier <fabien@symfony.com>
|
7 |
+
*
|
8 |
+
* For the full copyright and license information, please view the LICENSE
|
9 |
+
* file that was distributed with this source code.
|
10 |
+
*/
|
11 |
+
|
12 |
+
namespace Symfony\Component\Translation\Writer;
|
13 |
+
|
14 |
+
use Symfony\Component\Translation\Dumper\DumperInterface;
|
15 |
+
use Symfony\Component\Translation\MessageCatalogue;
|
16 |
+
|
17 |
+
/**
|
18 |
+
* TranslationWriter writes translation messages.
|
19 |
+
*
|
20 |
+
* @author Michel Salib <michelsalib@hotmail.com>
|
21 |
+
*/
|
22 |
+
class TranslationWriter
|
23 |
+
{
|
24 |
+
private $dumpers = array();
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Adds a dumper to the writer.
|
28 |
+
*
|
29 |
+
* @param string $format The format of the dumper
|
30 |
+
* @param DumperInterface $dumper The dumper
|
31 |
+
*/
|
32 |
+
public function addDumper($format, DumperInterface $dumper)
|
33 |
+
{
|
34 |
+
$this->dumpers[$format] = $dumper;
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Disables dumper backup.
|
39 |
+
*/
|
40 |
+
public function disableBackup()
|
41 |
+
{
|
42 |
+
foreach ($this->dumpers as $dumper) {
|
43 |
+
if (method_exists($dumper, 'setBackup')) {
|
44 |
+
$dumper->setBackup(false);
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
/**
|
50 |
+
* Obtains the list of supported formats.
|
51 |
+
*
|
52 |
+
* @return array
|
53 |
+
*/
|
54 |
+
public function getFormats()
|
55 |
+
{
|
56 |
+
return array_keys($this->dumpers);
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Writes translation from the catalogue according to the selected format.
|
61 |
+
*
|
62 |
+
* @param MessageCatalogue $catalogue The message catalogue to dump
|
63 |
+
* @param string $format The format to use to dump the messages
|
64 |
+
* @param array $options Options that are passed to the dumper
|
65 |
+
*
|
66 |
+
* @throws \InvalidArgumentException
|
67 |
+
*/
|
68 |
+
public function writeTranslations(MessageCatalogue $catalogue, $format, $options = array())
|
69 |
+
{
|
70 |
+
if (!isset($this->dumpers[$format])) {
|
71 |
+
throw new \InvalidArgumentException(sprintf('There is no dumper associated with format "%s".', $format));
|
72 |
+
}
|
73 |
+
|
74 |
+
// get the right dumper
|
75 |
+
$dumper = $this->dumpers[$format];
|
76 |
+
|
77 |
+
if (isset($options['path']) && !is_dir($options['path']) && !@mkdir($options['path'], 0777, true) && !is_dir($options['path'])) {
|
78 |
+
throw new \RuntimeException(sprintf('Translation Writer was not able to create directory "%s"', $options['path']));
|
79 |
+
}
|
80 |
+
|
81 |
+
// save
|
82 |
+
$dumper->dump($catalogue, $options);
|
83 |
+
}
|
84 |
+
}
|
vendor/symfony/translation/composer.json
ADDED
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
{
|
2 |
+
"name": "symfony/translation",
|
3 |
+
"type": "library",
|
4 |
+
"description": "Symfony Translation Component",
|
5 |
+
"keywords": [],
|
6 |
+
"homepage": "https://symfony.com",
|
7 |
+
"license": "MIT",
|
8 |
+
"authors": [
|
9 |
+
{
|
10 |
+
"name": "Fabien Potencier",
|
11 |
+
"email": "fabien@symfony.com"
|
12 |
+
},
|
13 |
+
{
|
14 |
+
"name": "Symfony Community",
|
15 |
+
"homepage": "https://symfony.com/contributors"
|
16 |
+
}
|
17 |
+
],
|
18 |
+
"require": {
|
19 |
+
"php": ">=5.3.9",
|
20 |
+
"symfony/polyfill-mbstring": "~1.0"
|
21 |
+
},
|
22 |
+
"require-dev": {
|
23 |
+
"symfony/config": "~2.8",
|
24 |
+
"symfony/intl": "~2.7.25|^2.8.18|~3.2.5",
|
25 |
+
"symfony/yaml": "~2.2|~3.0.0",
|
26 |
+
"psr/log": "~1.0"
|
27 |
+
},
|
28 |
+
"conflict": {
|
29 |
+
"symfony/config": "<2.7"
|
30 |
+
},
|
31 |
+
"suggest": {
|
32 |
+
"symfony/config": "",
|
33 |
+
"symfony/yaml": "",
|
34 |
+
"psr/log-implementation": "To use logging capability in translator"
|
35 |
+
},
|
36 |
+
"autoload": {
|
37 |
+
"psr-4": { "Symfony\\Component\\Translation\\": "" },
|
38 |
+
"exclude-from-classmap": [
|
39 |
+
"/Tests/"
|
40 |
+
]
|
41 |
+
},
|
42 |
+
"minimum-stability": "dev",
|
43 |
+
"extra": {
|
44 |
+
"branch-alias": {
|
45 |
+
"dev-master": "2.8-dev"
|
46 |
+
}
|
47 |
+
}
|
48 |
+
}
|
wp-rss-aggregator.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
* Plugin Name: WP RSS Aggregator
|
5 |
* Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
|
6 |
* Description: Imports and aggregates multiple RSS Feeds.
|
7 |
-
* Version: 4.17.
|
8 |
* Author: RebelCode
|
9 |
* Author URI: https://www.wprssaggregator.com
|
10 |
* Text Domain: wprss
|
@@ -76,7 +76,7 @@ use RebelCode\Wpra\Core\Plugin;
|
|
76 |
|
77 |
// Set the version number of the plugin.
|
78 |
if( !defined( 'WPRSS_VERSION' ) )
|
79 |
-
define( 'WPRSS_VERSION', '4.17.
|
80 |
|
81 |
if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
|
82 |
define( 'WPRSS_WP_MIN_VERSION', '4.8' );
|
4 |
* Plugin Name: WP RSS Aggregator
|
5 |
* Plugin URI: https://www.wprssaggregator.com/#utm_source=wpadmin&utm_medium=plugin&utm_campaign=wpraplugin
|
6 |
* Description: Imports and aggregates multiple RSS Feeds.
|
7 |
+
* Version: 4.17.6
|
8 |
* Author: RebelCode
|
9 |
* Author URI: https://www.wprssaggregator.com
|
10 |
* Text Domain: wprss
|
76 |
|
77 |
// Set the version number of the plugin.
|
78 |
if( !defined( 'WPRSS_VERSION' ) )
|
79 |
+
define( 'WPRSS_VERSION', '4.17.6' );
|
80 |
|
81 |
if( !defined( 'WPRSS_WP_MIN_VERSION' ) )
|
82 |
define( 'WPRSS_WP_MIN_VERSION', '4.8' );
|