All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Allow use of symfony/console ^6.0 and symfony/process ^6.0.
- Nothing.
- Use MIT license for use by widest audience possible.
- Nothing.
- Nothing.
- Nothing.
- Documentation and readiness as a public open source project.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Disallow the use of string callables in values passed to the formatter. Only array callables and closures are allowed.
- Provide functionality for formatting locale-appropriate display names with
Intl\DisplayNames
andFormatPHP::formatDisplayName()
.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Implement the
dayPeriod
property for formatting dates/times.
- Nothing.
- Nothing.
- Nothing.
-
Multiply percentages by 100 internally to match the behavior of FormatJS.
-
Use the correct calendar and clean up time zones.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Do not default to
narrowSymbol
forcurrencyDisplay
.
- Provide functionality for formatting numbers and currency through
Intl\NumberFormat
, as well asFormatPHP::formatNumber()
andFormatPHP::formatCurrency()
convenience methods. - Add
UnableToFormatNumberException
thrown when we're unable to format a number string.
- Sort extracted messages descending by key, using a natural, case-insensitive sorting algorithm.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Ensure non-ascii strings do not break pseudo locales.
- Add
Intl\NumberFormatOptions
to allow users to configure number string formatting. - Add
Intl\DateTimeFormatOptions
to allow users to configure date and time string formatting. - Provide functionality for formatting dates and times through
Intl\DateTimeFormat
, as well asFormatPHP::formatDate()
andFormatPHP::formatTime()
convenience methods. - Add
UnableToFormatStringException
from which other formatting exceptions will descend. - Add
UnableToFormatDateTimeException
thrown when we're unable to format a date or time string. - Allow instantiation of
FormatPHP
without configuration or message collection instances; FormatPHP will use the system's default locale, in this case.- Instantiation of
Intl\Locale
without a locale argument will default to the system default locale. - Instantiation of
Config
without a locale argument will create anIntl\Locale
using the system default locale.
- Instantiation of
- Update
UnableToFormatMessageException
to descend fromUnableToFormatStringException
.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Normalize the locale file name before searching for it in
MessageLoader
, to account for differences in case, as well as filesystem case sensitivity (e.g. "en-XB" vs. "en_xb")
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Check the contents of the file before parsing, to see if any of the formatting functions exist; if not, skip parsing the file
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Fixed case where errors occurring during flattening would cause
null
to be passed to a method that does not acceptnull
- Fixed case where "0" character caused a truthy check to fail, since
0 == false
- Add Crowdin as a format for writing and reading extracted messages
- Add
pseudo-locale
console command to allow conversion of a locale to one of the supported pseudo-locales (en-XA
,en-XB
,xx-AC
,xx-HA
, andxx-LS
). - Provide
--flatten
extraction option to tell the extractor to hoist selectors and flatten sentences as much as possible. For example,I have {count, plural, one{a dog} other{many dogs}}
becomes{count, plural, one{I have a dog} other{I have many dogs}}
. The goal is to provide as many full sentences as possible, since fragmented sentences are not translator-friendly. - Provide
--validate-messages
extraction option to print a list of validation failures and respond with a non-zero exit code on validation failures - Provide
--add-missing-ids
extraction option to update source code with auto-generated identifiers - Add
Util\FormatHelper
that providesgetReader()
andgetWriter()
methods - Introduce
Format\Format
final static class for format constants - Port @formatjs/icu-messageformat-parser to FormatPHP (
FormatPHP\Icu\MessageFormat\Parser
)
- The
Extractor\MessageExtractor
constructor now requiresUtil\FormatHelper
as a fifth parameter - Remove
$config
argument fromFormat\ReaderInterface
- Remove
$localeResolved
argument fromFormat\ReaderInterface
- Change type on
$options
argument inFormat\WriterInterface
fromMessageExtractorOptions
to a dedicatedWriterOptions
type - The
MessageLoader
constructor now accepts the following values for the$formatReader
parameter:- Fully-qualified class name for a class that implements
FormatPHP\Format\ReaderInterface
- An already-instantiated instance object of
FormatPHP\Format\ReaderInterface
- A callable with the shape
callable(mixed[]): FormatPHP\MessageCollection
- The path to a script that returns a callable with this shape
- Fully-qualified class name for a class that implements
- Nothing.
- Nothing.
- Support rich text formatting in the same manner as FormatJS. Previously, we allowed HTML tags with attributes, etc., but this limits our ability to provide pseudo-locales and validation.
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Parse only string literals or concatenated string literals
- Nothing.
- Nothing.
- Nothing.
- Nothing.
- Do not throw exceptions when reading empty files
- Use a ParserErrorCollection instead of array to pass errors through to the parsers for appending errors
- Provide
--parser
option to the extract command to allow custom parsers, in addition to the defaultphp
parser
- Remove
DescriptorParserInterface::parse()
- Add
DescriptorParserInterface::__invoke()
- Nothing.
- Nothing.
- Nothing.
- Initial release of base functionality:
FormatPHP\FormatPHP::formatMessage()
to format messages- Message extraction from application source code through
formatphp extract
console command - Message loading of locale messages in 3 formats: FormatPHP, Simple, and Smartling
FormatPHP\Intl\Locale
andFormatPHP\Intl\MessageFormat
for basic conformance with ECMA-402 and FormatJS
- Nothing.
- Nothing.
- Nothing.
- Nothing.