forked from organicmaps/organicmaps
Merge pull request #2889 from VladiMihaylenko/master
[omim] [ios] Building levels and zip code.
This commit is contained in:
commit
fb299aa763
36 changed files with 336 additions and 82 deletions
|
@ -830,4 +830,8 @@
|
|||
<string name="download_over_mobile_header">Загрузить через сотовую связь?</string>
|
||||
<string name="download_over_mobile_message">На некоторых тарифных планах или в роуминге это может привести к значительным расходам.</string>
|
||||
<string name="error_enter_correct_house_number">Введите корректный номер дома</string>
|
||||
<string name="editor_storey_number">Количество этажей (максимум %1$s)</string>
|
||||
<string name="error_enter_correct_storey_number">Редактируйте здания высотой максимум %1$s этажей.</string>
|
||||
<string name="editor_zip_code">Почтовый индекс</string>
|
||||
<string name="error_enter_correct_zip_code">Введите корректный почтовый индекс</string>
|
||||
</resources>
|
||||
|
|
|
@ -834,4 +834,6 @@
|
|||
<string name="download_over_mobile_header">Download by using a cellular network connection?</string>
|
||||
<string name="download_over_mobile_message">This could be considerably expensive with some plans or if roaming.</string>
|
||||
<string name="error_enter_correct_house_number">Enter correct house number</string>
|
||||
<string name="editor_zip_code">ZIP Code</string>
|
||||
<string name="error_enter_correct_zip_code">Enter correct ZIP Code</string>
|
||||
</resources>
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
|
||||
namespace osm
|
||||
{
|
||||
// static
|
||||
int8_t const EditableMapObject::kMaximumLevelsEditableByUsers = 25;
|
||||
|
||||
bool EditableMapObject::IsNameEditable() const { return m_editableProperties.m_name; }
|
||||
bool EditableMapObject::IsAddressEditable() const { return m_editableProperties.m_address; }
|
||||
|
||||
|
@ -185,12 +188,16 @@ void EditableMapObject::SetFlats(string const & flats)
|
|||
m_metadata.Set(feature::Metadata::FMD_FLATS, flats);
|
||||
}
|
||||
|
||||
// static
|
||||
bool EditableMapObject::ValidateBuildingLevels(string const & buildingLevels)
|
||||
{
|
||||
uint64_t levels;
|
||||
return strings::to_uint64(buildingLevels, levels) && levels <= kMaximumLevelsEditableByUsers;
|
||||
}
|
||||
|
||||
void EditableMapObject::SetBuildingLevels(string const & buildingLevels)
|
||||
{
|
||||
auto constexpr kMaximumLevelsEditableByUsers = 50;
|
||||
uint64_t levels;
|
||||
if (strings::to_uint64(buildingLevels, levels) && levels <= kMaximumLevelsEditableByUsers)
|
||||
m_metadata.Set(feature::Metadata::FMD_BUILDING_LEVELS, buildingLevels);
|
||||
m_metadata.Set(feature::Metadata::FMD_BUILDING_LEVELS, buildingLevels);
|
||||
}
|
||||
|
||||
LocalizedStreet const & EditableMapObject::GetStreet() const { return m_street; }
|
||||
|
|
|
@ -54,6 +54,8 @@ struct LocalizedStreet
|
|||
class EditableMapObject : public MapObject
|
||||
{
|
||||
public:
|
||||
static int8_t const kMaximumLevelsEditableByUsers;
|
||||
|
||||
bool IsNameEditable() const;
|
||||
bool IsAddressEditable() const;
|
||||
|
||||
|
@ -93,6 +95,7 @@ public:
|
|||
void SetElevation(double ele);
|
||||
void SetWikipedia(string const & wikipedia);
|
||||
void SetFlats(string const & flats);
|
||||
static bool ValidateBuildingLevels(string const & buildingLevels);
|
||||
void SetBuildingLevels(string const & buildingLevels);
|
||||
/// @param[in] cuisine is a vector of osm cuisine ids.
|
||||
void SetCuisines(vector<string> const & cuisine);
|
||||
|
|
|
@ -39,25 +39,15 @@ vector<MWMPlacePageCellType> const kSectionCategoryCellTypes{MWMPlacePageCellTyp
|
|||
vector<MWMPlacePageCellType> const kSectionNameCellTypes{MWMPlacePageCellTypeName};
|
||||
|
||||
vector<MWMPlacePageCellType> const kSectionAddressCellTypes{
|
||||
{MWMPlacePageCellTypeStreet, MWMPlacePageCellTypeBuilding}};
|
||||
|
||||
vector<MWMPlacePageCellType> const kSectionDetailsCellTypes{
|
||||
{MWMPlacePageCellTypeOpenHours, MWMPlacePageCellTypePhoneNumber, MWMPlacePageCellTypeWebsite,
|
||||
MWMPlacePageCellTypeEmail, MWMPlacePageCellTypeCuisine, MWMPlacePageCellTypeWiFi}};
|
||||
|
||||
using CellTypesSectionMap = pair<vector<MWMPlacePageCellType>, MWMEditorSection>;
|
||||
|
||||
vector<CellTypesSectionMap> const kCellTypesSectionMap{
|
||||
{kSectionCategoryCellTypes, MWMEditorSectionCategory},
|
||||
{kSectionNameCellTypes, MWMEditorSectionName},
|
||||
{kSectionAddressCellTypes, MWMEditorSectionAddress},
|
||||
{kSectionDetailsCellTypes, MWMEditorSectionDetails}};
|
||||
MWMPlacePageCellTypeStreet, MWMPlacePageCellTypeBuilding, MWMPlacePageCellTypeZipCode};
|
||||
|
||||
MWMPlacePageCellTypeValueMap const kCellType2ReuseIdentifier{
|
||||
{MWMPlacePageCellTypeCategory, "MWMEditorCategoryCell"},
|
||||
{MWMPlacePageCellTypeName, "MWMEditorNameTableViewCell"},
|
||||
{MWMPlacePageCellTypeStreet, "MWMEditorSelectTableViewCell"},
|
||||
{MWMPlacePageCellTypeBuilding, "MWMEditorTextTableViewCell"},
|
||||
{MWMPlacePageCellTypeZipCode, "MWMEditorTextTableViewCell"},
|
||||
{MWMPlacePageCellTypeBuildingLevels, "MWMEditorTextTableViewCell"},
|
||||
{MWMPlacePageCellTypeOpenHours, "MWMPlacePageOpeningHoursCell"},
|
||||
{MWMPlacePageCellTypePhoneNumber, "MWMEditorTextTableViewCell"},
|
||||
{MWMPlacePageCellTypeWebsite, "MWMEditorTextTableViewCell"},
|
||||
|
@ -72,6 +62,57 @@ NSString * reuseIdentifier(MWMPlacePageCellType cellType)
|
|||
ASSERT(haveCell, ());
|
||||
return haveCell ? @(it->second.c_str()) : @"";
|
||||
}
|
||||
|
||||
vector<MWMPlacePageCellType> cellsForProperties(vector<osm::Props> const & props)
|
||||
{
|
||||
using namespace osm;
|
||||
vector<MWMPlacePageCellType> res;
|
||||
for (auto const p : props)
|
||||
{
|
||||
switch (p)
|
||||
{
|
||||
case Props::OpeningHours:
|
||||
res.push_back(MWMPlacePageCellTypeOpenHours);
|
||||
break;
|
||||
case Props::Phone:
|
||||
res.push_back(MWMPlacePageCellTypePhoneNumber);
|
||||
break;
|
||||
case Props::Website:
|
||||
res.push_back(MWMPlacePageCellTypeWebsite);
|
||||
break;
|
||||
case Props::Email:
|
||||
res.push_back(MWMPlacePageCellTypeEmail);
|
||||
break;
|
||||
case Props::Cuisine:
|
||||
res.push_back(MWMPlacePageCellTypeCuisine);
|
||||
break;
|
||||
case Props::Internet:
|
||||
res.push_back(MWMPlacePageCellTypeWiFi);
|
||||
break;
|
||||
case Props::Wikipedia:
|
||||
case Props::Fax:
|
||||
case Props::Stars:
|
||||
case Props::Operator:
|
||||
case Props::Elevation:
|
||||
case Props::Flats:
|
||||
case Props::BuildingLevels:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
void registerCellsForTableView(vector<MWMPlacePageCellType> const & cells, UITableView * tv)
|
||||
{
|
||||
for (auto const c : cells)
|
||||
{
|
||||
NSString * identifier = reuseIdentifier(c);
|
||||
if (UINib * nib = [UINib nibWithNibName:identifier bundle:nil])
|
||||
[tv registerNib:nib forCellReuseIdentifier:identifier];
|
||||
else
|
||||
ASSERT(false, ("Incorrect cell"));
|
||||
}
|
||||
}
|
||||
} // namespace
|
||||
|
||||
@interface MWMEditorViewController() <UITableViewDelegate, UITableViewDataSource,
|
||||
|
@ -205,81 +246,60 @@ NSString * reuseIdentifier(MWMPlacePageCellType cellType)
|
|||
return cell;
|
||||
}
|
||||
|
||||
// TODO(Vlad): This code can be much better.
|
||||
- (bool)hasField:(feature::Metadata::EType)field
|
||||
{
|
||||
auto const & editable = m_mapObject.GetEditableFields();
|
||||
return editable.end() != find(editable.begin(), editable.end(), field);
|
||||
}
|
||||
// TODO(Vlad): This code can be much better.
|
||||
- (bool)isEditable:(MWMPlacePageCellType)cellType
|
||||
{
|
||||
switch (cellType)
|
||||
{
|
||||
case MWMPlacePageCellTypePostcode: return [self hasField:feature::Metadata::FMD_POSTCODE];
|
||||
case MWMPlacePageCellTypePhoneNumber: return [self hasField:feature::Metadata::FMD_PHONE_NUMBER];
|
||||
case MWMPlacePageCellTypeWebsite: return [self hasField:feature::Metadata::FMD_WEBSITE];
|
||||
// TODO(Vlad): We should not have URL field in the UI. Website should always be used instead.
|
||||
case MWMPlacePageCellTypeURL: return [self hasField:feature::Metadata::FMD_URL];
|
||||
case MWMPlacePageCellTypeEmail: return [self hasField:feature::Metadata::FMD_EMAIL];
|
||||
case MWMPlacePageCellTypeOpenHours: return [self hasField:feature::Metadata::FMD_OPEN_HOURS];
|
||||
case MWMPlacePageCellTypeWiFi: return [self hasField:feature::Metadata::FMD_INTERNET];
|
||||
case MWMPlacePageCellTypeCuisine: return [self hasField:feature::Metadata::FMD_CUISINE];
|
||||
// TODO(Vlad): return true when we allow coordinates editing.
|
||||
case MWMPlacePageCellTypeCoordinate: return false;
|
||||
case MWMPlacePageCellTypeName: return m_mapObject.IsNameEditable();
|
||||
case MWMPlacePageCellTypeStreet: return m_mapObject.IsAddressEditable();
|
||||
case MWMPlacePageCellTypeBuilding: return m_mapObject.IsAddressEditable();
|
||||
case MWMPlacePageCellTypeCategory: return self.isCreating;
|
||||
default: NSAssert(false, @"Invalid cell type %@", @(cellType)); return false;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)configTable
|
||||
{
|
||||
self.offscreenCells = [NSMutableDictionary dictionary];
|
||||
self.invalidCells = [NSMutableArray array];
|
||||
m_sections.clear();
|
||||
m_cells.clear();
|
||||
for (auto const & cellsSection : kCellTypesSectionMap)
|
||||
{
|
||||
for (auto cellType : cellsSection.first)
|
||||
{
|
||||
if (![self isEditable:cellType])
|
||||
continue;
|
||||
m_sections.emplace_back(cellsSection.second);
|
||||
m_cells[cellsSection.second].emplace_back(cellType);
|
||||
NSString * identifier = reuseIdentifier(cellType);
|
||||
|
||||
if (UINib * nib = [UINib nibWithNibName:identifier bundle:nil])
|
||||
[self.tableView registerNib:nib forCellReuseIdentifier:identifier];
|
||||
else
|
||||
NSAssert(false, @"Incorrect cell");
|
||||
if (self.isCreating)
|
||||
{
|
||||
m_sections.push_back(MWMEditorSectionCategory);
|
||||
m_cells[MWMEditorSectionCategory] = kSectionCategoryCellTypes;
|
||||
registerCellsForTableView(kSectionCategoryCellTypes, self.tableView);
|
||||
}
|
||||
if (m_mapObject.IsNameEditable())
|
||||
{
|
||||
m_sections.push_back(MWMEditorSectionName);
|
||||
m_cells[MWMEditorSectionName] = kSectionNameCellTypes;
|
||||
registerCellsForTableView(kSectionNameCellTypes, self.tableView);
|
||||
}
|
||||
if (m_mapObject.IsAddressEditable())
|
||||
{
|
||||
m_sections.push_back(MWMEditorSectionAddress);
|
||||
m_cells[MWMEditorSectionAddress] = kSectionAddressCellTypes;
|
||||
if (m_mapObject.IsBuilding())
|
||||
m_cells[MWMEditorSectionAddress].push_back(MWMPlacePageCellTypeBuildingLevels);
|
||||
|
||||
registerCellsForTableView(kSectionAddressCellTypes, self.tableView);
|
||||
}
|
||||
if (!m_mapObject.GetEditableProperties().empty())
|
||||
{
|
||||
auto const cells = cellsForProperties(m_mapObject.GetEditableProperties());
|
||||
if (!cells.empty())
|
||||
{
|
||||
m_sections.push_back(MWMEditorSectionDetails);
|
||||
m_cells[MWMEditorSectionDetails] = cells;
|
||||
registerCellsForTableView(cells, self.tableView);
|
||||
}
|
||||
}
|
||||
sort(m_sections.begin(), m_sections.end());
|
||||
m_sections.erase(unique(m_sections.begin(), m_sections.end()), m_sections.end());
|
||||
}
|
||||
|
||||
- (MWMPlacePageCellType)cellTypeForIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
MWMEditorSection const section = m_sections[indexPath.section];
|
||||
MWMPlacePageCellType const cellType = m_cells[section][indexPath.row];
|
||||
return cellType;
|
||||
return m_cells[m_sections[indexPath.section]][indexPath.row];
|
||||
}
|
||||
|
||||
- (NSString *)cellIdentifierForIndexPath:(NSIndexPath *)indexPath
|
||||
{
|
||||
MWMPlacePageCellType const cellType = [self cellTypeForIndexPath:indexPath];
|
||||
return reuseIdentifier(cellType);
|
||||
return reuseIdentifier([self cellTypeForIndexPath:indexPath]);
|
||||
}
|
||||
|
||||
#pragma mark - Fill cells with data
|
||||
|
||||
- (void)fillCell:(UITableViewCell * _Nonnull)cell atIndexPath:(NSIndexPath * _Nonnull)indexPath
|
||||
{
|
||||
MWMPlacePageCellType const cellType = [self cellTypeForIndexPath:indexPath];
|
||||
switch (cellType)
|
||||
BOOL const isValid = ![self.invalidCells containsObject:indexPath];
|
||||
switch ([self cellTypeForIndexPath:indexPath])
|
||||
{
|
||||
case MWMPlacePageCellTypeCategory:
|
||||
{
|
||||
|
@ -361,10 +381,38 @@ NSString * reuseIdentifier(MWMPlacePageCellType cellType)
|
|||
text:@(m_mapObject.GetHouseNumber().c_str())
|
||||
placeholder:L(@"house_number")
|
||||
errorMessage:L(@"error_enter_correct_house_number")
|
||||
isValid:![self.invalidCells containsObject:indexPath]
|
||||
isValid:isValid
|
||||
keyboardType:UIKeyboardTypeDefault];
|
||||
break;
|
||||
}
|
||||
case MWMPlacePageCellTypeZipCode:
|
||||
{
|
||||
MWMEditorTextTableViewCell * tCell = static_cast<MWMEditorTextTableViewCell *>(cell);
|
||||
[tCell configWithDelegate:self
|
||||
icon:nil
|
||||
text:@(m_mapObject.GetPostcode().c_str())
|
||||
placeholder:L(@"editor_zip_code")
|
||||
errorMessage:L(@"error_enter_correct_zip_code")
|
||||
isValid:isValid
|
||||
keyboardType:UIKeyboardTypeDefault];
|
||||
break;
|
||||
}
|
||||
case MWMPlacePageCellTypeBuildingLevels:
|
||||
{
|
||||
NSString * placeholder = [NSString stringWithFormat:L(@"editor_storey_number"),
|
||||
osm::EditableMapObject::kMaximumLevelsEditableByUsers];
|
||||
NSString * errorMessage = [NSString stringWithFormat:L(@"error_enter_correct_storey_number"),
|
||||
osm::EditableMapObject::kMaximumLevelsEditableByUsers];
|
||||
MWMEditorTextTableViewCell * tCell = static_cast<MWMEditorTextTableViewCell *>(cell);
|
||||
[tCell configWithDelegate:self
|
||||
icon:nil
|
||||
text:@(m_mapObject.GetBuildingLevels().c_str())
|
||||
placeholder:placeholder
|
||||
errorMessage:errorMessage
|
||||
isValid:isValid
|
||||
keyboardType:UIKeyboardTypeNumberPad];
|
||||
break;
|
||||
}
|
||||
case MWMPlacePageCellTypeCuisine:
|
||||
{
|
||||
MWMEditorSelectTableViewCell * tCell = (MWMEditorSelectTableViewCell *)cell;
|
||||
|
@ -385,7 +433,9 @@ NSString * reuseIdentifier(MWMPlacePageCellType cellType)
|
|||
- (UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath
|
||||
{
|
||||
NSString * reuseIdentifier = [self cellIdentifierForIndexPath:indexPath];
|
||||
return [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
|
||||
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier];
|
||||
[self fillCell:cell atIndexPath:indexPath];
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (NSInteger)numberOfSectionsInTableView:(UITableView * _Nonnull)tableView
|
||||
|
@ -395,8 +445,7 @@ NSString * reuseIdentifier(MWMPlacePageCellType cellType)
|
|||
|
||||
- (NSInteger)tableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section
|
||||
{
|
||||
MWMEditorSection const sec = m_sections[section];
|
||||
return m_cells[sec].size();
|
||||
return m_cells[m_sections[section]].size();
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDelegate
|
||||
|
@ -404,6 +453,7 @@ NSString * reuseIdentifier(MWMPlacePageCellType cellType)
|
|||
- (CGFloat)tableView:(UITableView * _Nonnull)tableView heightForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath
|
||||
{
|
||||
NSString * reuseIdentifier = [self cellIdentifierForIndexPath:indexPath];
|
||||
|
||||
UITableViewCell * cell = [self offscreenCellForIdentifier:reuseIdentifier];
|
||||
// TODO(Vlad, IGrechuhin): It's bad idea to fill cells here.
|
||||
// heightForRowAtIndexPath is called way too often for the table.
|
||||
|
@ -428,11 +478,6 @@ NSString * reuseIdentifier(MWMPlacePageCellType cellType)
|
|||
}
|
||||
}
|
||||
|
||||
- (void)tableView:(UITableView * _Nonnull)tableView willDisplayCell:(UITableViewCell * _Nonnull)cell forRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath
|
||||
{
|
||||
[self fillCell:cell atIndexPath:indexPath];
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
|
||||
{
|
||||
switch (m_sections[section])
|
||||
|
@ -525,6 +570,15 @@ NSString * reuseIdentifier(MWMPlacePageCellType cellType)
|
|||
if (!osm::EditableMapObject::ValidateHouseNumber(val))
|
||||
[self markCellAsInvalid:indexPath];
|
||||
break;
|
||||
case MWMPlacePageCellTypeZipCode:
|
||||
m_mapObject.SetPostcode(val);
|
||||
// TODO: Validate postcode.
|
||||
break;
|
||||
case MWMPlacePageCellTypeBuildingLevels:
|
||||
m_mapObject.SetBuildingLevels(val);
|
||||
if (!osm::EditableMapObject::ValidateBuildingLevels(val))
|
||||
[self markCellAsInvalid:indexPath];
|
||||
break;
|
||||
default: NSAssert(false, @"Invalid field for changeText");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,7 +105,7 @@ namespace
|
|||
return c.m_name == category;
|
||||
});
|
||||
NSAssert(it != all.end(), @"Incorrect category!");
|
||||
self.selectedIndexPath = [NSIndexPath indexPathForRow:(it - all.begin())
|
||||
self.selectedIndexPath = [NSIndexPath indexPathForRow:(distance(all.begin(), it))
|
||||
inSection:m_categories.m_lastUsed.empty() ? 0 : 1];
|
||||
}
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ namespace
|
|||
}
|
||||
else
|
||||
{
|
||||
self.selectedStreet = it - m_streets.begin();
|
||||
self.selectedStreet = distance(m_streets.begin(), it);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -20,6 +20,8 @@ typedef NS_ENUM(NSUInteger, MWMPlacePageCellType)
|
|||
MWMPlacePageCellTypeName,
|
||||
MWMPlacePageCellTypeStreet,
|
||||
MWMPlacePageCellTypeBuilding,
|
||||
MWMPlacePageCellTypeZipCode,
|
||||
MWMPlacePageCellTypeBuildingLevels,
|
||||
MWMPlacePageCellTypeCuisine,
|
||||
MWMPlacePageCellTypeCount
|
||||
};
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "قد يكون هذا مكلفا جدا لبعض الخطط أو عند التجوال.";
|
||||
|
||||
"error_enter_correct_house_number" = "أدخل رقم منزل صحيح";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Toto by mohli být s některými tarify nebo roamingem výrazně dražší.";
|
||||
|
||||
"error_enter_correct_house_number" = "Zadejte správné číslo domu";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "This could be considerably expensive with some plans or if roaming.";
|
||||
|
||||
"error_enter_correct_house_number" = "Skriv det rigtige husnummer";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Das könnte mit einigen Tarifen oder beim Roaming sehr teuer werden.";
|
||||
|
||||
"error_enter_correct_house_number" = "Richtige Hausnummer eingeben";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "This could be considerably expensive with some plans or if roaming.";
|
||||
|
||||
"error_enter_correct_house_number" = "Enter correct house number";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Podría ser muy caro con ciertos planes o con itinerancia de datos.";
|
||||
|
||||
"error_enter_correct_house_number" = "Introducir el número de domicilio correcto";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Tämä vaihtoehto saattaa olla huomattavasti kalliimpi tietyillä sopimuksilla tai roaming-yhteydellä.";
|
||||
|
||||
"error_enter_correct_house_number" = "Syötä oikea talon numero";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Cela pourrait être très cher avec certains abonnements ou si vous êtes en déplacement.";
|
||||
|
||||
"error_enter_correct_house_number" = "Saisir un numéro de maison correct";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Ez jelentősen drága lehet némely előfizetés vagy roaming keretein belül.";
|
||||
|
||||
"error_enter_correct_house_number" = "Helyes házszámot adjon meg";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Ini bisa menjadi jauh mahal pada beberapa paket atau jika roaming.";
|
||||
|
||||
"error_enter_correct_house_number" = "Masukkan nomor rumah yang benar";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Quest'operazione potrebbe essere piuttosto costosa con alcuni piani o in roaming.";
|
||||
|
||||
"error_enter_correct_house_number" = "Inserisci numero civico corretto";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "プランによって、またはローミングしている場合、非常に高額になる可能性があります。";
|
||||
|
||||
"error_enter_correct_house_number" = "正しい番地を入力してください";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "이는 일부 플랜이나 로밍할 경우에 비싸다고 간주될 수 있습니다.";
|
||||
|
||||
"error_enter_correct_house_number" = "올바른 집 번호 입력";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "This could be considerably expensive with some plans or if roaming.";
|
||||
|
||||
"error_enter_correct_house_number" = "Skriv riktig husnummer";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Met sommige abonnementen of bij roaming kan dit behoorlijk duur zijn.";
|
||||
|
||||
"error_enter_correct_house_number" = "Een juist huisnummer invoeren";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Może to być kosztowne przy niektórych planach taryfowych lub w roamingu.";
|
||||
|
||||
"error_enter_correct_house_number" = "Wprowadź poprawny numer domu";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Isto pode ser significativamente caro, com alguns planos ou se roaming.";
|
||||
|
||||
"error_enter_correct_house_number" = "Introduzir um número de casa correto";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Aceasta poate fi destul de costisitoare în cazul unor abonamente sau dacă sunteți pe roaming.";
|
||||
|
||||
"error_enter_correct_house_number" = "Introduceți numărul corect al casei";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,11 @@
|
|||
"download_over_mobile_message" = "На некоторых тарифных планах или в роуминге это может привести к значительным расходам.";
|
||||
|
||||
"error_enter_correct_house_number" = "Введите корректный номер дома";
|
||||
|
||||
"editor_storey_number" = "Количество этажей (максимум %1$@)";
|
||||
|
||||
"error_enter_correct_storey_number" = "Редактируйте здания высотой максимум %1$@ этажей.";
|
||||
|
||||
"editor_zip_code" = "Почтовый индекс";
|
||||
|
||||
"error_enter_correct_zip_code" = "Введите корректный почтовый индекс";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "V prípade niektorých plánov alebo použitím roamingu by to mohlo byť značne nákladné.";
|
||||
|
||||
"error_enter_correct_house_number" = "Zadajte správne číslo domu";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Detta kan vara mycket dyrt med vissa abonnemang och vid roaming.";
|
||||
|
||||
"error_enter_correct_house_number" = "Ange korrekt husnummer";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "มันอาจมีราคาสูงมากหากใช้แผนโทรศัพท์บางประเภทหรือหากทำการโรมมิ่ง";
|
||||
|
||||
"error_enter_correct_house_number" = "กรอกบ้านเลขที่ให้ถูกต้อง";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Bu işlem bazı planlarla ya da dolaşım ise büyük ölçüde pahalı olabilir.";
|
||||
|
||||
"error_enter_correct_house_number" = "Doğru ev numarası girin";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Це може бути задорого за деякими планами або за умовами роумінгу.";
|
||||
|
||||
"error_enter_correct_house_number" = "Введіть правильний номер будинку";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "Như vậy sẽ rất đắt tiền với một số gói dữ liệu hoặc khi chuyển vùng.";
|
||||
|
||||
"error_enter_correct_house_number" = "Nhập số nhà chính xác";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "用一些方案或漫游的话这可能相当昂贵。";
|
||||
|
||||
"error_enter_correct_house_number" = "输入正确的房屋号";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
|
@ -1373,3 +1373,9 @@
|
|||
"download_over_mobile_message" = "用某些方案或漫遊的話這可能相當昂貴。";
|
||||
|
||||
"error_enter_correct_house_number" = "輸入正確的門牌號碼";
|
||||
|
||||
|
||||
|
||||
"editor_zip_code" = "ZIP Code";
|
||||
|
||||
"error_enter_correct_zip_code" = "Enter correct ZIP Code";
|
||||
|
|
18
strings.txt
18
strings.txt
|
@ -16236,3 +16236,21 @@
|
|||
pl = Wprowadź poprawny numer domu
|
||||
nl = Een juist huisnummer invoeren
|
||||
pt = Introduzir um número de casa correto
|
||||
|
||||
[editor_storey_number]
|
||||
tags = ios, android
|
||||
ru = Количество этажей (максимум %1$@)
|
||||
|
||||
[error_enter_correct_storey_number]
|
||||
tags = ios, android
|
||||
ru = Редактируйте здания высотой максимум %1$@ этажей.
|
||||
|
||||
[editor_zip_code]
|
||||
tags = ios, android
|
||||
en = ZIP Code
|
||||
ru = Почтовый индекс
|
||||
|
||||
[error_enter_correct_zip_code]
|
||||
tags = ios, android
|
||||
en = Enter correct ZIP Code
|
||||
ru = Введите корректный почтовый индекс
|
||||
|
|
Loading…
Add table
Reference in a new issue