breezy/weather-unit/README.md
2025-11-21 15:11:39 +01:00

192 lines
8.3 KiB
Markdown

# Breezy Weather unit conversion and formatting library
Android library to handle:
- Unit conversion, with syntax inspired by [Kotlin duration](https://kotlinlang.org/docs/time-measurement.html#time-sources).
- Unit formatting in various languages, including on devices without ICU support or with missing CLDR data, with a simplified backport (no handling of plural and non-nominative rules)
- Number formatting
- Computing of some common weather data (apparent temperature, dew point, etc)
Remains to do:
- Complete unit testing
- Plus and minus operations
- Parse from string
# Summary of supported units
Android translations are provided without plural rules.
## Temperature
| Unit | `NumberFormatter` | `MeasureFormat` | Android translations |
|--------------------|-------------------|-----------------|----------------------|
| Decidegree Celsius | ❌ | ❌ | ✅¹ |
| Degree Celsius | Android >= 11 | Android 7 to 10 | Android < 7 |
| Degree Fahrenheit | Android >= 11 | Android 7 to 10 | Android < 7 |
| Kelvin | Android >= 11 | Android 7 to 10 | Android < 7 |
* ¹ Only English, French and Esperanto translations are provided.
Supports temperature deviations conversions (such as degree days).
Supported widths for Android translations:
| Narrow | Short | Long |
|--------|-------|------|
| | | |
## Distance
| Unit | `NumberFormatter` | `MeasureFormat` | Android translations |
|---------------|-------------------|-----------------|----------------------|
| Meter | Android >= 11 | Android 7 to 10 | Android < 7 |
| Kilometer | Android >= 11 | Android 7 to 10 | Android < 7 |
| Mile | Android >= 11 | Android 7 to 10 | Android < 7 |
| Nautical mile | Android >= 11 | Android 7 to 10 | Android < 7 |
| Foot | Android >= 11 | Android 7 to 10 | Android < 7 |
Supported widths for Android translations:
| Narrow | Short | Long |
|--------|-------|------|
| | | |
## Speed
| Unit | `NumberFormatter` | `MeasureFormat` | Android translations |
|-----------------------|-------------------|-----------------|----------------------|
| Centimeter per second | Android >= 11 | Android 8 to 10 | Android < 8 |
| Meter per second¹ | Android >= 11 | Android 7 to 10 | Android < 7 |
| Kilometer per hour¹ | Android >= 11 | Android 7 to 10 | Android < 7 |
| Mile per hour¹ | Android >= 11 | Android 7 to 10 | Android < 7 |
| Knot | Android >= 11 | Android 8 to 10 | Android < 8 |
| Foot per second | Android >= 11 | Android 7 to 10 | Android < 7 |
| Beaufort scale² | Android >= 16 | ❌ | Android < 16 |
* ¹ Simplified backport where the per unit is combined with the duration unit below, so that for example Mile per hour in short width looks like mi/h instead of the mph used in some countries
* ² Not an unit, but a scale, so during conversions, uses the starting value in meters per second of the scale level
Supported widths for Android translations:
| Narrow | Short | Long |
|--------|-------|------|
| | | |
## Precipitation
| Unit | `NumberFormatter` | `MeasureFormat` | Android translations |
|------------------------|-------------------|-----------------|----------------------|
| Micrometer | Android >= 11 | Android 7 to 10 | Android < 7 |
| Millimeter | Android >= 11 | Android 7 to 10 | Android < 7 |
| Centimeter | Android >= 11 | Android 7 to 10 | Android < 7 |
| Inch | Android >= 11 | Android 7 to 10 | Android < 7 |
| Liter per square meter | Android >= 11 | Android 8 to 10 | Android < 8 |
| Unit | `NumberFormatter` | `MeasureFormat` | Android translations |
|---------------------------------|-------------------|-----------------|----------------------|
| Micrometer per hour | Android >= 11 | Android 8 to 10 | Android < 8 |
| Millimeter per hour | Android >= 11 | Android 8 to 10 | Android < 8 |
| Centimeter per hour | Android >= 11 | Android 8 to 10 | Android < 8 |
| Inch per hour | Android >= 11 | Android 8 to 10 | Android < 8 |
| Liter per square meter per hour | | | |
Supported widths for Android translations:
| Narrow | Short | Long |
|--------|-------|------|
| | | |
## Pressure
| Unit | `NumberFormatter` | `MeasureFormat` | Android translations |
|-----------------------|-------------------|-----------------|----------------------|
| Pascal | | | |
| Hectopascal | Android >= 11 | Android 7 to 10 | Android < 7 |
| Kilopascal | | | |
| Atmosphere | Android >= 11 | ❌ | Android < 11 |
| Millimeter of mercury | Android >= 11 | Android 7 to 10 | Android < 7 |
| Inch of mercury | Android >= 11 | Android 7 to 10 | Android < 7 |
Supported widths for Android translations:
| Narrow | Short | Long |
|--------|-------|------|
| | | |
## Air pollutant concentration
| Unit | `NumberFormatter` | `MeasureFormat` | Android translations |
|---------------------------|-------------------|-----------------|----------------------|
| Microgram per cubic meter | Android >= 11 | Android 8 to 10 | Android < 8 |
| Milligram per cubic meter | Android >= 11 | Android 8 to 10 | Android < 8 |
Supported widths for Android translations:
| Narrow | Short | Long |
|--------|-------|------|
| | | |
## Pollen concentration
| Unit | `NumberFormatter` | `MeasureFormat` | Android translations |
|-----------------|-------------------|-----------------|----------------------|
| Per cubic meter | | | |
Supported widths for Android translations:
| Narrow | Short | Long |
|--------|-------|------|
| | | |
## Duration
| Unit | `NumberFormatter`¹ | `MeasureFormat` | Android translations |
|-------------|--------------------|-----------------|----------------------|
| Nanosecond | Android >= 11 | Android 7 to 10 | Android < 7² |
| Microsecond | Android >= 11 | Android 7 to 10 | Android < 7² |
| Millisecond | Android >= 11 | Android 7 to 10 | Android < 7² |
| Second | Android >= 11 | Android 7 to 10 | Android < 7 |
| Minute | Android >= 11 | Android 7 to 10 | Android < 7 |
| Hour | Android >= 11 | Android 7 to 10 | Android < 7 |
| Day | Android >= 11 | Android 7 to 10 | Android < 7² |
* ¹ `NumberFormatter` supports only single duration, and will not be used when needing a formatting like `1 hour and 30 minutes`.
* ² Only English translations are provided.
Supported widths for Android translations:
| Narrow | Short | Long |
|--------|-------|------|
| | | |
## Ratio
| Unit | `NumberFormatter`¹ | `NumberFormat` | Android translations |
|----------|--------------------|----------------|----------------------|
| Permille | Android >= 11 | ❌ | Android < 11¹ |
| Percent | Android >= 11 | Android < 11 | |
| Fraction | Android >= 11 | Android < 11 | N/A |
* ¹ Only English translations are provided.
Supported widths for `NumberFormat` and Android translations:
| Narrow | Short | Long |
|--------|-------|------|
| | | |
# License
- This library: GNU Lesser General Public License v3.0
- The Unicode CLDR data: Copyright © 1991-Present Unicode, Inc. [Unicode License v3](https://www.unicode.org/license.txt)